Reading traces: one shape for every harness
In short. Every session becomes the same simple list of actions, whichever agent wrote it, and each action is labelled by what it does.
For example. “Look up ticket W-1041” and “look up ticket W-1042” become the same step, look up {id}, so Adage can see the agent doing the same thing twice.
- observereads, lookups
- verifytests, checks
- regeneratecodegen, builds
- environmentinstalls
- authoredits
- publishpush, release
From safest to riskiest. The further along a step is, the less Adage may push it: lookups and checks can be insisted on, edits and publishing are never suggested.
More detail
A transcript becomes a prompt followed by a flat list of steps. Tool calls that share one message id form one turn; results join their calls by id, wherever they appear. A compound shell command splits into one step per sub-action, and a failure is blamed on its last part only, unless the command used ||.
Each step gets a template key, with specifics replaced (a ticket becomes {id}), and an effect. Effects are ranked, and the rank caps how strongly a step may ever be directed (shown above).
Observe and verify steps may fire. A regenerate step fires only after its edit. An install primes at most and starts nascent until a person reviews it. Edits and publishing are never directed. Only the hook's own output counts as a directive: what a directive named is exposed from the moment it arrived, and is no evidence for a reflex that directs it, so a reflex never learns from its own advice. Sub-agent transcripts are read too.
In the code: crates/adage-learn/src/{lib,import,codex,opencode,cache}.rs · crates/adage-core/src/types.rs