Agno report verification
Type: agentic-system-analyses/types/agentic-system-verification.md
Verification
The current reports support publication of a bounded implementation account. The previous output-stage blocker is repaired. I read the complete pinned members, their types, the shared contract, correction answers, previous verification and structural check. The epistemic answer is an argument checked below, not proof of repair; the other answer files are empty. The structural check reports none, so there is no structural failure to route. The checkout HEAD equals the boundary revision. Its top-level tree and SDK directory tree support the selected SDK/AgentOS subsystem scope, not whole-monorepo coverage. Source authority remains SRC-1 as registered in boundary. No target execution, tests, provider calls or experiments were performed.
I examined every declaration, its source anchors and qualifications, evidence status, explicit Part of: relation, annotation, claim and reconciliation disposition. Independent source inspection read the retained passages with surrounding code, then followed consequential producer/consumer and alternate seams. This checks semantic support rather than repeating code's quotation-occurrence and reference checks. It is not an exhaustive audit of adapters or async, stream and graph branches. All route operation statuses remain uninspected; no record claims an observed benefit. There are no evidenced-absence declarations. Component records distinguish provider inference and numerical embeddings from local symbolic configuration and natural-language content; they do not infer weight updates, immutable served versions or stable endpoints.
Correction and output-stage disposition
The corrected EPI-RTE-output-replacement remains a valid container. Its separately declared EPI-RTE-output-generation and EPI-RTE-parser-rewriting, their payload objects, ledger rows and bounded conclusion now retain the distinctions the earlier judgment required. These are actual material stages, not aliases or invented subdivisions.
SRC-1, libs/agno/agno/agent/_messages.py and libs/agno/agno/agent/_response.py, support different inputs: output generation receives the run-message list after system-prompt substitution when configured and unconditional last-entry removal; parser rewriting receives a separate system/user list containing the resulting content and schema-oriented guidance. The output helper copies content only. The parser's assistant-message branch appends that message and copies both content and parsed; without an assistant message those substitutions do not occur. SRC-1, libs/agno/agno/agent/_run.py, orders output generation before parser rewriting and then RunOutput update. The response consumer selects parsed versus text under schema rules, and filters retained messages by add_to_agent_memory. Thus neither stage owns unconditional independent finality or guaranteed replay. The corrected records preserve this qualification, including preexisting parsed output potentially governing delivery. I dismiss the previous blocker; no dependent passage retains its defective combined-stage conclusion.
Runtime and workflow dispositions
RT-RTE-agent-run is supported as a configured host/model/tool route. Source ordering places background extraction launch before foreground response generation, post-hooks after output conversion, background waiting before summary generation, and storage after completion. Waiting does not retroactively add final output to an earlier snapshot. The separate session/run writes support a persistence seam, not atomic external effects. Specific check exceptions mark error while preserving non-null generated content. SRC-1: libs/agno/agno/agent/_run.py, libs/agno/agno/agent/_session.py, libs/agno/agno/agent/_messages.py.
RT-RTE-tool-confirmation correctly limits its gate to marked local Functions: the dispatcher pauses rather than executing, and continuation selects execution or rejection. Native provider dictionaries and direct host executors remain different paths. Function execution and ShellTools' subprocess invocation support the host-effect boundary, not sandboxing. The instruction and dispatch authority paths are distinct consumers with natural-language versus executable force. HTTP authentication is configuration-dependent and does not govern SDK calls. SRC-1: libs/agno/agno/models/base.py, libs/agno/agno/agent/_tools.py, libs/agno/agno/tools/function.py, libs/agno/agno/tools/shell.py, libs/agno/agno/os/auth.py, libs/agno/agno/os/routers/agents/router.py.
RT-RTE-queue-dispatch connects enqueue admission to worker execution under ticket identities and to pause/cancel/error settlement. Continuation re-enters the same run. Nonqueueable media/factory/remote submissions bypass durability; session serialization depends on store support. These qualifications prevent a 202 or a retry protocol from being mistaken for exactly-once external effects. RT-RTE-config-admission correctly separates PostgreSQL published-row immutability/current-pointer checks from explicit version/label reconstruction and live Python objects. SRC-1: libs/agno/agno/os/job_queue.py, libs/agno/agno/os/routers/agents/router.py, libs/agno/agno/db/postgres/postgres.py, libs/agno/agno/agent/agent.py.
Selected-member preparation and shallow state copying support RT-RTE-team-delegation. Deepest-last-content selection and the nested-workflow pause warning support RT-RTE-workflow-step. The outer WF-RTE-sequential-delivery is a distinct coordinator. The cookbook's complete topology and prompts, shared session-state reference, default outer skip policy, last-output selection and completed-event cancellation sentinel support the workflow's bounded findings. Completion is not factual acceptance or proof all steps succeeded. Separate messages do not isolate shared state or effects, and the writer is not automatically given raw gathering evidence. SRC-1: libs/agno/agno/team/_default_tools.py, libs/agno/agno/workflow/step.py, libs/agno/agno/workflow/types.py, libs/agno/agno/workflow/workflow.py, cookbook/00_quickstart/sequential_workflow.py.
Memory and epistemic dispositions
The memory records preserve materially different objects and consumers: session traces versus summaries; MemoryManager rows versus LearningMachine personal/profile/session rows; learned insight text versus vectors and metadata; live entity facts versus retired history; decision reasoning versus reported outcomes; and offload payload versus index and preview. Source display code supports the narrower fields actually delivered. Profile/memory/session recall uses identity lookup, learned knowledge uses a query and namespace, entity recall combines a bounded directory with selected expansion, and decision recall deliberately crosses sessions with a smaller display cap. These are not one relevance selector or one global token budget. SRC-1: libs/agno/agno/agent/_messages.py, libs/agno/agno/learn/machine.py, and libs/agno/agno/learn/stores/user_profile.py, libs/agno/agno/learn/stores/user_memory.py, libs/agno/agno/learn/stores/session_context.py, libs/agno/agno/learn/stores/learned_knowledge.py, libs/agno/agno/learn/stores/entity_memory.py, libs/agno/agno/learn/stores/decision_log.py.
Extraction, direct writes and HTTP edits retain different admission controls. Model guidance and software capability grants do not establish human authorship or per-content approval. The concurrent snapshot supports the automatic timing qualification. Optimization's clear/refill path, profile-only Curator, entity retirement, failed knowledge-deletion retry anchors and complete/error-free managed-page pruning support separate withdrawal semantics, not universal erasure. Page tools deliver serialized chat results versus typed MCP results. See MEM-RTE-user-memory, MEM-RTE-memory-editing, MEM-RTE-profile-curation, MEM-RTE-entity-memory, MEM-RTE-knowledge-context, MEM-RTE-page-knowledge. SRC-1: libs/agno/agno/agent/_managers.py, libs/agno/agno/memory/manager.py, libs/agno/agno/os/routers/learnings/router.py, libs/agno/agno/learn/curate.py, libs/agno/agno/knowledge/knowledge.py, libs/agno/agno/knowledge/page/_coordinator.py, libs/agno/agno/knowledge/page/tools.py.
RT-RTE-context-window and its memory annotation distinguish summary/tail delivery from intact session history and optional archived display. Archive rendering clips tool text, qualifying MEM-CLM-nonlossy-archive. MEM-RTE-result-offload has explicit checked, capped reload rather than automatic pointer dereference. MEM-RTE-tool-compression retains a serializable derived field but withholds universal provider/replay claims; its prompt requests removal of hedging. Skills metadata-before-detail is working-context control, not demonstrated trace-fed revision. SRC-1: libs/agno/agno/compaction/archive.py, libs/agno/agno/compaction/compaction.py, libs/agno/agno/offload/store.py, libs/agno/agno/offload/tools.py, libs/agno/agno/compression/manager.py, libs/agno/agno/models/message.py, libs/agno/agno/skills/agent_skills.py.
The epistemic routes retain heterogeneous licenses. Finance import formats an attributed provider field without checking truth. PII regex checks syntactic membership and can remove information. Hook rejection changes status without reversing prior effects. Criteria judgment produces opinion/threshold classification with caller-defined callback effects; its post-hook logs rather than automatically rejecting failed output. Accuracy assumes the reference correct. Reliability checks supplied clean tool-execution evidence, not external service success. Scored SFT export consumes pass plus text/trace eligibility, with an alternate allowing scored failures; it does not train or install policy. Learning insertion supplies schema/namespace admission, not a truth test or an approval-artifact gate. PROPOSE remains instruction-level guidance, distinct from local Function confirmation. Unseen outputs justify indeterminate semantic relations, not automatic conjecture or entailment. SRC-1: libs/agno/agno/tools/yfinance.py, libs/agno/agno/guardrails/pii.py, libs/agno/agno/agent/_hooks.py, libs/agno/agno/eval/agent_as_judge.py, libs/agno/agno/eval/accuracy.py, libs/agno/agno/eval/reliability.py, libs/agno/agno/environments/_engine.py, libs/agno/agno/scorer/judge.py, libs/agno/agno/environments/exporters/sft.py, libs/agno/agno/learn/stores/learned_knowledge.py.
Relations and omission-search stopping decision
Both duplicate supersessions identify the same source-native referents: learned-knowledge objects and Curator routes. They do not replace analytical fields or evidence statuses. Explicit containment of finance/input/answer payloads and optional stages inside the Agent route is supported; output/parser payloads and stages now have their own supported containers. Profile memories are a conditional profile part, not the entire profile. Broad learning routes, auxiliary model-role families and outer Workflow versus Step remain partial overlaps, not aliases. The current output-stage disposition agrees with the repaired records. All memory integration issues receive compatible dispositions. No current unresolved cross-report conflict is established, and no malformed conflict needs routing.
I selected omission questions from the frozen SDK tree, shipped callers and producer/consumer dependencies: whether manual post-response capture changes the automatic timing conclusion; whether scores have downstream force beyond inert reporting; and whether eviction implies full original-detail restoration. Independent inspection confirms a manual capture hook and shipped composition caller, preserved as the first limit below. Scorer-to-export admission is already recorded; the shipped trainer loader adds a concrete message-array consumer, preserved as the second limit. Archive clipping, offload access and compression serialization confirm the recorded distinction between storage, selection, delivery and fidelity. These questions have supported dispositions. Further optional expansion stopped because no identified material challenge remains unresolved and the reports already withhold complete inventories, system-complete negatives and adapter-wide guarantees. Uninspected alternatives remain uninspected, not absent. No exercised learning, causal benefit or system-wide theory-builder/self-improvement verdict follows.
The manual hook's source input is explicit, SRC-1:
def learning_capture(run_output=None, agent=None, session=None, user_id=None, run_context=None) -> None: messages = list(getattr(run_output, "messages", None) or []) ---
libs/agno/agno/learn/machine.py
Its shipped caller places it after response generation:
post_hooks=[learning.capture_hook()], ---
cookbook/08_learning/11_composition/always_capture.py
The downstream dataset loader reads serialized messages rather than producing a trained model:
def load_message_rows(path: Path): return [json.loads(line)["messages"] for line in path.read_text().splitlines()] ---
cookbook/environments/_12_trainer_loader/basic.pyreport = to_sft_jsonl(zone, output_path) message_rows = load_message_rows(output_path) assert len(message_rows) == report.n_written ---
cookbook/environments/_12_trainer_loader/basic.py
Blockers
none
Limits
- MEM-RTE-profile-extraction, MEM-RTE-memories-extraction and MEM-RTE-learning-context leave manual capture input timing incompletely inventoried. SRC-1:
libs/agno/agno/learn/machine.pycapturesrun_output.messages, andcookbook/08_learning/11_composition/always_capture.pywires that capture as a post-hook withoutlearning=. This separate producer door does not refute the recorded automatic concurrent snapshot. Store transformations and automatic timing conclusions hold; withhold a complete automatic-versus-manual comparison of capture timing, completion guarantees and trace coverage. - EPI-RTE-sft-selection leaves downstream dataset consumers incompletely inventoried. SRC-1:
cookbook/environments/_12_trainer_loader/basic.pyships export-to-message-array loading and a count assertion, stopping before training. Export admission remains supported; withhold complete downstream-consumer coverage or training-loop closure. Neither this loader nor export establishes training, parameter updates or improvement.