Agno
Verified as a sealed mission 2026-09-27 — general questions, live weather and BBC News through HexaEight-verified services, search of this machine’s documents, “who am I”, and conversation memory across turns.
As a sealed mission
Section titled “As a sealed mission”HexaEight decides who may ask and which command may run; Agno does the work. It is a
direct mission — the same one-card mission every framework
uses — and the answer is Agno’s, headed Answered by Agno.
hexaeight-activate enable agno # from your agent's folderhexaeight-activate enable agno --venv ~/my-env # or use an environment you already haveThen choose runmission → Agno_v1_Runner in the workspace. Requires agent r30, harness engine r41 and
Activate 1.0.68 or later, and Python 3.10–3.13 (or uv). The mission
bundle is the integration-agno-v1 release; the runner, pinned requirements and install-by-hand steps are in
integration_examples/agno.
| the one command | python3 runner.py --question-file question.txt — pinned to runner.py’s sha256 |
| the Agno half | an Agent with the tools as plain functions |
| model | Agno’s Claude on the turn’s route, authenticated with the turn’s token — no provider key in the file |
| pinned | agno==3.0.11, anthropic==1.8.0 |
| its own output | to agno-run.log in the turn’s folder, with one [tool] line per tool call |
The reply is Agno’s final assistant message only. Its content also carries text the model wrote before a tool call (“Let me check…”), which is working, not the answer.
To serve it to other people’s software, run the same enable inside a runner’s folder — see
Serving it to other people and systems.
As a process engine
Section titled “As a process engine”Verified 2026-08-19 — PASS, 9s. Session persistence: native SqliteDb.
The shortest integration of the ten. Agno owns persistence entirely — hand it a session_id and it
rehydrates history itself.
The runner
Section titled “The runner”import sys, ossys.path.insert(0, os.path.expanduser("~/agenttests"))import azcfg, hetoolfrom agno.agent import Agentfrom agno.models.openai import OpenAIChatfrom agno.db.sqlite import SqliteDb
DB = os.path.expanduser("~/agenttests/agno/agno.db")
def get_working_folder() -> str: """Return the agent's current working folder (absolute path).""" return hetool.get_working_folder()
def run_shell(command: str) -> str: """Run a shell command in the working folder and return its output.""" return hetool.run_shell(command)
def invoke(sid, message): c = azcfg.load() agent = Agent( model=OpenAIChat(id=c["model"], base_url=c["base_url"], api_key=c["api_key"]), db=SqliteDb(db_file=DB), session_id=sid, add_history_to_context=True, tools=[get_working_folder, run_shell], instructions="Be concise. Use tools for operational questions.", ) return str(agent.run(message).content).strip()That is the entire runner — no load, no save, no transcript handling.
Engine definition
Section titled “Engine definition”{ "type": "process", "file": "/home/you/agno/.venv/bin/python3", "nativeSession": true, "argsNew": ["/home/you/he_adapter.py", "/home/you/agno_session.py", "", "{message}"], "argsResume": ["/home/you/he_adapter.py", "/home/you/agno_session.py", "{sessionId}", "{message}"], "replyField": "result", "sessionIdField": "session_id", "approve": false, "workdir": "/home/you/work", "proxy": { "shape": "openai", "baseUrlEnv": "OPENAI_BASE_URL", "keyEnv": "OPENAI_API_KEY", "modelEnv": "OPENAI_MODEL", "model": "<route>|<provider model>" }}Adoption
Section titled “Adoption”- Keep your agent definition as it is.
- Pass HBIA’s
sidstraight through as Agno’ssession_id. - Add
db=SqliteDb(...)andadd_history_to_context=True. - Build
OpenAIChatfromazcfg.load(). - Seal the engine, point
external.engineat it, restart.
Gotchas
Section titled “Gotchas”add_history_to_context=True is not the default. Without it Agno stores the session but does not
feed prior turns to the model — persistence that looks like it works and produces an agent with no
memory. This is the single most likely thing to get wrong here.
OpenAIChat(id=...), not model=.... The keyword is id.
One SQLite file, many sessions. Keyed by session_id, so a swarm sharing a filesystem shares
history correctly — but SQLite over NFS is a known hazard. Keep the db on local disk.
Plain callables as tools, with real docstrings — Agno reads the signature and docstring.