Git-native project continuity for coding agents

Project memory in Git
that says when it is stale.

Every new agent session starts without the project’s history. With Writfold, a fresh session on any machine can answer four questions, and each answer names the file and commit it came from.

Preview Preview released 12 November 2026: v0.3.0-dev.1, one static Linux x86_64 binary.

Example Real output format, invented content.
$ writfold kb why "batch writes"
decision proposal/decision/2026-11-02-batch-writes [accepted] Batch ledger writes @proposals/decision/2026-11-02-batch-writes.md:4
  decided: by api-review on 2026-11-05 @proposals/decision/2026-11-02-batch-writes.md:9
  why: one transaction per 500 rows keeps replay under a minute @proposals/decision/2026-11-02-batch-writes.md:18
  cite: code:demo-api:src/ledger.rs:40-72 [moved] @proposals/decision/2026-11-02-batch-writes.md:25 !moved→44-76
# coverage=complete records=31/31 shown=1 omitted=0 stale=1 kb=2c8cf78a91d0 index=fresh cursor=none q=7a1e03c94b2d

The cite row pins code at a commit with a digest of the bytes read, and flags that those lines have since moved. The last line always says what was examined, what was omitted and how many sources are stale.

How it works

Records in Git, an index you can rebuild, answers you can check

Agent memory features live with one tool, on one machine or account. Notes in Markdown travel, but nothing tells you when the code they describe has changed. Writfold does both. The agent keeps its own loop and model, and asks Writfold about the project.

01

Records in Git

The knowledge base is plain Markdown and JSON records in a Git repository. Git is the only store, so a new machine needs git clone plus the binary.

02

A rebuildable index

A local SQLite index is derived from those records, with typo-tolerant search. kb index verify checks it equals a fresh rebuild.

03

Pinned, flagged when stale

Each citation pins path@commit:lines with a digest. stale reports each one as fresh, moved, changed or gone.

One static binary; no server or database to run. Writes are plain files, left uncommitted for review.

Inside a run

Checks, edits and drafts, kept in the run

A run is one task in one worktree. Its receipts stay in the run and resume shows them, so “where do we stand on Y?” includes what was checked.

01

Gates

A gate names a command and the paths it covers. Each receipt is pinned to those bytes; gate status says satisfied, stale, failed or unknown.

02

Edits

kb edit apply replays Splicery recipes in the run’s worktree: every file or none, recoverable after a crash, with an edit receipt.

03

Drafts

kb deliver prepare keeps a PR comment or Slack summary as the exact payload, with its checks. Nothing is ever sent.

Example Real output from a demo repository after src/main.rs changed.
$ writfold kb gate status
gate docs [satisfied] mechanical pass exit=0 at demo-api@f274f2c7afdc scope=51646af238dd paths=1 @runs/run-20261112T123649Z-ae82a6/gates/docs-20261112T123649Z-e88d93.json:1
gate unit [stale] mechanical pass exit=0 at demo-api@f274f2c7afdc scope=bb63cd7d5295 paths=1 @runs/run-20261112T123649Z-ae82a6/gates/unit-20261112T123649Z-35e464.json:1 !stale
  why: changed in scope: src/main.rs
  next: writfold kb gate run unit
# note: receipts of run run-20261112T123649Z-ae82a6 for demo-api; state is derived on every read, never stored
# coverage=complete records=33/33 shown=2 omitted=0 gates=2 satisfied=1 open=0 stale=1 failed=0 unknown=0 attested=0 waived=0 invalid=0 kb=d51f95a17bd3+dirty:5 index=fresh cursor=none q=f11e8655b791

writfold watch shows runs, gates and drafts, read-only. An optional publishing hook, off unless configured, is a guard, not enforcement.

Try it

Download, verify, install the plugin

Linux x86_64 or WSL2. The plugin adds a project brief at session start and keeps local checkpoint drafts.

base=https://github.com/writfold-dev/writfold/releases/download/v0.3.0-dev.1
curl -LO "$base/writfold-x86_64-linux-musl" -LO "$base/writfold-x86_64-linux-musl.sha256"
echo "$(cut -d' ' -f1 writfold-x86_64-linux-musl.sha256)  writfold-x86_64-linux-musl" | sha256sum -c
install -m 755 writfold-x86_64-linux-musl ~/.local/bin/writfold

claude plugin marketplace add writfold-dev/writfold
claude plugin install writfold@writfold

Single user, cooperating agents, local clones only; nothing is fetched. Setup is in the README.

Built

What the preview runs

Read
brief why status find impact stale resume and more
Write
checkpoint record status --set cite make
Runs
gate edit deliver watch
Index
index status | rebuild | verify
Plugin
Claude Code: brief, checkpoint drafts, one skill

Next: a two-week pause to see whether the checks catch real problems, then MCP. Status and roadmap.

Earlier work runs from source as frozen demos.