CLAUDE.md · git:20261017.d8f0441 · 2026-10-17 · sha256 7bf0aeedd6f11ee3
CLAUDE.md git:20261017.d8f0441A
Immutable. This exact content never changes and is served at /api/v1/blob/7bf0aeedd6f11ee3.
AUTONOMY_LEVEL: aggressive
Solo OSS maintainer running with `bypassPermissions`. Atomic-ship convention applies (commit + push + tag + push tag + `gh release create` in one turn, except that the turn yields while the pre-tag reviewer runs, per §EXT §12 and runbook step 7) — see `feedback_claudemd_ship_from_main_atomic.md`. `main` is what users install (marketplace auto-update follows it on a version bump; `/claudemd-refresh` installs its HEAD), so a release is built and reviewed on `release/vX.Y.Z` with a draft PR and reaches `main` only together with its tag, and commits that change shipped files (`hooks/`, `spec/`, `commands/`, `scripts/`, `bin/`, `.claude-plugin/`) wait on the `next-release` branch, not on `main`. §5.1 Never-downgrade set binds as written in core §5.1.
Layout (core §2 **Where files go** defers to this): `docs/` and `tasks/` are gitignored; the tracked exceptions are listed in `.gitignore` (reference docs, `tasks/specs/`, evaluation and provenance files). A dated analysis under `docs/` is committed with `git add -f` once shipped text or a tracked document cites it; working notes stay local.
<!-- claude-mem-lite:begin v1 -->
## claude-mem-lite — persistent memory
PreToolUse hooks already run `mem_recall` for past lessons before Read/Edit/Write. The calls worth making proactively:
| When | Call |
|------|------|
| Before Edit/Write | hook already recalled; if an injected `#NN` lesson changed what you did, add the bare tag `(#NN)` once at the end of the sentence describing that change (citing = adopting; uncited lessons decay; skip ones that did not apply). No other mention of memory ids, saves or the memory store in replies to the user |
| A recalled memory drives an answer or a design choice | check its claim in the code or `git log` first: `#NN` and `E#NN` rows are notes from past sessions, many written automatically, so they can be wrong, and they describe the code as it was. If the code disagrees, trust the code and replace the note: `mem_save(..., supersedes=[NN])`, or `supersedes=["E#NN"]` for an event |
| After fixing a non-trivial bug | `mem_save(type="bugfix", lesson_learned="<root cause + fix, only what this change's diff shows>", importance=2)` |
| After a non-obvious architecture decision | `mem_save(type="decision", lesson_learned="<constraint + tradeoff>")` |
| Deferring to a future session | `mem_defer({title, priority:1|2|3, detail})`; when fixed, add `closes_deferred=[N]` to `mem_save` |
| Looking up past work / history | `mem_search "keywords"` · `mem_recent` · `mem_timeline` |
Path cost is round-trips, not milliseconds: the PreToolUse hook above already recalls (0 calls) — prefer it. For an explicit query, if these `mem_*` tools are deferred behind ToolSearch this session, the Bash CLI `claude-mem-lite` is one call vs two (ToolSearch + call); the MCP server instructions carry the absolute path to use when it is not on PATH.
Full tool + CLI tables, citation/decay rules, and save discipline → `.claude/plugin_claude_mem_lite.md`
<!-- claude-mem-lite:end -->
<!-- code-graph-mcp:begin v2 -->
## Code Graph (repo-wide AST index)
Parsed index of the whole repo. For structural questions — who calls X, what a
change breaks, every use of a symbol — one call replaces rounds of Grep + Read:
| Intent | Command |
|--------|---------|
| Who calls X / what X calls | `code-graph-mcp callgraph X` |
| Impact before changing a signature | `code-graph-mcp impact X` |
| Tests to re-run after changing files | `code-graph-mcp affected <files>` |
| Rename / remove audit | `code-graph-mcp refs X`, then `grep -w X` |
| Unfamiliar dir / module | `code-graph-mcp overview <dir>` |
| Symbol source / signature | `code-graph-mcp show X` |
| Concept search (no exact name) | `code-graph-mcp search "…"` (vector: MCP `semantic_code_search`) |
| grep + AST context | `code-graph-mcp grep "pat" [paths] [-t lang] [-g glob] [-c]` |
Unresolved calls (dynamic dispatch, reflection, unresolved imports) leave no edge, so
an empty answer is not proof: confirm with grep before deleting or renaming.
Still use Grep for literal strings/regex in non-code files; still Read files you'll edit.
Full command + MCP-tool table: `.claude/plugin_code_graph_mcp.md`
<!-- code-graph-mcp:end -->