The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Unwritten listing page.
Catch the files you — or your AI agent — forgot to change. Unwritten learns
from your git history which files usually change together and warns when one is
missing from your edit: "you changed OrderService.cs but not
OrderServiceTests.cs, and they change together 94% of the time." It calls
these missing companions holes, and every warning comes with its confidence
score and real example commits as proof.
It runs as an MCP server so AI coding agents (Claude Code, Copilot) can check
their own edits mid-session, and as a CLI for pre-commit hooks.
One dotnet tool execute, an index in .unwritten/, no server, no subscription,
no tokens.
Works on any language. File-level rules only need git history, so hole detection works the same on Python, TypeScript, Go, or mixed repos. C# repos additionally get method-level rules and cosmetic-edit filtering; JSON files get key-level noise filtering. Running the tool requires the .NET SDK (10+), but the repos it analyzes can be anything.
From your repo's root:
That's it — your agent can now call check_holes after editing, and the hooks
catch the cases where it forgets to.
https://github.com/user-attachments/assets/4ae7a22d-c611-458f-8c48-08f87eca1d29
stats shows what the tool has learned — here, one file pair coupled strongly
enough (confidence ≥ 0.7) to block a commit if one side is missing:

After editing one file of that pair, check warns that its companion is
missing and spells out the three ways to resolve it — update the companion,
commit anyway, or mute the rule:

With the pre-commit hook installed, the same check runs automatically on every commit and blocks it while the companion is still missing:

Everything else lives in docs/README.md: