Skip to content
中文

Plugin architecture

A personal agent logs each step of its loop to the HALO plugin over MCP and asks it for a report.Personal agenta dot, Grok Bot, Claude Code, your ownMSAsix channels between three modulesMCPstdio, or HTTPS for hosted agentslog each step, with the steps it usedobserve · remember · recallact · outcome · revisediagnosis on requesthalo_report · halo_traceHALO pluginon your machineToolscheck each event and its linksLedgerappend-only SQLite, one trace per agentAnalysischannels, evidence steps, levelReportthe survey's rows, with event ids
The agent keeps its own loop. HALO only receives the steps the agent logs, keeps them, and reads the loop off their links.

The plugin has four parts, and the agent stays as it is. HALO does not run the agent, wrap its model, or read its memory. It receives the steps the agent logs, over MCP or plain HTTP, and reads the loop off them.

Part What it does Where it lives
Tools Nine MCP tools: six to log a step of the loop, and halo_trace, halo_report, and halo_guide to read. Each logging tool checks that the step names only earlier events of the same agent. The same server takes the same events over plain HTTP. halo/mcp/server.py
Ledger Keeps every logged event, in order, with its links. Events are never edited or deleted, so a report can always be traced back to what the agent logged. halo/mcp/ledger.py, a SQLite file on the machine that runs the server
Analysis Reads channels, evidence steps, and the level from the links between events. It calls no model. halo/mcp/analysis.py
Report Returns the result in the rows of the survey’s tables, with the event ids behind every cell. halo_report, or halo trace report on the command line
  1. The agent does something in its loop, for example it sends a reminder it decided on by itself.
  2. It calls halo_act with a short summary, trigger self, and uses listing the observation and the memory the decision relied on.
  3. HALO checks that the ids in uses exist for this agent, stores the event as e5, and replies with the channels the links realized: Channels: S→A, M→A.
  4. Later, the user replies that the reminder came too early. The agent calls halo_outcome with about: e5.
  5. When anyone asks, halo_report reads all of the agent’s events and returns channels, steps, and level.
  • Links carry the meaning. HALO does not interpret summaries. A channel, an evidence step, or a level appears only through the ids an event names in uses and about. Event model gives the rules.
  • One trace per agent. Events are kept per agent name, so a dot and Grok Bot can share one server without mixing their traces.
  • Sessions mark time. State durability means something kept in one interaction is used in a later one, so every event carries a session label, such as a conversation or a wake-up.
  • Nothing is inferred as absent. A missing channel is “not observed”. What a trace can show explains why.
  • No model, no keys. The plugin is deterministic and stores no credentials. The host’s own model decides what to log.

Where the plugin stands among HALO’s modes

Section titled “Where the plugin stands among HALO’s modes”

Read mode asks whether a system’s sources report each channel and step. Run mode asks whether cutting one changes the output. The plugin asks which channels and steps appear in what a running agent did. Run mode gives the strongest evidence, but it needs code. The plugin works on products whose code is closed, and a level it reports can then be checked against the product’s documentation in read mode.