Skip to content

feat(metadocs): living project memory distilled from sessions into a git repo - #25

Merged
AbsoluteMode merged 1 commit into
mainfrom
feat/metadocs
Jul 31, 2026
Merged

feat(metadocs): living project memory distilled from sessions into a git repo#25
AbsoluteMode merged 1 commit into
mainfrom
feat/metadocs

Conversation

@AbsoluteMode

Copy link
Copy Markdown
Owner

The meta docs tool: a daily launchd job distills each session's dialogue (user messages + final answers — the surface layer the index already stores; tool noise never enters) into living documents in a git repo:

  • <project>/bugs.md — how each fixed bug was recognized, diagnosed, fixed, proven fixed
  • <project>/actions.md — procedures written so an agent asked again can follow the entry alone
  • <project>/decisions.md — contested choices: decided what, why, rejected what
  • USER.md — where the owner's information lives and how to find it (retrieval instructions only, never stored values)

metadocs init <repo> [--projects git|all|name…] [--daily-at HH:MM] [--push] / run / enable / disable / status.

Key properties (decision doc included):

  • git repo, not a DB: diff = review, revert = undo, blame = audit, pushing = future team sharing; publication is revocable
  • per-session watermarks advance only after a safe write — a crash re-processes, never skips; late-indexed old sessions still get picked up
  • strict model-output protocol: complete files between markers, filename whitelist, garbage discarded whole
  • secret scanner as a hard gate (reuses share/scanner): a flagged doc is blocked, watermark frozen, retried after the source is fixed
  • caged distiller: claude -p --tools "" --strict-mcp-config, prompt on argv, empty cwd, dialogue pinned as data-not-instructions
  • launchd over cron: a missed run fires once on wake; enabling user's PATH frozen into the plist

29 new tests; suite 293 passed.

🤖 Generated with Claude Code

…git repo

A daily launchd job reads the new dialogue out of the index (user messages
and final answers only — the surface layer the indexer already stores) and
keeps four documents current in a repo of the owner's choice: per-project
bugs.md (how each bug was recognized, diagnosed, fixed, proven fixed),
actions.md (procedures an agent can follow alone), decisions.md (what was
decided, why, what was rejected), and a global USER.md — a map of where the
owner's information lives and how to FIND it, retrieval instructions only.

Design decisions, recorded in docs/decisions/2026-07-31-metadocs-living-
project-memory.md: a git repo instead of a database (diff is review, revert
is undo, blame is audit, pushing the repo is team sharing); per-session
watermarks that advance only after a safe write (a crash re-processes,
never skips); a strict output protocol (complete files between markers, a
filename whitelist, garbage discarded whole); the share secret scanner as a
hard gate before any byte reaches the repo; the distiller caged exactly like
the share composer (claude -p, no tools, argv prompt, empty cwd, dialogue
pinned as data-not-instructions).

Selector: --projects git (default) tracks every project whose cwd is still
a git checkout; all, or explicit names. launchd over cron so a missed run
fires once on wake; the enabling user's PATH is frozen into the plist so
the distiller finds claude.

29 new tests; suite 293 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@AbsoluteMode
AbsoluteMode merged commit e44534c into main Jul 31, 2026
7 checks passed
@AbsoluteMode
AbsoluteMode deleted the feat/metadocs branch July 31, 2026 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants