Unwritten

io.github.ByggarepopPublished by GitHub account Byggarepopv0.4.6Updated Oct 24, 2026

Catches files and C# members you forgot to change, learned from your repo's git history

VerifiedSTDIODesktop onlyKnowledge & MemoryDeveloper Tools

Overview

AI-generated overview

A local MCP server that learns from git history which files change together and warns an AI coding agent when an edit leaves a companion file untouched.

What you can do
Check edits for missing companion files (holes) using co-change patterns learned from git history, with confidence scores and example commits as proof. Report learned file-pair statistics so you can see which couplings are strong enough to block a commit. Install git pre-commit and Claude Code Stop hooks so the check runs deterministically before a commit. File-level rules work on any language; C# repos also get method-level rules and cosmetic-edit filtering, and JSON files get key-level noise filtering.
When to use it
Useful when an AI coding agent edits a repository and may forget related files such as tests, and you want an automatic, history-based reminder. Also fits teams that want a pre-commit gate on strongly coupled file pairs.
Requirements
Runs as a local process via a .NET tool (dotnet tool execute); requires the .NET SDK 10 or later. The analyzed repository must have git history; an index is kept in a .unwritten/ directory. No server, subscription, tokens, environment variables or headers are declared.
Before you install
The pre-commit and Stop hooks can block commits while a hole remains, so expect interruptions until rules are muted or companions updated. Warnings are statistical and may be false positives. It reads the repository's git history and writes an index into .unwritten/.

Installation

In SourceWeft

  1. Open Unwritten in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Unwritten

[NuGet] [Downloads] [License: MIT]

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.

text
1 possible hole(s):
  src/Orders/OrderServiceTests.cs    expected because you changed src/Orders/OrderService.cs    confidence 0.826 (90 co-changes in 100 changes)    e.g. 3f2a1c9 Add surcharge handling to freight calculation
FAIL: at least one hole at confidence >= 0.70.

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.

Quick start

From your repo's root:

  1. Warm up the index (optional — every command builds it on first use and keeps it current by itself; this just makes the first query fast).
bash
dotnet tool execute Unwritten --yes -- reindex
  1. Register as an MCP server (Claude Code):
bash
claude mcp add unwritten -- dotnet tool execute Unwritten --yes -- mcp
  1. (Recommended if using Claude Code) Make the check deterministic — a git pre-commit hook and a Claude Code Stop hook that feeds failing holes back to the agent before a commit is made:
bash
dotnet tool execute Unwritten --yes -- install-hook --git --claude-code

That's it — your agent can now call check_holes after editing, and the hooks catch the cases where it forgets to.

Explanatory video

https://github.com/user-attachments/assets/4ae7a22d-c611-458f-8c48-08f87eca1d29

See it in action

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:

[Index stats showing one high-confidence file pair]

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:

[check reporting a missing companion file with resolution options]

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

[Pre-commit hook blocking a commit on a missing companion file]

Documentation

Everything else lives in docs/README.md:

License

MIT

Source: README.md at commit 313eb89

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.4.6LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts