mirror of
https://github.com/lukaszraczylo/claude-adam.git
synced 2026-07-13 04:20:11 +00:00
7962e85578
Lifecycle redesign: - Each proposal records source_entries: [<ts>...] in frontmatter listing the journal timestamps that fed its cluster. - After apply/reject, skill calls adam/scripts/adam-archive.mjs which moves matching entries from journal.jsonl to journal/actioned-<id>.jsonl. - Agent reads applied/ + rejected/ frontmatter on each /reflect, builds an excluded-timestamps set, skips any leftover already-actioned entries. - cursor field in state.json is vestigial; agent ignores it. Effect: journal stays bounded by active observations. Rule changes re-evaluate the remainder without manual rewind. Race-safer for parallel sessions on shared state.json (no cursor write contention). Memory drafting: - agents/adam.md adds 'Memory drafting protocol' parallel to Skill drafting. - Memory proposals MUST contain auto-memory frontmatter (name, description, type, originSessionId) in '# Proposed change' body. - Skill enforces frontmatter check at apply time; refuses if missing. Tests: 18 -> 21. Two new tests for adam-archive happy path + no-op. Migration: existing applied proposals lack source_entries. Their backing journal entries archived as a one-time bulk migration; legacy proposals annotated with migration note.
6.3 KiB
6.3 KiB
name, description
| name | description |
|---|---|
| adam-self-improvement | Use when the user types /reflect, asks "what has adam learned", asks to "review proposals", or wants to inspect the self-improvement queue. Dispatches the adam subagent to analyse the observation journal and presents proposals for approve/reject/edit. |
adam-self-improvement
You are about to drive a review session for ADAM, the self-improvement layer. You operate in the main thread with the user present. The adam subagent does the heavy analysis; you orchestrate.
When to invoke
- User types
/reflect - User asks: "what has adam learned", "any proposals", "review the queue"
- SessionStart nudge said proposals are pending and user wants to act on it
Protocol
1. Dispatch the analyst
Use the Agent tool with subagent_type: "adam" and prompt:
Run a single analysis pass.
Inputs:
- journal_path: ~/.claude/adam/journal.jsonl
- state_path: ~/.claude/adam/state.json
- usage_path: ~/.claude/adam/usage.json
- proposals_dir: ~/.claude/adam/proposals/
- applied_dir: ~/.claude/adam/applied/
- rejected_dir: ~/.claude/adam/rejected/
- transcripts_root: ~/.claude/projects/
- skills_root: ~/.claude/skills/
Follow your system prompt exactly. Emit a single JSON punch list as your final message.
Wait for return.
2. Auto-apply high-confidence items
For each id in high_confidence:
- Read the proposal file from
~/.claude/adam/proposals/<id>-*.md. - Verify in front of the user: print
id,target,confidence,blast_radius,cross_session_evidence,auto_apply_eligible. - Apply the change:
- For
skill_new:mkdir -p ~/.claude/skills/<slug>/, thenWritethe proposal's# Proposed changebody to~/.claude/skills/<slug>/SKILL.md. After write, print: "skill<slug>written to~/.claude/skills/<slug>/SKILL.md— activates immediately — Claude Code v2.1.0+ auto-hot-reloads user-level skills, no restart needed." - For
memory:Writethe proposal's# Proposed changebody (which MUST include the auto-memory frontmatter — see "Memory drafting protocol" inagents/adam.md) to the path intarget(under~/.claude/projects/<encoded-home>/memory/, where<encoded-home>is the user's home dir with/replaced by-, e.g.-Users-aliceon macOS). Then updateMEMORY.mdindex with a one-line pointer. - For other types under auto-apply: apply via Write/Edit per
# Proposed change. (Note: onlymemoryandskill_newqualify for auto-apply per the rubric.)
- For
- Move proposal to
~/.claude/adam/applied/<UTC-ts>-<id>.md. - Archive consumed journal entries:
node ~/.claude/adam/scripts/adam-archive.mjs ~/.claude/adam/applied/<UTC-ts>-<id>.md— moves entries listed in proposal'ssource_entriesfromjournal.jsonltojournal/actioned-<id>.jsonlso subsequent/reflectruns do not re-cluster them.
Print: auto-applied N proposals: [ids].
3. Walk the queue
For each id in queued:
a. Read and display the proposal in full (frontmatter + body). b. Ask the user: approve / reject / edit. c. On approve:
- For
claude_md_edit: backupcp ~/.claude/CLAUDE.md ~/.claude/adam/applied/<ts>-claude-md-backup.mdfirst. - For
deletion:mkdir -p ~/.claude/adam/trash/<ts>thenmvthe artifact into it. Print restoration command. - For
skill_new:mkdir -p ~/.claude/skills/<slug>/, then write# Proposed changebody to<slug>/SKILL.md. Tell user: "skill<slug>written — activates immediately (CC v2.1.0+ auto-hot-reload)." - For
skill_edit: apply the unified diff in# Proposed changeto the existing SKILL.md attarget(append-only — never replace existing content). - For
memory: write# Proposed changebody (must include auto-memory frontmatter) totargetand updateMEMORY.mdindex with a one-line pointer. - For all others: apply via Write/Edit per the proposal's
# Proposed change. - Move proposal to
~/.claude/adam/applied/<ts>-<id>.md. - Archive:
node ~/.claude/adam/scripts/adam-archive.mjs ~/.claude/adam/applied/<ts>-<id>.md. d. On reject: ask for reason in one line. Append# Reason\n<reason>to proposal body. Move to~/.claude/adam/rejected/<id>.md. Archive:node ~/.claude/adam/scripts/adam-archive.mjs ~/.claude/adam/rejected/<id>.md. e. On edit: ask the user for the change, edit the proposal in place, then loop back to step 3a for that same id.
4. Handle failures
If apply fails (file write error, target missing): leave proposal in proposals/, append # Apply error\n<error> to its body. Tell the user. Do not move it.
5. Summary
End with one block:
adam reflect summary:
observations processed: <new>
auto-applied: <N>
approved: <N>
rejected: <N>
edited+approved: <N>
failed: <N>
Karpathy constraints (you must enforce on each apply)
Before writing any proposal:
- Confirm
# Assumptionssection is non-empty. - Confirm
# Success criterionsection is non-empty and runnable. - Confirm change is ≤50 LOC for non-
skill_new, or ≤80 LOC forskill_newbody. If larger, ask the user once: "this proposal is N LOC — proceed?" - For
claude_md_edit: confirm 3+ distinct cwds in the# Whysection. - For
deletion: confirm both criteria (a) and (b) from the agent's special handling are documented in the proposal. - For
skill_new: confirm the slug doesn't collide with any existing skill in~/.claude/skills/. If it does, refuse and ask user to rename. - For
skill_edit: confirm the diff is append-only (no-lines that remove existing content) and that target SKILL.md exists. - For
memory: confirm# Proposed changebody starts with---frontmatter containing required fieldsname,description,type,originSessionId. Refuse if frontmatter missing — agent must redraft per the Memory drafting protocol. - Confirm
source_entriesis present in proposal frontmatter as a non-empty list (used for archive). Warn (do not refuse) if missing — legacy proposals from before v0.2.0 won't have it.
If any check fails, refuse to apply and ask the user how to proceed.
Things you MUST NOT do
- Do not auto-apply anything not in
high_confidence. - Do not invoke other skills during a
/reflectrun. - Do not modify
settings.jsonwithout explicit user yes. - Do not hard-delete anything. Use
mvto~/.claude/adam/trash/<ts>/. - Do not bypass the rubric (
auto_apply_eligible: falsemeans queue, full stop).