agent-approval-protoco…
Use for approval_request, COMMAND_SET, approval identifiers, fingerprints, and progress data
Use before the first memory verb — read or write — whenever the orchestrator is about to touch memory as this turn's subject: deciding what persists, searching, curating, or triaging what a session injected at start.
$ npx -y skills add metraton/gaia --skill memory --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/memoryContext preview
The summary Claude sees to decide when to auto-load this skill.
Use before the first memory verb — read or write — whenever the orchestrator is about to touch memory as this turn's subject: deciding what persists, searching, curating, or triaging what a session injected at start.
name: memory description: Use before the first memory verb — read or write — whenever the orchestrator is about to touch memory as this turn's subject: deciding what persists, searching, curating, or triaging what a session injected at start.
Memory is the curation technique that turns selected experience into continuity: durable knowledge kept small, live work kept visible, and raw operational history left on the automatic event floors where it belongs.
| Floor | Purpose | Lifecycle | |---|---|---| | Events | Commands, dispatches, session events, and other operational facts | Automatic and short-lived | | Episodes | Searchable agent-turn outcomes and anomalies | Automatic, retained for diagnosis | | Curated memory | User-governed knowledge and work that must affect future decisions | Deliberate and long-lived |
Events and episodes are evidence, not durable truth.
Every curated item serves one human-facing role:
user preferences, and meaningful milestones.
The internal `class`, `status`, `type`, slug, and link enums implement these roles. Consult `reference.md` only when materializing or debugging them.
Before saving, ask: **does this already have a canonical home?** Work in flight belongs in a brief, plan, or task; domain state in project context or the owning system; raw execution detail in events, episodes, or the transcript.
Do not copy a fact into memory merely because it matters. A second source of truth becomes stale; a durable reference to the canonical object is enough.
by `gaia/store/writer.py::apply_host_scope`; a project anchor is refused.
Choose from how the fact was produced, not the current directory. The writer enforces the destination after that choice; `reference.md` owns its mechanics.
1. **Read the injected memory, then sweep what you are about to touch.** The digest and anchors in context are a worklist under a SessionStart budget, not the corpus. Before writing into an initiative — or whenever the question is what it still owes — read its whole live-pending set with `gaia memory get-relevant --initiative=<key>`, uncapped and with bodies. A reader who only sees the digest can add rows and never retire one. 2. **Search before writing; do not read silence as absence.** Find the topic's existing owner and its lineage — a duplicate divides relevance instead of strengthening knowledge. An empty result answers "no row matches this phrasing", never "this initiative owes nothing": a pending is worded as the problem looked when it opened, not as what just resolved it, so step 1's sweep is what finds it. 3. **Choose the home.** Run *Other home first*, and continue only for genuinely curated value. 4. **Adjudicate the change.** The orchestrator chooses scope (see *The one-line test* for a host-scoped initiative), create/append/correct/transition/link, role, lifecycle, and verification. Preserve lineage when knowledge replaces or graduates from earlier work. 5. **Curate against the exception boundary, then report.** Curation is delegated: the orchestrator adjudicates and executes directly, inside the boundary below, and reports what changed afterward — it does not show a proposal and wait for it to be confirmed.
| Operation | Handling | |---|---| | `add`/`append`/`reclassify`/`link` on `project`/`feedback`/`atom`/`negative` rows | autonomous, brief report | | `type=user` rows (about the user) | autonomous, flagged above the report for veto (convention — no mechanical backstop) | | contradicting or superseding a user `decision_*` row | ask first | | `edit`/`delete` | T3 approval flow; delegate to a specialist and never autoexecute | | `checkpoint` | autonomous after the milestone test; it is one atomic operation and remains all-or-nothing | | closing an objectively verifiable brief/plan | autonomous, report; run `gaia brief verify` by hand before `set-status` — `close` (which runs verification for free, `bin/cli/brief.py::_cmd_close`) is not on the orchestrator's `gaia` CLI lane, only `set-status` is | | promoting a TASK | never direct — dispatch `gaia-verifier` | | approvals | read/report only |
6. **Verify the durable result.** Read back the affected rows, lifecycle, scope, and links. Report partial batch failures per operation.
not one; minting a checkpoint for it turns memory into session summaries.
must resurface. One concern per thread — a single status cannot honestly represent several.
deserves visible follow-up. Persist it as a `feedback` live thread in initiative `gaia_system`, carried forward until closed or graduated.
Attention is finite and a live thread spends it every session. Two exits, and neither is deletion:
`reclassify --status=closed` retires it from the worklist and keeps the row.
`reclassify --status=graduated`, or `--class=an
Repo: metraton/gaia
Use for approval_request, COMMAND_SET, approval identifiers, fingerprints, and progress data
Use for the exact input/output schema and validation rules of agent_contract_handoff
Use when creating a new specialist agent for Gaia, or reviewing whether an existing agent follows the correct structure, tone, and component inventory
Use when the orchestrator must read, reconcile, route, and present an agent_contract_handoff
Use when writing, drafting, or publishing a blog article for metraton.github.io