Two product contracts
Sage has two contracts, and they differ in authority and in what counts as success:- Assisted covers the
conversationandsupervisedruntime modes. Sage observes the current Mythic operation and answers through Mythic chat.conversationis read-only;supervisedmay propose a concrete guarded action, and that exact action runs only after you approve it. - Auto is the experimental autonomous contract. Sage attempts an explicitly configured objective end to end without per-action approval. Its validation is GOAD-only, which does not establish reliability or generalization elsewhere.
The loop
When authority permits action, Sage runs an observe / model / select / execute / verify cycle:- Observe state from Mythic and BloodHound.
- Model the actions available as typed capabilities, with preconditions, effects, and structured verifiers.
- Select the next action.
- Execute it as a real Mythic task on a live payload callback.
- Verify the effect from real proof, then repair or re-plan, appending every proven effect to the engagement ledger.
Two execution paths
Requests travel one of two paths, and the difference matters when you read a trace or a result:
A result from the objective controller does not measure the agent graph, and the reverse. How each
path appears in traces is covered in Observability.
The agent graph
On the agent-graph path, requests route through a Supervisor and six specialists:The specialist agent graph. The Supervisor routes each request to the specialist that can act on it; the dashed Autonomous Executor is the objective controller, which runs beside the graph rather than inside it.
The Autonomous Executor in the diagram is the objective controller described above. It is not a
specialist the Supervisor delegates to: an objective run bypasses Supervisor and worker negotiation
entirely.
Each agent’s system prompt, and the TTP library the agents plan from, are plain files in the Sage
repository that you can edit. See
Tools and capabilities.
The engagement ledger
An LLM does not remember your engagement between turns. Sage keeps that memory outside the model, in a durable engagement ledger: one JSON file per Mythic operation, holding a table of hops toward the objective, each with a status. Every chat in the same operation shares it. You read and edit it in chat with/state; the operator’s side of that is covered in
The engagement ledger.
A hop flips to achieved only when a verifier confirms the effect from real evidence. Each achieved
hop carries a proof envelope: the Mythic callback, task, and transaction ids, the terminal task
status, and the verifier’s input and result hashes. A row without a valid envelope is quarantined
and can never count as proof.