MonoMind AI Lab · The builder's deck
One small folder that keeps builders and agents on the same page over time. Don't work in moments — work in continuity: the state, the decisions and the lessons stay in the repository, in plain Markdown, long after the chat that produced them is gone.
Part 1 · Why
Four questions decide whether they can start work or have to reconstruct it. The repository itself should answer all four.
Active state, blockers, and the next action.
Accepted choices, with the rationale intact.
Verified lessons worth reusing rather than re-paying for.
A pinned link to the commit, review, or record that proves it.
Part 2 · What it is
Documentation explains what the code does — the code already does that. This holds why this approach and not the obvious one, what was tried and failed, and what is in flight right now.
No database, no server, no account. git log is the history and grep is the search. Markdown and Git are the whole storage contract.
Python standard library only, 3.10 and later. A repository that adopts this product does not acquire a dependency by doing so.
Every write is create-only. The tool refuses before it overwrites a record you wrote, and history is corrected by superseding it, never by editing it.
Part 2 · What it is
One durable layer inside the repository it describes. People and agents both read it before substantial work and write to it at a milestone; the artifacts it cites never move.
Part 3 · What you get
One small directory, plus a managed block in both CLAUDE.md and AGENTS.md — creating whichever is missing, so no harness is left with rules it never reads.
Part 3 · What you get
| File | What it answers | When you write it |
|---|---|---|
| NOW.md | What is true now, what is active, and what happens next? | The state a next contributor would act on changed. Replace stale state rather than appending; keep it under 400 words. |
| DECISIONS.md | Which accepted choices constrain future work, and why? | A choice now constrains future work. Reverse one by superseding it — never by rewriting what it meant. |
| LEARNINGS.md | Which verified lessons should future collaborators reuse? | Evidence changed what is believed, and it will recur beyond this one task. Evidence is required. |
Part 4 · How it works
One command, or a short prompt pointing at the canonical initializer skill.
Asks the onboarding question, identifies the project type, finds overlapping context.
Profile and the exact file changes, proposed before a single write.
Creates only approved files, preserves existing material, verifies idempotency.
The managed block and the installed skill route them into the records first.
Changed state, durable decisions, verified learnings — and nothing else.
Any later person or agent reads the same plain Markdown.
Part 4 · How it works
People provide intent, answer the onboarding and opt-in questions, and approve proposed changes. Agents read the skills, run the tooling, and maintain the files. You are never expected to invoke a skill or run Python yourself.
| Person | AI agent |
|---|---|
| Runs the one-line install, or pastes the short prompt | Loads and follows project-context-init/SKILL.md |
| Answers whether the project is brand-new and what it is for | Classifies the project type and reviews overlapping context |
| Approves the proposed plan before anything is written | Creates only approved files and verifies the result is idempotent |
| Decides what a decision or a learning actually is | Detects that the window is open and asks — it never judges for you |
| Reads, reviews, or edits the Markdown whenever they like | Maintains the records through later work and runs the checks |
Part 5 · How to use it
uvx --from git+https://github.com/monomind-ai-lab/project-context \ project-context init --target . --install-skills --dry-run pipx install git+https://github.com/monomind-ai-lab/project-context project-context init --target . --install-skills --apply
Install Project Context in the current repository or project folder using https://github.com/monomind-ai-lab/project-context. Read and follow `skills/project-context-init/SKILL.md`, starting with its required onboarding question. Show me the proposed plan and wait for my approval before making changes.
Part 5 · How to use it
Every record is read on every session. You pay for what you keep, so keep less — and take the full profile only when the project already has that much going on.
| Flag | What it does |
|---|---|
| --profile core | The default. NOW.md, DECISIONS.md, LEARNINGS.md, decisions/, plus the protocol in place |
| --profile full | Adds PLAN.md, QUESTIONS.md and the tasks/, designs/, incidents/, inbox/ directories |
| --repo-type auto | Detected by default. Also code, document, research, writing, mixed, general — it shapes what the scaffold says |
| --install-skills | Installs the protocol skill so agents in this repository can find it |
| --install-hooks | Merges a SessionStart and a Stop hook into .claude/settings.json. Opt-in, implies --install-skills, and every other hook is preserved |
Part 5 · How to use it
During the work
Ordered, not ranked: the owner's constraints, the current state, then the records whose anchors share a path prefix with your files. onboard is the preset for a first session.
project-context capture --kind decision --text "…" --apply writes one dated, attributed note into inbox/ and gets out of your way.
Primary artifacts, then curated records, then candidate knowledge, then derived views. If an index disagrees with a record, regenerate the index.
At the end of the session
Did the state a next contributor acts on change? Did a choice constrain future work? Did evidence change what is believed, in a way that will recur?
Replace stale state in NOW.md and set its review date. Supersede rather than rewrite. Padding the registries is the exact failure they exist to prevent.
context_triggers.py ack --note "…" records an honest evaluation against the current commit — and the window reopens on the next one.
Part 6 · The record model
One schema string, project-context/1, and one version per product. A detail record carries six frontmatter keys and nothing more is required — id, kind, status, title, created, asserted_by. Registries carry none and stay plain Markdown.
Part 6 · The record model
A repository path is anchored as src/auth/session.py@a1b2c3d — a reference to a moving file is a reference to nothing. Every form below is validated by shape, never by resolving it. Anchors are optional and Git-gated: drift is a warning, never an error.
| session:<harness>:<id> | The run it came from |
| commit:<binding>:<sha> | A commit |
| pr:<binding>#<number> | A pull request |
| review:<binding>#<pr>/<comment-id> | One review comment |
| ticket:<tracker>:<key> | An issue in a tracker |
| doc:<binding>:<path>@<commit> | A pinned document |
| url:https://… | Anything outside the repo |
| capsule:<id> | A capsule in inbox/ |
Part 7 · Keeping it honest
python3 .agents/skills/project-context/scripts/context_doctor.py --target . — it exits 1 on any error and 0 otherwise, so CI and a git hook can both use the exit status. Anchor findings are warnings; a modified pushed file is an error.
Part 7 · Keeping it honest
One short, dated, attributed note. At most 200 words — a longer one is refused, because that is the record it should become. The same text twice on the same day writes once. Provenance comes from your git identity, and the current commit is recorded for you.
Ordered rather than ranked: the owner's guardrails, the blueprint/ epic, NOW.md and the active plan items, then the records anchored to your files. Only accepted and answered records load; proposed ones and anything over budget come back as links.
Proposed records, questions open past their window, unpromoted capsules, drifted anchors, a stale NOW.md. Oldest first, because latency is the failure this system is exposed to. It exits zero whatever it finds: a backlog is not a build failure.
Part 7 · Keeping it honest
Part 8 · Beyond this repository
A Hub is one private repository an owner administers, holding what applies across every project. Nothing here requires it, or ever reaches out to it.
Part 8 · Beyond this repository
Named here so you do not go looking for them.
Writing a capsule automatically at the end of a session that produced none. capture is manual today, and the Stop gate offers it rather than doing it.
Promotion is editing: write the registry entry the capsule earns and set its status. There is no one-liner for it yet.
Assembling context across several projects at once. That belongs to the Hub side and is deliberately not here: your packet sees this project and the global snapshot, which is the correct blast radius.
Get started
Install it in one repository and read what the doctor says.
project-context init --target . --install-skills --dry-run
Made with Hi Ted, Meet Lisa