Every session, the same archaeology.
Open Claude Code, get a new context window, watch the assistant ls · grep · cat
its way to a vague picture of your repo. Tomorrow it starts over. The dig is expensive, and the artifacts get thrown out.
FILETREE.md. Commit to git. Share with collaborators.UNCHANGED bias — purpose intact, only the hash refreshes. ~100× cheaper.≈ 80% of changed files emit one word: UNCHANGED.
A refactor doesn't change what a file does. Renaming a variable, adding tests, fixing a bug —
purpose stays intact. The LLM reads, judges, replies UNCHANGED. The script
refreshes the hash and keeps the old summary. The manifest itself is the cache — no SQLite, no daemon, no separate "I already saw this" memory.
UNCHANGEDA loop, not a build step.
todoProduces added / changed / removed / renamed.
Per changed:
UNCHANGED or a fresh line.
applyWrites FILETREE.md.
The tool never commits for you.
Three commands. Each self-contained.
Namespaced slash commands, designed to be readable end-to-end from a single file. No dispatch indirection, no hidden state, no magic.
What it refuses to do.
Scope creep kills small tools. The non-goal list is part of the design.
- no. function- or class-level tracking File-level is the resolution. grep covers the rest.
- no. semantic search / vector index Not this tool's job. Use grep + the LLM.
- no. watcher · daemon · background process Explicit slash command, at moments you choose.
- no. auto-commit Review is the last quality gate. Stays with you.
- no. dependency / call-graph mapping Manifest says what, not who calls whom.
Stop digging.
Start reading.
Two lines in Claude Code and the plugin is live. Run /filetree:init once;
from then on it's /filetree:update when the layout shifts.
/plugin marketplace add nekocode/filetree-skill
/plugin install filetree
/filetree:init — it offers to wire CLAUDE.md / AGENTS.md first, then maps the repo. Review the diff, commit.