Why this exists
The plugin is deterministic. The agent is not. So we separate:
- •Agent: decides what to learn (writes the spec).
- •Tool (
compound_apply): validates and applies changes safely.
CompoundSpec v2
Top-level keys (all optional except schema_version):
- •
schema_version: must be2 - •
auto:{ reason, sessionID }
instincts
- •
create[]:{ id, title, trigger, action, confidence } - •
update[]:{ id, confidence_delta, evidence_note }
skills
- •
create[]:{ name, description, body } - •
update[]:{ name, description?, body }
Notes:
- •
namemust match^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$. - •
bodyis markdown without frontmatter. - •If updating a skill:
skills.update[].bodymust be the entire final managed body (no snippets/diffs).
docs
- •
sync: boolean (refresh derived indexes/blocks) - •
blocks.upsert[]:{ file, id, content }
Only upsert AI-managed blocks; do not rewrite human-owned text.
When writing markdown content inside docs.blocks.upsert[].content:
- •Use repo-root-relative paths when referencing files/dirs (no absolute paths).
changelog
- •
{ note }: a single sentence describing the memory delta.
Apply
- •Draft the CompoundSpec v2 as a single JSON object.
- •Output JSON only (no code fences, no commentary).
- •Run
compound_apply()to validate and write the memory/doc updates.
Manual notes
This section is preserved when the skill is updated. Put human notes, caveats, and exceptions here.