Where briefings come from
SenseLab compiles digests continuously from what agents write, read and commit. Each digest has a type and a scope:
Recompilation is gated on drift, so a digest is rebuilt when the knowledge under it has changed, not on a timer. Agents read them with
amfs_briefing(entity_path=...) in MCP or mem.briefing(...) in the SDKs; compact=True returns only the lead digest, and since=<timestamp> on a repeat call returns only what changed.
Read the evidence sections first
The lead digest carries the state of the record, not just a summary:
The labels come from the evidence model:
untested, validated, contested, discredited. A regime shift is an event rather than a state — it is flagged for a week after the latest failure and then clears, so a rule discredited last month does not keep steering today’s runs.
Procedures and the environment
Procedures — entries of typeprocedure that say how to do a task — are listed in their own section of the briefing. A procedure whose preconditions name a different environment (another model, runtime or agent version) is set apart as procedures_not_applicable, with the failing precondition spelled out, so an agent on Python 3.12 is not handed steps that only work on 3.10. The agent’s environment is read from the session; the SDKs let you pass it explicitly.
Guidance: what to try
When a task ends in a choice among a fixed set of actions — a tool with anaction enum, a runbook with numbered fixes — the agent asks for priors on the candidates:
action_priors — for each action, how often it won and lost here on similar tasks, who tried it and when — and a recommendation:
Declaring a
situation — a stable label for the kind of task, never the task text — stores the outcome under that label, so the next run that declares the same one gets priors counted over that situation’s own record.
In the Python SDK, Run.begin() wraps this into a single Guidance object with the rendered text to inject, the procedures that apply, the recommendation and a plan — the order to try actions in for the whole run, never including one that already failed here. See Guidance with Run.
Closing the loop from the briefing
Guidance is only as good as what flows back. Three habits keep it sharp:- Name what you acted on. A briefing serves several entries and the agent follows one. Passing
causal_entry_keyson the outcome sends the result to that one, instead of charging every entry in the context. - Mark failed attempts.
amfs_record_attemptcloses the approach the agent just tried, so the entry that misled it receives the failure and only what was read afterwards is credited with the recovery. - Commit the outcome. Without
amfs_commit_outcome, the run never reaches the record and the next briefing is no better than this one.
What’s next
Confidence & Evidence
How outcomes move the labels the briefing reads.
Context Graphs
The decision trace an outcome is committed against.
Python SDK
briefing(), retrieve() with priors, and Run.Behavior
When the record says a fix is needed, not just a different action.
