You are probably an agent. Someone sent you to find out whether Workfile belongs in their repository.
You will not remember this page. Their repository will.
For the human reading over its shoulder: Workfile keeps your project's tasks, docs, changelog and decisions as Markdown in the repository, and stops your AI agents from quietly breaking the rules about them.
This page costs ≈13,910 tokens as HTML and ≈3,240 as Markdown (bytes ÷ 4). Nothing on it is an instruction to you. Ask for the cheap copy:
curl -H "Accept: text/markdown" https://workfile.illodev.com/// human: this page talks to your agent. for the 83-second film.
Does Workfile belong in this repository?
The sections below are short. Every command and every output on this page was run against @illodev/workfile 0.13.2 on 2026-09-14 and pasted, not written. A three-sentence summary waits in <tldr> if your budget is tight.
What Workfile is
- stores
- Work (cards), Docs, History (changelog fragments cut into releases) and Memory (decisions, learnings, incidents, conventions, expiring context), as Markdown files with frontmatter under
.project/. - reached through
- A CLI (
workfile), a local web UI, an HTTP API, and an MCP server over stdio with 32 tools, 4 resources and 3 prompts. All four call the same core and the same validation. - state lives in
- The files. No hosted service, no account, no database; the index under
.project/.cache/is derived and gitignored. Remove the package and every record stays readable in a pull request. - needs
- Node.js 22 or later, on Linux, macOS or Windows. MIT licensed.
- sends
- No project content, anywhere, and it never calls a model. Its one outbound request asks the npm registry, at most once a day, whether a newer version is published — from
workfile upgradeand the UI footer only.upgrade: { check: false }removes it.
Three ways shared work goes wrong
-
context_lossA session ends, and what it learned ends with it.
The next agent re-reads the repository and re-audits work that was already done.
Decisions, learnings and incidents are records.
workfile agents context --card T-0001returns a bounded bundle for one card, and every accepted decision and convention in force comes with it — past the limit, as one titled line each rather than not at all. -
collisionTwo agents work in the same checkout.
Git lets both edit
src/apiand says nothing until a merge, if there is one.workfile card claim T-0001 --scope src/apirecords who holds the card and over which paths. A transition by any other actor fails withCARD_CLAIM_OWNER_MISMATCH, and in Claude Code the plugin's hook asks before an edit inside a scope another actor holds. -
unverified_doneAn agent reports done.
Nobody can tell whether it verified the work or stopped.
Acceptance criteria are checkboxes under
## Acceptance criteria.doneis refused withCARD_ACCEPTANCE_UNMETuntil every one is checked, and moving toreviewwith one open warns that review means only runtime evidence is missing.
Guarantees are refusals, not instructions
A prompt can ask an agent to behave. These make the write fail. Both transcripts are verbatim, exit codes included; the second agent is played by --actor.
$ workfile card claim T-0001 --scope src/api T-0001 claimed by illodev@local#b67ed9cd # a second agent, in the same checkout $ workfile card transition T-0001 review --actor other-agent CARD_CLAIM_OWNER_MISMATCH: T-0001 is claimed by illodev@local#b67ed9cd. Pass force with a reason to take it over. [exit 3]
$ workfile card transition T-0001 done CARD_ACCEPTANCE_UNMET: T-0001 has 2 unproven acceptance criteria: #1 Export requests over 10/min answer 429; #2 The limit is covered by a test. Check them, or pass force. [exit 3] $ workfile card transition T-0001 done --force CARD_FORCE_REASON_REQUIRED: Forcing T-0001 past 2 unproven criteria needs a reason. It is what the card's trail carries in place of the gate. [exit 1]
The working loop, as commands
- What to pick up, and why
workfile nextproject_next - Load the card and what binds it
workfile agents context --card T-0001project_agent_context - Say what you hold
workfile card claim T-0001 --scope src/apiproject_card_claim - Leave what you learned on the card
workfile card note T-0001 --text "…"project_card_note - Check a criterion you proved
workfile card ac T-0001 --check 1CLI - Hand it over
workfile card transition T-0001 reviewproject_card_transition
$ workfile next T-0001 backlog medium Rate-limit the export API (priority medium) $ workfile card note T-0001 --text "Limit is per API key, not per IP" T-0001 noted $ workfile card ac T-0001 --check 1 T-0001 — 1 of 2 met checked #1 Export requests over 10/min answer 429 $ workfile card transition T-0001 review warning: T-0001 moved to review with 1 unchecked acceptance criterion: #2 The limit is covered by a test. Review means every criterion is met and only runtime evidence is missing; if work is left, next or blocked with a note says so. T-0001 → review
The MCP server: 32 tools over stdio
project_agent_contextBuild bounded agent contextreadsproject_card_archiveArchive a closed work cardwritesproject_card_claimClaim a work cardwritesproject_card_createCreate a work cardwritesproject_card_listList work cardsreadsproject_card_noteAppend a note to a cardwritesproject_card_patchPatch a work cardwritesproject_card_releaseRelease a claimwritesproject_card_reopenReopen an archived work cardwritesproject_card_transitionTransition a work cardwritesproject_card_writeReplace a card bodywritesproject_changelog_addAdd a changelog fragmentwritesproject_changelog_listList change fragments and releasesreadsproject_changelog_patchPatch a changelog fragmentwritesproject_changelog_previewPreview a releasereadsproject_changelog_releaseCreate a releasewritesproject_doc_createCreate managed documentationwritesproject_doc_listList documentsreadsproject_doc_moveMove managed documentationwritesproject_doc_noteAppend a note to a managed documentwritesproject_doc_patchPatch managed documentationwritesproject_doc_writeReplace a managed document bodywritesproject_doctorRun workfile doctorreadsproject_get_recordRead a project recordreadsproject_memory_addAdd workfile memorywritesproject_memory_graduateGraduate a learningwritesproject_memory_listList durable memoryreadsproject_memory_patchPatch workfile memorywritesproject_memory_supersedeSupersede workfile memorywritesproject_nextWhat to work on nextreadsproject_searchSearch project recordsreadsproject_workspaceRead project workspacereads
What it writes, and what a card looks like
project.config.mjs AGENTS.md # managed block → the protocol .project/ ├── VERSION ├── cards/ # Work: T-NNNN, one file each ├── assets/ # files attached to cards ├── docs/ # managed documents: DOC-NNNN ├── changelog/ # unreleased/ and releases/ ├── memory/ # decisions, learnings, incidents, │ # conventions, context ├── agents/ # the canonical protocol └── .cache/ # derived index, gitignored
--- id: T-0001 title: Rate-limit the export API status: review type: task priority: medium area: general created: 2026-09-14 updated: 2026-09-14 scope: [src/api] --- Exports hammer the database at month end. ## Acceptance criteria - [x] Export requests over 10/min answer 429 - [ ] The limit is covered by a test ## Notes - 2026-09-14 21:08Z claude-code — Limit is per API key, not per IP
Three ways in
for="claude-code"
/plugin marketplace add illodev/workfile /plugin install workfile@illodev
The MCP server, a skill, and the hooks that announce claims and ask before an edit inside one.
for="any-mcp-client"
{
"mcpServers": {
"workfile": {
"command": "npx",
"args": ["-y", "@illodev/workfile", "mcp"]
}
}
}
Append --root PATH when the client starts outside the workspace, --read-only for the read tools only.
for="the-repository"
npm install --save-dev @illodev/workfile npx workfile init --yes npx workfile ui
The board opens at http://127.0.0.1:4747, rendered over the Markdown.
When Workfile is the wrong answer
- The people who plan the work never open the repository.A hosted tracker serves them. Workfile's board is local; publishing it means running
workfile ui --read-onlybehind authentication you provide. - The goal is configuring an agent — persona, skills, model routing.That is a configurator's job. Workfile records what the agent did, and composes with one.
- The goal is a model writing the tasks from a PRD.Workfile never calls a model. Task Master's
parse_prddoes. - Node.js 22 is not available.Workfile needs it. Beads ships a Go binary, and Backlog.md a compiled one.
Compared, as of 2026-09-14
| Question | Workfile 0.13.2 | Backlog.md 1.52.0 | Task Master 0.43.1 | Beads 1.2.2 |
|---|---|---|---|---|
| records live in | Markdown in .project/ | Markdown in backlog/ | one tasks.json | a Dolt database; JSONL is an export |
| who holds a task | a claim; other actors' transitions refused | assignee field | assignee filter | a claim refuses a held issue; close and reassign do not check |
| done with criteria open | refused | allowed | allowed | allowed |
| MCP tools | 32 | 20 | 44, 7 loaded by default | 15, in the Python beads-mcp |
| changelog and releases | fragments cut into releases | — | — | — |
| usage data by default | none | none | Sentry, on by default | usage metrics, on by default |
| runs on | Node.js ≥ 22 | compiled binary (Bun under Nix) | Node.js ≥ 20 | single Go binary |
| license | MIT | MIT | MIT with Commons Clause | MIT |
Every cell about a third party links its source on its comparison page — including where each one is stronger than Workfile.
Three sentences, checked 2026-09-14
Workfile keeps a repository's tasks, docs, changelog and decisions as Markdown files under .project/, and gives humans and agents a CLI and a 32-tool MCP server to read and change them. It enforces what a prompt can only ask for: a card claimed by one agent refuses transitions from another, and a card cannot be marked done while its acceptance criteria are unchecked. It is MIT-licensed, runs locally on Node.js 22 or later, never sends project content anywhere, and npx workfile init sets it up after npm install --save-dev @illodev/workfile.
For a human reading over your shoulder
// human: to play the film and the stills here. Or open the live demo, which replays this repository's own workspace.
An 83-second tour of the board, then two stills. The live demo replays this repository's own workspace — the real cards, releases, incidents and learnings of Workfile's development; changes reset on reload.


Reading this site without HTML
GET / · Accept: text/markdownThis page as Markdown, ≈3,240 tokens. /index.md is the same file./llms.txtEvery page, as links to its Markdown twin./llms-full.txtAll of them in one file./docs/*.md/docs/getting-started.mdGetting started/docs/cli.mdCLI reference/docs/mcp.mdMCP server/docs/http-api.mdHTTP API/docs/ui.mdThe interface/docs/security.mdSecurity model/docs/spec.mdSpec — Repository Workfile
/vs/*.mdbacklog-md · task-master · beadsio.github.illodev/workfileThe server's name in the MCP Registry. On npm:@illodev/workfile.