Skip to main content
Glama

Every project gets a brain.

Active state management for multi-agent coding — a local-first active context engine with a shared brain. One project. One shared understanding.

CI npm License Node MCP Glama score bench

Claude Code Codex Cursor Gemini CLI

Host badges name the integration level, not a flat "compatible" — the levels and what is actually tested are in Supported hosts.

One actively managed project brain for multi-agent coding. klypix-mcp keeps one versioned brain.klypix in your repo: the project's active state — current decisions, corrections, evidence anchors, open questions, active work, and handoffs. Corrections supersede stale decisions, brain_challenge tests proposed decisions against standing rules and reversed approaches, and sessions declare their scope and get warned about same-machine file overlap. Agents read it and write to it over MCP. You read it and correct it in the KLYPIX app.

One project. Many agents. One current understanding.

Two real MCP sessions on one project: Session B declares a file Session A already declared, and the server's exact-file-overlap warning fires; Session A then records a correction that supersedes its stale card

Real output, not a mockup: both panes run a real MCP client against this server (docs/demo/ — the GIF is re-rendered by CI from a scripted tape, so it can never drift from what the product actually does).

Klypix does not launch, run, supervise, or replace your agents. It is not an agent runtime, a model router, a worktree manager, or a replacement for Git. It is the layer underneath them that holds what the project currently believes.

See the shared project brain in action

Watch the 2 minute 21 second KLYPIX Brain product walkthrough

Watch how current decisions, corrections, evidence, and active work stay visible to people and carry forward into supported coding-agent sessions.

Watch the 2:21 showcase with sound


Related MCP server: tldraw MCP

The problem

You are running more than one coding agent on one codebase — a Claude Code session here, Codex in another terminal, Cursor open on the side. Each one has excellent memory of itself and none of the others:

  • Every new session starts from zero, and you explain the same architecture again.

  • Codex does not know what Claude learned an hour ago.

  • One agent implements an approach the team already rejected, because the reason it was rejected lived in a chat that ended.

  • Two sessions start changing the same files and nobody finds out until review.

  • Git stores the code history. It does not store a reliable history of project intent.

Your agents may run independently. Their project understanding should not.


60 seconds: two agents, one project

Session A — Claude Code, in your repo:

brain_sync { intent: "rewrite the auth token refresh", files: ["src/auth/token.ts"] }
// → task-relevant memory capsule (bounded, ~2.8KB)
// → peers: none

Session B — Codex, same repo, half a minute later:

brain_sync { intent: "add rate limiting to the auth routes",
             files: ["src/auth/token.ts", "src/auth/routes.ts"] }
// → task capsule
// → peers: 1 active session (claude-code) — "rewrite the auth token refresh"
// → overlap: src/auth/token.ts — declared by both sessions

Session A gets the same overlap surfaced on its next KLYPIX action. Neither edit is blocked — the warning is advisory, and both sides only see the overlap because both declared the files they expected to touch.

Then the brain pushes back before the decision, not after:

brain_challenge { "move token storage to localStorage" }
// → "reversed on June 12 — here's the correction card, captured by a different agent."

And the decision is kept where the next session will find it:

brain_note { text: "Token refresh moves to an httpOnly cookie; localStorage was reversed 2026-06-12." }

Prove all of this on your own machine, against the exact build you installed, with two real isolated MCP clients:

npx klypix-mcp conformance

It runs in a temporary fixture and touches nothing else. It checks tool discovery, task memory, truthful peer reporting, overlap surfacing, proactive logging, and in-band delivery of a peer note. It verifies 15 required coordination behaviours — not the 22 tools, and not the retrieval engine.


Quick start

Run this inside your project:

npx klypix-mcp install

One command for supported editors detected on this machine. It finds the project root (walking up, so running it from src/ is fine), gives the project a brain if it doesn't have one, wires the agent tools you actually have installed, registers the lossless .klypix merge driver if it's a git repo, and then proves the result before it exits:

  project   E:\work\api  (git repository root)
  brain     created brain.klypix — a starter brain, ready for its first decision
  editors   Claude Code · Cursor · Codex · Gemini CLI · Antigravity · VS Code
  wired     9 file(s) · 9 updated   (skipped 5 for tools you don't have)
  git       lossless .klypix merge driver registered
  verified  ✓ 22 tools reachable via .mcp.json (892ms)

That last line is the point. MCP config fails silently — a wrong entry means the server never starts, the agent quietly loses every brain verb, and nothing reports an error. So install opens a real stdio handshake against the config it just wrote and counts the tools that answered. A broken entry dies in ~100ms with Connection closed and is reported, not shipped.

What goes where:

  • Machine-global, once — the engine + runtime in ~/.claude/project-brain, Claude Code's five lifecycle hooks in ~/.claude/settings.json, and the ~/.codex/AGENTS.md guidance block. Claude Code is therefore covered in every project on that machine that has a ./brain.klypix.

  • Per project — MCP config and rules for Cursor, Codex, Cline, Windsurf, Copilot, Gemini CLI / Antigravity and Aider. Run install once inside each project.

Three things it deliberately will not do:

  • Write for editors you don't have. Config is projected only for hosts detected on this machine — a two-person team using one editor no longer commits rules for six they never opened. A file your project already carries stays maintained regardless, so you can't silently stop updating your team's committed configs.

  • Wire a directory that isn't a project. It refuses your home folder, a drive root, and anything with no brain, no git repo and no project manifest. A mistyped command can't seed a brain into C:\Users\you.

  • Replace a project-owned server. A repo-relative launch like node scripts/klypix-mcp-server.mjs is deliberate — it resolves offline and rides a bundle the repo version-gates — so it's left byte-identical and reported. An explicit link still rewrites everything: an action you didn't ask for stays more conservative than one you did.

Opt out with --no-project (CI images, scripted provisioning). --json emits the report as structured data; --verify-all handshakes every written config instead of one.

Optional, opt-in, and approved inside Codex itself:

npx klypix-mcp install --codex-hooks

Six Codex lifecycle hooks that add automatic per-prompt context injection and a pre-edit file-overlap warning. Codex owns the trust decision and will ask you to review them. brain_doctor reports this layer separately as off, execution-unverified, or active. Even with it on, Codex never captures decisions automatically — the Codex hook never writes the brain.

Re-project everything explicitly:

npx klypix-mcp link

install already does this for the editors you have. Reach for link when you want all 14 managed, hash-stamped files regardless of what's installed — MCP server config for six hosts plus rules files for eight — or to repair drift. Managed blocks are merged into your existing instruction files and never clobber your content.

npx klypix-mcp link --check    # audits without writing; exits non-zero on drift

Either form works, and both are safe in CI: npx -p klypix-mcp klypix-link --check used to drop --check and write anyway — fixed, and locked by test/cli-args.mjs, which asserts the standalone bin and the dispatcher parse arguments identically.

Give a project a brain by dropping a brain.klypix into it — the KLYPIX app does it in one click (Save canvas as project brain), or create_canvas makes one from any agent.


How the brain works

The difference from a folder of notes is not the shape — it is that this memory is a mechanism, not a filing convention.

  • Decisions have a lifecycle. A new decision that contradicts an old one supersedes it. The stale card is archived with an arrow and a date, never deleted, and later answers surface the correction rather than the corpse. If a later decision returns to an earlier superseded stance, high-confidence lineage leaves a dated re-adopts stamp on the new card plus an earlier→current edge; the original A→B→C history remains intact.

  • Corrections are explicit, not guessed. Supersession fires on an UPPERCASE correction cue or an explicit edge. brain_reconcile only proposes stale-vs-correction pairs for a human to confirm.

  • Cards can cite the code they were decided against. An ev: anchor records a file:line plus the git blob OID at capture time, so the engine can flag a card whose cited code has since moved on. It detects that the code changed — never that the claim became false.

  • Position means something. Drag a card into the 📌 Focus area and it leads every future session's brief. That is brief priority, not a retrieval-ranking boost.

  • You can ask what the project believed then. brain_ask with as_of: 2026-03-01 reweights ranking by card lifecycle dates, so corrections made later do not leak backwards.

  • Retrieval is local. Lexical by default. If the optional on-device model is installed, brain_ask and search_all_brains use BGE semantic ranking with lexical help for exact identifiers, paths, and versions — still entirely on your machine. The previous cross-encoder is available for experiments with KLYPIX_RERANK=1, but is off by default because it reduced precision and added latency on the frozen human-paraphrase evaluation. Without the embedding model, retrieval degrades cleanly to lexical. npx klypix-mcp install deliberately does not install that model, so a fresh install is lexical.

Bounded semantic-memory runtime

Long-lived MCP and A2A workers use the bounded semantic-memory runtime by default. Models load only when semantic work is requested, native inference is serialized per process, embedding work is split into small batches, and temporary tensors are released after use. Loaded models retire after an idle interval and transparently reload on the next semantic request, so warm queries stay fast without permanently pinning native model memory. These controls change the resource lifecycle only; brain cards, project coordination, and the on-disk brain format are unchanged.

The previous runtime remains available as an emergency rollback. Set KLYPIX_SEMANTIC_MEMORY_MODE=legacy in the MCP server environment and reconnect or restart the host. This restores eager model prewarming and the previous inference path without migrating or deleting brain data. Remove the variable (or set it to bounded) to return to the bounded runtime.

Run the deterministic lifecycle tests with npm run test:memory. For an opt-in real-model soak against a disposable or backed-up brain, set KLYPIX_MEMORY_SOAK_BRAIN to its path and run npm run test:memory:soak.

For process-level attribution, run npx klypix-mcp runtime (or add --json; --watch 30 samples every 30 seconds). It reports KLYPIX workers, supervisors, and legacy launcher overhead separately, excludes the owning IDE/chat application's RAM, redacts command-line secrets, and never opens a brain or terminates a process. Multiple processes under one host are reported as parallel sessions, not called duplicates without an authoritative logical-session receipt.

Project Map: current structure beside project understanding

If the project contains a compatible NetworkX node-link graph.json, agents can ask for bounded code-structure evidence and current brain context in one read-only call:

project_map_context {
  "question": "what owns refresh-token rotation?",
  "graph_path": "graphify-out/graph.json"
}

Use compare_to with another project-relative graph artifact to add exact total node/edge deltas and additions/removals from the two bounded query neighborhoods. Both paths are confined to the declared project root; unsafe source paths are withheld; large or unsupported artifacts are rejected. When a returned brain card names an exact mapped source path, the structured response also includes a review-only evidence-link proposal. It never promotes similarity into truth and never writes graph facts or links into brain.klypix.

Graphify is the first compatible producer. KLYPIX reads artifacts that users generate separately; it does not bundle, install, or run Graphify and does not imply a partnership. A compatible generic graph.json works through the same provider-neutral boundary.

For a reproducible map artifact on every pull request and main-branch push, install the shipped read-only workflow into a Git checkout:

npx klypix-project-map setup-github /path/to/project

The command refuses to overwrite an existing workflow unless --force is explicit. The installed workflow has contents: read, pins every action by commit SHA, pins graphifyy==0.9.33, validates the graph contract, and uploads graphify-out/ as a 14-day build artifact. This is opt-in CI code: the local MCP tool still never installs or launches Graphify.


Supported hosts and their integration level

Levels are honest. Only the config-writing side is tested for the link hosts; their host-side behaviour is unverified.

Host

Level

Wired by

Brief into context

Decision capture

Live presence

Claude Code

Full automatic (5 lifecycle hooks)

install

Automatic at session start, task-ranked retrieval per prompt

Automatic at turn end

Yes

Codex

Native MCP + presence + Context Gateway; optional --codex-hooks

install

Via brain_sync; per-prompt injection only with --codex-hooks

Explicit only (brain_note) — never automatic

Yes

Cursor

MCP config + always-on rules file

link

Model must call brain_sync

Model must call brain_note

For the MCP connection

Cline

MCP config + always-on rules file

link

Model must call brain_sync

Model must call brain_note

For the MCP connection

VS Code (Copilot / Continue)

MCP config + instructions file

link

Model must call brain_sync

Model must call brain_note

For the MCP connection

Gemini CLI / Antigravity

MCP config + always-on rules file

link

Model must call brain_sync

Model must call brain_note

For the MCP connection

Windsurf

Rules file only

link

Reaches the tools through Windsurf's own global MCP config

Model must call brain_note

Via its own MCP config

Aider

Rules file only (no MCP)

link

CLI path: npx klypix-read

CLI path: npx klypix-append

Claude Desktop

One-time manual config edit

you

Model must call brain_sync

Model must call brain_note

For the MCP connection

install and link are different things and are not interchangeable: install sets up the machine engine and hooks, then wires supported hosts detected for this project (see Quick start). link is the explicit per-project repair/projection path for all 14 managed files, regardless of which hosts are installed.

Claude Desktop — add this to claude_desktop_config.json by hand; nothing writes that file for you:

{
  "mcpServers": {
    "klypix": {
      "command": "npx",
      "args": ["-y", "klypix-mcp", "--vault", "/absolute/path/to/canvases"]
    }
  }
}

Task briefing

Every Claude Code session starts already knowing the project: a bounded brief of at most 2KB in context, with the full brief written to disk for when broad history or status work needs it.

Every other host gets a bounded ~2.8KB task capsule from one brain_sync call, plus a compact always-loaded AGENTS.md block that tells the agent to make that call at task start, when scope changes, and on completion. The gateway capsule is lexical-fast by design. A newly captured open gap can claim a labeled RECENT OPEN slot only after clearing the normal lexical-relevance floor, so fresh relevant findings are not crowded out by older area vocabulary.

Briefs are not injected automatically on Cursor, Cline, Copilot, Gemini CLI or Antigravity — there are no lifecycle hooks on those hosts.

Capture and corrections

brain_note accepts structured supporting references and inert verification text:

{
  "text": "Retry failed uploads with a bounded backoff to preserve queued work.",
  "area": "Storage",
  "evidence": [{ "kind": "file", "ref": "src/uploads.mjs:42" }],
  "verify": "node test/uploads.mjs"
}

File references must stay inside the project. The capture records a fingerprint of the working file and, when available, the repository HEAD revision. An unchanged fingerprint means source unchanged, not that the remembered claim is correct or that tests passed. Dirty working files are fingerprinted as they are; HEAD alone does not describe those bytes. Read results distinguish changed, missing, and unverified sources. External references (pr, url, commit, run) are retained without fetching or verifying them. verify is shown as recorded text and never executed. Optional verifiedAt is explicitly caller-reported.

On an amendment (marker: "~"), omitted metadata is preserved; evidence: [] and verify: "" clear obsolete metadata. A resolve () archives existing evidence; attach new evidence with a milestone and closes, or amend before resolving. The CLI accepts the same JSON on stdin, or --evidence '<JSON array>' and --verify '<text>'.

On Claude Code, decisions are captured automatically at turn end from inline 🧠 BRAIN [Area]: markers in the transcript, deduped, under a capture lock.

On every other host, capture is explicit: brain_note runs the same capture engine as the hooks — dedup, supersession, round-trip re-adoption receipts, resolve, ~ update in place, + skill, closes: — and stamps which agent wrote the card. A question preference ranks only candidates that already clear raw lexical overlap and two subject-identity anchors; generic lifecycle wording cannot turn weak overlap into a closure. (If you install the git commit hook from the KLYPIX app or run npx klypix-mcp git-hook install, commit messages also capture automatically for any agent.)

brain_challenge is the other direction: propose a decision and the brain answers with receipts — prior decisions that deterministically contradict it, standing rules that dispute it, and approaches tried and reversed, flagged when a different agent wrote them. Evidence is deterministic only (explicit correction cues, opposite-polarity pairs), never mere topical similarity. Silence means no contradiction signal was found — not verified consistency. A memory that cannot disagree with you is flattery.

Presence and task intent

An active session means an authorized MCP connection or host lifecycle adapter that heartbeated within the TTL. A row in a recent-chat list is history, not presence.

Each MCP connection registers itself at initialization and removes itself on disconnect; the TTL covers crashes. Optional host adapters merge into that same logical session rather than double-counting it, enrich it with intent and files, and remove only their own channel. Sessions that never declared a task are still counted, but are shown separately as scope-unknown rather than padding the peer list.

Future hosts get baseline support merely by connecting the MCP server. A deeper adapter can import klypix-mcp/presence and map lifecycle events onto upsertSession, removeSession, peekMessages and receiveMessages. The shared contract accepts id, client, surface, model, branch, intent, touched files, and adapter channel.

Overlap warnings

When two sessions declare overlapping expected files, brain_sync surfaces it: the peer, its declared task, and the exact paths in common. A one-time alert is queued to whichever session got there first, so a late arrival is not the only one who knows.

This warns. It does not prevent. Nothing blocks an edit, matching is exact-path, and both sides have to have declared their files for the overlap to be visible at all.

Handoffs and messages

brain_message leaves one-time coordination notes for other sessions. A supported KLYPIX action offers the note in model-visible context; the next independent supported action replays it and records an acknowledgement. That acknowledgement proves only that a later action followed the offer — never that a person read it or that an agent acted on it. The note keeps replaying until the receiving model calls brain_message_receipt with the exact message id and per-recipient offer token; only that token-bound action records consumed. Pending, offered, and acknowledged notes survive reconnects. Expiry or bounded-capacity eviction records a failed per-recipient receipt instead of silently looking delivered. The send-time audience is fixed, unresolved targeted sends fail closed, the core lane is machine-local, notes expire after 24 hours, and they are never written into the brain.

Durable handoffs go in the brain itself — decisions, findings, open questions and skills captured as cards, each stamped with the agent that wrote it.

Evidence-gated completion

When a task publishes a quantified or otherwise machine-checkable claim, it can attach one or more versioned result manifests to brain_sync { phase: "complete" }. Each manifest binds the claim to a report hash, producer/run provenance, the exact declared task scope, material artifact hashes, evaluation outputs, public metric wording, input/configuration fingerprints, and named metrics with counts and tolerances. Matching peer evidence is recorded as corroboration; conflicting or incomparable evidence returns needs-reconciliation and keeps the task scope active.

The gate fails closed. Once a task submits result evidence, it cannot bypass an invalid or conflicting result by retrying completion without the manifest, and that obligation survives worker restart, hibernation, and transparent hot-swap. A fresh phase: "start" is the explicit boundary for a new task. The strict schema and reusable validator are exported as klypix-mcp/result-reconcile. Schema-v2 receipts can be converted into commit-bound publication evidence and independently checked with klypix-mcp/release-evidence; legacy schema-v1 results remain usable for coordination but cannot authorize publication.

Human control in Klypix

Not a second brain. A shared one.

A brain nobody can inspect is a database with good marketing. The KLYPIX desktop app renders the same brain.klypix as a living spatial map, with health, freshness, provenance and orrery lenses, an unresolved-questions triage view, and a one-click flow that connects a folder's brain to six coding agents. You can read, correct, archive and re-link what your agents recorded.

The file is co-owned. When the app saves a brain it re-reads the disk copy inside the same capture lock the agent hooks use and union-merges instead of overwriting, so a card an agent captured while you had the file open is kept. The merge verifies its own output and aborts rather than emit a file missing a card. Deletes require an explicit tombstone, so a card that is merely absent is never inferred as deleted.

The app is a separate, proprietary Windows product. The format, this server and the hooks are Apache-2.0 and work with no app installed. The app's interface is available in English and Arabic (some newer panels are still English-only).

Measure it yourself

Claims about a shared brain — "nothing is lost", "it stays fast" — are unfalsifiable until a stranger can re-run them, so the benchmark ships in the box:

npx klypix-mcp bench            # ~25s, or --quick for a smaller run

It measures concurrent-write safety across real OS processes, coordination latency, a 1,000-query soak with drift, and crash safety under SIGKILL — then prints the machine it ran on.

It runs a negative control first. Writers that bypass the lock go in before the real ones, because a "0 lost" number means nothing unless the same harness can see a loss. On the reference machine those unlocked writers lost 17 of 22 cards; the same contention through the lock protocol lost 0 of 46. If the control ever loses nothing, the run reports inconclusive instead of a pass.

Latest results, with hardware and date: BENCHMARKS.md.

Git and concurrency

One file in your repo, committed with your code — versioned, branchable, portable. So two developers already share one brain the way they share code: clone, branch, pull.

Be precise about what git does on its own: brain.klypix is a binary ZIP. Git shows Bin 1308328 -> 1309005 bytes and produces zero line diffs, so out of the box a conflict on it is an all-or-nothing take-ours or take-theirs, and a reviewer sees nothing. Card-level merge safety comes from the KLYPIX engine — but since 1.48.0 you can hand that engine to git and read its output in a PR:

npx klypix-mcp git-driver install     # once per clone, in any repo

That registers a merge driver for *.klypix (a per-machine git config line plus a .gitattributes rule you commit) and provisions the engine it needs. When two people change the brain and one pulls, git calls the engine instead of stopping: new cards from both sides are kept, a card only one side edited takes that edit, and a card edited differently on both sides keeps both versions — the second as a linked twin, never a silent overwrite. Before returning, the merge asserts it still contains every surviving card from both sides and refuses rather than hand back a result that lost one.

The honest boundary: a machine that has not run git-driver install simply gets the old binary conflict — safe degradation, not corruption — and git keeps both parents of every merge, so even a merge you dislike is reconstructable. It is a merge on pull, not live sync.

For review, two commands turn a binary blob into something a human can read:

npx klypix-mcp diff main            # card-level: what was added / updated / removed
npx klypix-mcp pr-brief origin/main # the brain cards that reference this PR's changed files

diff compares meaning rather than bytes (a re-save restamps timestamps; that is not a change). pr-brief matches a card's #file-… evidence anchors against the changed paths, so a reviewer sees the decisions already recorded about the code in front of them. examples/github/brain-pr.yml wires both into a sticky pull-request comment using nothing but the checkout and the default GITHUB_TOKEN — no KLYPIX service in the path.

Concurrent sessions serialize behind a capture lock, and each write is a temp file plus an atomic rename, so a crash mid-write leaves the previous good file intact. The lock is advisory with a ~3.6-second budget: past that, a writer proceeds anyway and flags it in the health log, so sustained contention can still lose an update. That is a deliberate trade — dropping the markers was judged worse — but it is a real limit, not a guarantee.

Restore points

Merging, tidying and gardening are lossless by contract. What none of them can undo is a deliberate-looking deletion: you select a dozen cards, delete them, and save. That is not a bug to prevent — a brain has to stay correctable, and an uncorrectable memory is worse than none — but it deserves a way back, because the brain is co-owned: hooks, the MCP server, commit capture and peers on other machines all write to it while nobody is watching, so you can destroy work you never saw arrive.

So every brain write takes a restore point of the previous bytes first:

npx klypix-mcp brain-history list          # age, card count, delta against the brain now
npx klypix-mcp brain-history restore <id>  # and this is itself undoable

They live under ~/.claude/project-brain/history/, never beside the brain — nothing lands in git, in the merge driver's path, or in your diffs, and they survive deletion of the .klypix file itself. Routine writes are deduped and throttled to one a minute; a write that removes cards is never throttled, because that is the case they exist for. Retention is the newest 20 plus one per day for 14 days, so a slow-burn mistake is still recoverable without unbounded growth. A snapshot that cannot be written is logged and skipped — it never blocks your save.

Normal canvases deliberately get none of this. One human made every mark and saw every change; the brain is the file where that is not true.


The command line

The MCP verbs below are what agents call. These are what you call:

Command

What it does

npx klypix-mcp init

Seed a starter brain.klypix here and print an MCP config

npx klypix-mcp install

Set up everything: machine engine + hooks, then this project — brain, config for the editors you have, merge driver, verified (see Quick start)

npx klypix-mcp link

Re-project all 14 managed files regardless of what is installed (--check audits)

npx klypix-mcp doctor

One verdict: version, hosts, live sessions, tool count, drift. Exits non-zero — usable as a CI gate

npx klypix-mcp runtime

Passive per-connection process/RAM attribution (--json, optional --watch seconds); never kills or deduplicates

npx klypix-mcp conformance

Launch two real MCP clients against this build and verify coordination behaviour

npx klypix-mcp git-driver

Register the lossless .klypix merge driver for a repo (status to check)

npx klypix-mcp git-hook

Wire the agent-neutral commit-capture hook: rationale-bearing feat/fix/perf commits from any agent, branch, or worktree card into the brain at commit time (install/remove/status; sessions auto-install it where the hook slots are free)

npx klypix-mcp brain-history

Restore points for this brain — list them, restore <id> one. Written automatically before every brain write, kept machine-local, and never throttled away for a write that removes cards

npx klypix-mcp diff [ref]

Card-level brain diff against a git ref, as markdown

npx klypix-mcp pr-brief [ref]

Brain cards referencing the files changed since a ref, as markdown

npx klypix-mcp garden-code

Print the human approval code brain_garden requires


The 22 verbs

Tool

What it does

brain_ask

Whole-brain question answering — correction-aware, as_of time travel

brain_challenge

The brain argues back: contradictions with receipts, tried-and-reversed chains, standing rules, other-agent provenance flags

brain_note

Capture with the full lifecycle — supersede / re-adopt / ✓ resolve / ~ update / 🛠 skill / closes:

brain_reconcile

Proposes stale-vs-correction pairs and unrecorded migrations for a human to confirm

brain_insights

Hubs, orphaned decisions, stale questions, area sizes

brain_lens

Machine-readable freshness, provenance, activity, timeline, orrery and unresolved views

brain_garden

Maintenance pass — proposes first, and cannot apply without an approval code the human generates

brain_doctor

Self-diagnosis: version, core/enhanced host adapters, active sessions, tool count, projection drift

brain_message

Session-to-session coordination notes with a fixed send-time audience and per-recipient pending / offer / acknowledgement / consumption / failure receipts (24h TTL, never written into the brain)

brain_message_receipt

Explicitly record model-side consumption using the exact message id and per-recipient offer token; acknowledgement alone never consumes a note

brain_sync

Context Gateway: task capsule, active-task peers, exact-file overlap, one-time alerts, timing, and optional result-manifest reconciliation

brain_connect

Find and draw related-but-unlinked cards

project_map_context

Read-only, bounded code-graph evidence beside correction-aware brain context, with exact-path review proposals; external artifacts (e.g. Graphify) are supported but never installed or run locally

project_map_scan

KLYPIX's own zero-install scanner: gitignore-aware file inventory + file-level import edges (relative, tsconfig-alias, and monorepo-workspace imports resolved) written to klypix-map/graph.json — which then serves project_map_context automatically

project_map_drift

Read-only drift report: brain cards whose referenced files are gone or moved (with rename candidates), plus a headline when the checkout itself is behind its origin default branch

canvas_view

Returns the board as a structured render spec plus a text summary, and declares an MCP Apps (SEP-1865) UI resource

read_canvas

A canvas as markdown (cards, connection graph, [[links]], #tags)

search_canvases

Search across canvases by name and content

search_all_brains

Cross-project memory search across every registered brain on this machine

create_canvas

New .klypix from cards + connections

add_to_canvas

Append cards/connections (positions preserved)

list_canvases

List every .klypix in the vault

Exactly 22, machine-verifiable with npx klypix-mcp doctor.

canvas_view: no MCP Apps host has been observed rendering the UI resource yet — there is no screenshot and no host-level test. Hosts without the extension get clean text, which is the path that is actually verified.

brain_doctor, brain_lens, brain_insights and brain_reconcile are read-only introspection. brain_garden, brain_reconcile and brain_connect always propose before they apply. npx klypix-mcp doctor gives one verdict and exits non-zero on drift, so it doubles as a CI gate.

One file you can hold

The whole brain — layout, cards, arrows, and the actual bytes (images, PDFs, audio, video) — is a single .klypix file: a plain ZIP with manifest.json, canvas.json, one JSON file per card, and an assets/ folder. Email it. Git it. Hand it to an agent. A folder of markdown points at its attachments; this file carries them. (Binaries are embedded by the KLYPIX app when you drop a file onto a canvas; this package's create_canvas / add_to_canvas / buildKlypix write cards and arrows, not assets — they read assets fine, they just don't create them.)

The parser is this package, Apache-2.0, so any tool or agent can read and write the format. Full spec: FORMAT.md.

Markdown export, JSON Canvas 1.0 export and direct opening of Obsidian .canvas files are features of the KLYPIX desktop app, not of this package — there is no export command among this package's binaries.

"Project" means any project. Two showcase brains ship in the npm package and the GitHub repo under examples/, identical in engine, different in life: showcase-brain.klypix is Aurora, a fictional weather app mid-build (radar tiles, API caps, a correction with its receipt), and showcase-wedding.klypix is Our Wedding (venue, vendors, guest list, the same correction machinery pointed at a caterer). Same 📌 Focus, same arrows, same brief. If it has decisions worth keeping, it gets a brain.

They ship inside the tarball, so you can read one straight out of node_modules:

npm i klypix-mcp
npx klypix-read node_modules/klypix-mcp/examples/showcase-brain.klypix

Both are text-and-arrows only — 14 cards, 4 arrows, no assets/ entry — so they demonstrate the card / container / connection model, not the embedded-binaries half of the format.

Use it as a library

import { parseKlypix, buildKlypix, appendToKlypix, structToMarkdown } from 'klypix-mcp';
npx -p klypix-mcp klypix-read   path/to/board.klypix      # → markdown brief
echo '{ "title": "Plan", "cards": [{ "text": "kickoff" }] }' \
  | npx -p klypix-mcp klypix-write --out plan.klypix

Also speaks A2A protocol v0.3.0 — experimental

npx -p klypix-mcp klypix-a2a --vault ./canvases     # 127.0.0.1:41241
# Agent Card: http://127.0.0.1:41241/.well-known/agent-card.json

Eight vault/project skills by default: make_board, remember, learn_skill, recall, read_canvas, list_canvases, brain_insights, brain_connect. Machine-wide search_all_brains is a ninth, explicit opt-in via --allow-cross-project. Unlike a typical A2A agent that returns text, KLYPIX returns the .klypix board itself as a multimodal artifact. Details: A2A.md.

Treat this as a preview: the adversarial A2A smoke test runs in the default npm test chain, but the server has not been exercised against a third-party A2A client.

Updates — the propagation contract

The MCP entry point is a stable stdio supervisor that keeps the host-owned connection open while a replaceable worker runs the brain core. A staged update is hash-verified, initialized in parallel, checked for backward-compatible tool schemas, and handed the current brain_sync task scope before the supervisor switches between requests. Added tools use the standard notifications/tools/list_changed signal. A failed or breaking candidate is rejected while the old worker keeps serving. A blocked result claim is kept in a durable per-project/session marker, so a worker replacement cannot turn a failed evidence check into a result-less completion.

Compatible engine updates therefore activate behind the same live connection — no reconnect, no host restart. Three cases still require a deliberate reconnect or manual install: the one-time legacy→supervisor migration, a supervisor-code change, and a major or tool-removing release. brain_doctor reports the live supervisor and the automatic-update receipt explicitly.

The supervisor performs one machine-wide npm version check per 24 hours, however many sessions are open. It installs an exact stable same-major release in --runtime-only mode, preserving host settings and project files. The check is detached and fail-open, developer-owned installs are protected, concurrent sessions collapse behind one lock, and KLYPIX_AUTO_UPDATE=0 opts out entirely.

When the optional semantic runtime is already enabled, an update also schedules one detached, single-writer cache migration across registered brains. That removes the multi-minute first-query re-index after a model/cache upgrade; cache writes are model-keyed and atomic across concurrent agent sessions. Lexical-only installs download nothing. Set KLYPIX_SEMANTIC_WARM_ON_UPDATE=0 to keep lazy first-use indexing instead.

Security and permissions

  • Apache-2.0, source public at github.com/dahshanlabs/klypix-mcp.

  • The brain engine makes no network calls and sends no telemetry. All engine intelligence is deterministic and local; the only LLM anywhere is your agent. The one exception in this package is the supervisor's once-per-24h npm version check described above — turn it off with KLYPIX_AUTO_UPDATE=0.

  • The optional semantic model runs on device. Enabling it (or upgrading its model) can fetch model weights from Hugging Face; retrieval inference and brain data stay local.

  • Coordination state is local files. The brain is a file in your repo; the presence lane is a file under your home directory. Nothing is uploaded — with one explicit, default-OFF exception: the cross-PC presence relay, which (only after per-brain consent in the KLYPIX desktop app) shares whitelisted presence fields and the text of one-time coordination notes over that brain's cloud channel. KLYPIX does not automatically attach file/card contents, diffs, or screen data, but a note relays whatever its sender typed (and automatic overlap alerts name the declared file paths involved). The scope is versioned: an older metadata-only grant does not authorize note text and must be granted again. No current consent, no frames.

  • install writes to your home directory: ~/.claude/project-brain (engine + runtime), ~/.claude/settings.json (five hooks — written even if Claude Code is not installed), ~/.codex/AGENTS.md (guidance block), and with --codex-hooks, ~/.codex/hooks.json. It also writes <cwd>/.codex/config.toml inside the project you run it in, and removes any KLYPIX entry from the global ~/.codex/config.toml. link writes 14 files inside the project you run it in; link --check audits them without writing.

  • Codex hooks require Codex's own trust approval and are opt-in via --codex-hooks.

Current limitations

Read this section before you build on any of it.

  • Coordination is machine-local and OS-user-local. The presence lane is a file in your home directory. Two developers on two machines do not see each other's sessions, peers, overlaps or messages. This package ships the cross-machine presence core (./presence-relay — versioned whitelisted presence metadata plus coordination-note text, a symmetric default-off consent gate, loop prevention, stable message IDs and per-recipient-machine acknowledgement primitives), but no transport: carrying frames between machines is the desktop app's job. With klypix-mcp alone, coordination is machine-local.

  • Overlap matching is exact-path, and both sides must declare. A session that never declares its expected files is invisible to overlap detection, and src/auth/token.ts does not match a rename or a parent directory.

  • Overlap warnings are advisory. Nothing is blocked. One severity string in the payload reads blocking; the mechanism is not.

  • Codex has no automatic capture, with or without --codex-hooks. The Codex hook never writes the brain.

  • Uninstall does not remove per-project files. npx klypix-mcp uninstall handles the machine-global install; the 14 files link wrote into each project are listed by npx klypix-mcp link --check and removed by uninstall unlink per project, one at a time.

  • Drift detection is single-host and opt-in per card. It needs an ev: anchor written by the card's author, and it runs only in the Claude Code hook path — the MCP tools do not compute freshness.

  • search_all_brains finds nothing for a Cursor-only or Codex-only setup. The cross-project registry is written by the Claude Code hook and only by it. This is a silent empty result, not an error.

  • npx klypix-mcp link does not manage CLAUDE.md. It manages AGENTS.md and seven other rules files. Only the desktop app writes CLAUDE.md.

  • A fresh npx klypix-mcp install gets lexical retrieval. The optional on-device model is deliberately not installed.

  • The capture lock is fail-open past ~3.6 seconds of contention (see Git and concurrency).

  • test/ is not in the published tarball. Run the suite from a clone. The publish workflow does gate on it — a gate job runs npm ci, asserts the test chain is intact, runs npm test, validates the version/tag, and checks the packed tarball; publish declares needs: gate, so a red gate means npm never sees a tarball.

  • canvas_view's MCP Apps UI has never been verified on a real Apps host.

Numbers and methodology

Every number here is measured on our own project brain. Nothing below is published, benchmarked or independently validated.

  • Dogfood scale. KLYPIX itself is built with its own brain: 2,479 cards and 2,018 connections, written by multiple concurrent agent sessions, receipts in the file. Current as of 2026-08-13.

  • Recall. 73% of past decisions recovered with one search round, 55% brief-only, 0% cold. Caveat that travels with it: n=20, our own brain, self-authored questions, LLM-judged.

  • Ranker. With the production embedder (the eval harness was fixed 2026-08-10 — it had been measuring a vector space the product does not use): recall@5 30%, recall@10 35%, recall@20 45%, MRR 0.22 of the true source card on n=20 frozen human-paraphrase questions. Lexical-only scores 0% on the same set. The previously published "15% → 40% with the reranker" is retired: re-measured validly, the reranker reduced recall@5 to 25% and now ships off by default. At n=20 every one of these percentages carries a ±20-point 95% confidence interval — treat them as directional until the larger frozen set lands. The regressions are recorded next to the wins: contextual prefixes on short cards, and the reranker itself.

  • What we do not publish. No download count: this package's own 24-hour auto-updater generates most of it, so it is not a user count. No adoption, team or customer figures. No brief-token figure — the last one was measured at ~600 cards and is stale at 2,479.

  • The eval harness is not in this repo. It lives in the private KLYPIX desktop repository. The numbers above are ours to defend, not yours to reproduce from here — treat them accordingly.

Uninstall

npx klypix-mcp uninstall --check   # full inventory — writes nothing
npx klypix-mcp uninstall           # asks, then removes the machine-global install
npx klypix-mcp uninstall unlink    # run inside a project: removes the files `link` wrote there

It strips only KLYPIX's own entries — every other hook and setting in ~/.claude/settings.json stays — backs up each file it edits, and never deletes a .klypix. --yes skips the prompt for scripted removal.

Your brain.klypix is yours — it is a plain ZIP and stays readable with or without this package.

Contributing

Issues and pull requests: github.com/dahshanlabs/klypix-mcp. Questions or feedback: hello@klypix.com.

The repository carries 89 test files: 83 listed directly in scripts.test, plus the pretest workflow gate. Together they cover the presence lane and its cross-machine relay, the Context Gateway, supervisor hot-swap, auto-update, retrieval quality, decay, challenge, lenses, the format guard, the git tools (including a real git merge through the merge driver), uninstall, and conformance. Run them with npm test from a clone — they are not in the published tarball, though the publish workflow does run them as a gate. There is a known intermittent Windows EPERM flake on rename in test/mcp-supervisor.mjs.

Why this exists

A model provider can fix continuity inside its own sessions, and several are. None of them will ever carry a competitor's context. Cross-tool, cross-agent and cross-provider understanding is the seam that stays open — so it should live in a file you own, in your repo, that any agent can read and write.

Your project, your file, any supported agent, offline.


Licence

This package — the MCP server, the agent hooks and the .klypix format parser — is Apache-2.0 (LICENSE, attribution in NOTICE). Versions up to and including 1.28.0 were published under MIT and remain available under those terms; 1.29.0 was the first Apache-2.0 release.

The KLYPIX desktop app and the klypix.com web app are separate, proprietary products — their source is not public, and their terms do not restrict anything Apache-2.0 grants you here. This package works with no app installed.

Apache-2.0 © Dahshan Labs.

Available Tools

22 tools
add_to_canvasAdd cards to an existing canvasA

Append cards (and optional connections) to an existing v4 .klypix, preserving all existing items and their positions. New cards are placed to the right of the current content. Connections may reference new cards (by index/title) or existing cards (by title).

ParametersJSON Schema
NameRequiredDescriptionDefault
cardsYesCards to add.
canvasYesCanvas filename, vault-relative path, or absolute path.
connectionsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers meaningful detail: preserving all existing items and positions, placing new cards to the right, and defining how connections can reference new or existing cards. It does not cover error behavior or permissions, but the core side effects are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and the most important guarantee (preservation), followed by placement and connection rules. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three parameters and nested card/connection objects, the description plus the rich input schema covers the essential invocation context. It could explicitly say to use create_canvas when the target does not exist, but 'existing' and the sibling context make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the description adds value beyond it, especially for connections: new cards can be referenced by index/title, existing cards by title. It also clarifies the append behavior and placement, which helps the agent understand the effects of the cards parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Append') and resource ('existing v4 .klypix'), and clearly states the preservation behavior. This distinguishes it from sibling tools like create_canvas or read_canvas without relying on the title alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly frames this as the tool for modifying an existing canvas while preserving its content, which orients the agent toward 'add to existing' rather than 'create new'. It does not explicitly name alternatives like create_canvas or state exclusions, but the context is strong enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_askAsk the project brain a question (whole-brain, correction-aware answer)A

Answer a natural-language question from the WHOLE project brain — "what did we decide about X?", "where did the auth work land?", "why did we drop Y?". Ranks every card lexically, blended with on-device semantic similarity ONLY when the optional local model is installed (a fresh install is lexical; it degrades cleanly). INCLUDES superseded/archived history (flagged, so you can see how a decision changed), and attaches each stale card's live CORRECTION so the answer reflects the current truth, not an outdated card. Returns a synthesis-ready context (full cards + provenance + lifecycle) for you to turn into a direct, cited answer — it does not itself write prose. Prefer this over search_canvases when the user asks a QUESTION (not a keyword lookup). Optional as_of (YYYY-MM-DD) answers "what was true then". Defaults to the project brain ("brain").

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMax cards to surface for synthesis (default 10, capped 20).
as_ofNoOptional YYYY-MM-DD: answer as of that date (superseded cards count as live if they were current then).
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").
questionYesThe natural-language question to answer from the brain.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. It discloses lexical ranking, conditional semantic ranking only when a local model is installed, graceful degradation on fresh installs, inclusion of superseded/archived history with flags, attachment of live corrections, and the fact that it returns synthesis-ready context rather than writing prose. This is far beyond minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and fairly long, but every sentence adds meaningful information about behavior, usage, or outputs. It is front-loaded with the core purpose and supported by examples, ranking behavior, correction handling, and routing guidance. Slight trimming could improve readability, but the richness is justified for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, absent annotations, and lack of an output schema, the description covers what an agent needs: question types, ranking behavior, historical context, correction awareness, return format (full cards + provenance + lifecycle), synthesis handoff, as_of semantics, and defaults. Nothing essential seems missing for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema: it explains what as_of means behaviorally ('superseded cards count as live if they were current then'), gives concrete question examples for the question parameter, and clarifies the default canvas. This raises it above baseline, though k is only covered by its schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb and resource: 'Answer a natural-language question from the WHOLE project brain,' with concrete example questions. It distinguishes itself from search_canvases by stating that brain_ask is for questions, not keyword lookups. This leaves no ambiguity about the tool's role among its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to prefer this tool: 'Prefer this over search_canvases when the user asks a QUESTION (not a keyword lookup).' It also names the alternative tool, explains the optional as_of parameter for historical questions, and notes the default canvas behavior. This is clear, actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_challengeChallenge a decision against the brain (argue back with receipts)A

BEFORE committing to a significant decision, ask the brain to ARGUE BACK: prior decisions that deterministically contradict the claim (correction-cue / opposite-polarity evidence — never mere topical similarity), 🛠 standing rules that dispute it, approaches tried before and REVERSED (with the correction/successor as the receipt), and open questions it collides with. Candidates, not verdicts — silence means "no deterministic contradiction signal", not verified consistency. Cards captured by a DIFFERENT agent are flagged so you coordinate instead of overriding. Dismiss a confirmed-false pair (after capturing the claim) with brain_connect pairs + relationship:"not_contradiction". Defaults to the project brain ("brain").

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMax contradiction candidates to surface (default 8, capped 20).
claimYesThe proposed decision/claim to argue against — one concise statement.
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers: it discloses deterministic-only evidence, the meaning of silence, the fact that results are candidates rather than verdicts, that cards from another agent are flagged for coordination, and the dismissal workflow. This is unusually transparent about limits and side behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich, and the key when-to-use guidance is front-loaded. Some phrasing is heavy with parentheticals and jargon, but every clause contributes meaningful behavioral or usage context, so the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explains what the output means ('Candidates, not verdicts', silence semantics), what evidence counts, what defaults apply, and how to act on results. For a moderately complex decision-support tool, this is complete enough for an agent to invoke it correctly and interpret its results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents claim, k, and canvas clearly. The description reinforces their roles—'one concise statement', candidate count, project-brain default—but adds little semantic depth beyond the schema. It earns the baseline 3 rather than more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it asks the brain to ARGUE BACK against a claim by surfacing deterministic contradictions, standing rules, reversed approaches, and colliding open questions. This clearly distinguishes it from generic brain querying and read tools, and the phrase 'Candidates, not verdicts' further defines its narrow role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use it: BEFORE committing to a significant decision. It also sets exclusions by warning against mere topical similarity and explaining that silence means 'no deterministic contradiction signal', not verified consistency. It even names the follow-up action and alternative tool relationship: brain_connect with relationship 'not_contradiction' for dismissing confirmed-false pairs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_connectConnect related-but-unlinked brain cards (densify the graph)A

Repairs orphaned decision/milestone cards first (scope:"orphans", the default) by proposing genuinely related unlinked pairs — semantic similarity at a conservative 0.55 threshold when the on-device model is installed, else shared tags + [[mentions]]. The dry run includes a before→projected orphan receipt; apply:true draws only additive, removable arrows and reports the measured after count. It NEVER archives or rewrites cards. Use scope:"all" for deliberate whole-graph densification. To DISMISS a brain_reconcile false-positive contradiction, pass pairs:[{fromId,toId}] with relationship:"not_contradiction".

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMax connections to propose/draw (default 24).
applyNofalse (default) = suggest only; true = draw the connections.
pairsNoExplicit card-id pairs to connect (bypasses auto-proposal). Use to dismiss a reconcile false-positive: pass the two card ids with relationship:"not_contradiction".
scopeNo"orphans" (default) repairs isolated decision/milestone cards; "all" proposes across every live card.
canvasNoCanvas filename/path. Defaults to the project brain ("brain").
thresholdNoMin semantic similarity 0–1. Default 0.55 for orphan repair; 0.45 for scope:"all". Higher = fewer, tighter links.
relationshipNoRelationship for explicit `pairs` (e.g. "not_contradiction" to permanently dismiss a contradiction candidate, or "relates_to", "depends_on", "supports").

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so strongly. It discloses that the tool never archives or rewrites cards, that apply:true draws only additive and removable arrows, and that dry runs produce a before→projected receipt. This gives an agent a clear safety and side-effect profile beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place. It front-loads the default behavior, then explains the dry-run/apply effect, safety guarantees, scope alternative, and the reconciliation dismissal workflow. The structure is logical and efficient with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and no annotations, the description is remarkably complete. It covers the primary workflow, the apply behavior, the safety boundary, the special scope option, and the cross-tool integration with brain_reconcile. The only minor gap is the exact response structure beyond the mentioned receipt and count, but this is not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful beyond-schema semantics: the 0.55 vs 0.45 threshold distinction, scope behavior, and the specific use of pairs/relationship to dismiss a reconciliation false positive. This elevates it above baseline, though some params like canvas and max rely on schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it repairs orphaned decision/milestone cards by proposing and drawing connections between related-unlinked brain cards. It also distinguishes itself by explaining the default scope, the whole-graph densification mode, and its relationship to brain_reconcile false positives. This makes its purpose unambiguous and separates it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: default orphan repair, scope:"all" for whole-graph densification, and pairs with relationship:"not_contradiction" to dismiss reconcile false positives. It does not explicitly state when to avoid this tool in favor of sibling tools, but the provided use cases are clear enough for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_doctorBrain doctor — is this brain current, wired, and in sync?A

Read-only self-check of the installed klypix brain, as ONE verdict: VERSION (deployed brain-core + optional npm currency), CLAUDE (existing 5-hook capture readiness), CODEX (automatic MCP presence plus optional enhanced-hook status), TOOLS (discoverable MCP verbs), SESSIONS (all active presence-adapter sessions across hosts, never recent-chat history), and HARNESS (projection drift). Use to answer "is my brain current, correctly installed, in sync, and who is actually live?" without file-spelunking. Never writes. SCOPE: only CLAUDE and CODEX get behavioural verdicts. HARNESS classifies the projected config/rules FILES on disk — a project can read fully ok while no other host has ever actually loaded them, so do not report a clean HARNESS as "Cursor/Cline/Windsurf/Copilot is working". The MCP-callable twin of npx klypix-mcp doctor.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject dir to audit harness + peers for. Defaults to the server's working directory.
check_npmNoAlso fetch npm latest to flag a stale brain (default false — this one does a network `npm view`).

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does so thoroughly. It explicitly states 'Never writes' and 'Read-only', clarifies that SESSIONS is never recent-chat history, and warns that a clean HARNESS reading does not mean other hosts have loaded the files. These caveats prevent real misinterpretation of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but each sentence earns its place: it front-loads the read-only nature and output shape, then covers scope caveats and the CLI twin relationship. It could be slightly better organized with bullets, but it is not bloated and the important caveats are included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a diagnostic tool with two well-documented parameters and no output schema, the description provides the core verdict categories, the intended use case, and key limitations. It does not spell out exact verdict values or failure behavior such as network errors from `check_npm`, so it is strong but not fully exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both `project` and `check_npm`. The description's references to 'optional npm currency' and 'projection drift' add mild context but do not materially extend what the input schema provides. Baseline 3 is appropriate because the description adds only peripheral color.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read-only self-check of the installed klypix brain' delivered as one verdict covering VERSION, CLAUDE, CODEX, TOOLS, SESSIONS, and HARNESS. It makes the tool's diagnostic role unmistakable and distinguishes it from sibling tools like brain_ask, brain_sync, or project_map_scan by focusing on installation health, synchronization, and liveness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear trigger question: "Use to answer 'is my brain current, correctly installed, in sync, and who is actually live?' without file-spelunking." It also provides important scope guidance about HARNESS and which components get behavioral verdicts. It does not explicitly name sibling alternatives or say when not to use it, but the usage context is clear and not misleading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_gardenGarden the brain — consolidate over-grown areas (sleep-time compute)A

Tidy an over-grown brain WITHOUT losing anything — SMART and non-invasive: it only consolidates DORMANT cards (old + peripheral), never load-bearing ones. Two phases: call it with no apply to get the areas that have accumulated forgotten cards (deterministic: >3 cards that are older than 14 days, beyond the area's newest 8, AND have ≤1 connection — so hubs and still-referenced decisions are left untouched; Focus/Instructions/Archive/Open-questions areas protected) plus their card text; YOU write one tight synthesis per area; then call again with apply:true, syntheses:[{title, synthesis}] AND the human's 8-char approve code (apply is REFUSED without it — you are never shown the code; the human generates it with npx klypix-mcp garden-code after reviewing your plan). Each area gets a 🌿 synthesis card, the originals are stamped "⤵ consolidated", moved to Archive, and arrowed to the synthesis — nothing is deleted, and one undo un-gardens. Run it when brain_insights or the brief shows an area has grown noisy.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNofalse (default) = list over-grown areas + cards to synthesize; true = consolidate using the supplied syntheses.
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").
approveNoRequired when apply:true — the 8-char human-approval code. You are never shown it: the human runs `npx klypix-mcp garden-code` and pastes the code into chat after reviewing your plan. Never guess or fabricate it.
synthesesNoRequired when apply:true — one entry per area you want consolidated.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and fully delivers: it discloses the non-invasive nature ('nothing is deleted'), deterministic selection thresholds, protected areas, the hard approval gate ('apply is REFUSED without it'), exact effects on the originals, and the one-undo un-gardening guarantee. It also warns that the agent is never shown the code, preventing fabricated approvals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but every clause carries load-bearing operational information; the core safety promise is front-loaded and the workflow, criteria, effects, and trigger are all tightly packed. There is no filler or repetition of the schema without added context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex two-phase, approval-gated mutation tool with no annotations and no output schema, the description is remarkably complete: it covers when to run, what the dry run returns, how to get approval, what apply does, what happens to the originals, and how to undo. An agent has enough to safely execute both phases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds significant phase-dependent meaning: apply=false returns areas plus card text, apply=true consumes syntheses and requires the approve code. It also ties syntheses to exact dry-run area titles and emphasizes the human-generated 8-char code, going beyond the schema's structural descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific outcome ('Tidy an over-grown brain... consolidate') and immediately states the mechanism: it consolidates only DORMANT cards and never load-bearing ones. It clearly describes the two-phase flow and the resulting synthesis card, which distinguishes it from siblings like brain_insights, brain_connect, and brain_reconcile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to run it: 'Run it when brain_insights or the brief shows an area has grown noisy,' and it lays out the exact two-phase dry-run-then-apply protocol. It does not explicitly name sibling alternatives or when-not-to-use cases, so it misses the top bar for exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_insightsWhat matters in a brain — hubs, orphans, stale questionsA

Structural read of a brain.klypix: the most-connected "hub" cards (load-bearing decisions), orphaned decisions (no connections — maybe forgotten), stale open questions (aging & unresolved), and area sizes. Use to answer "what matters here / what am I forgetting / what should I review?" — read it at the start of a planning session, or before tidying.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo"areas" = a cheap category map (what sections exist + live counts) to orient BEFORE retrieving. "status" = where each active area stands (newest milestone + open count). "full" (default) = hubs, orphans, stale questions and areas.
canvasNoCanvas filename/path. Defaults to the project brain ("brain").
staleDaysNoOpen questions older than this many days count as stale (default 21).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden, and it does well by calling the operation a 'read' and explaining the meaning of the outputs ('load-bearing decisions', 'maybe forgotten', 'aging & unresolved'). It implies read-only behavior and gives interpretive context, though it does not state side effects or limitations explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states what the tool reads and what it returns, and the second sentence explains when to use it. No wasted words, and the structure makes the tool easy to grok quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only inspection tool with three optional parameters and no output schema, the description is nearly complete: it covers outputs, purpose, and timing. It could be more complete by mentioning that this is a read-only operation more explicitly and by addressing how it differs from similar sibling tools, but the core context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description adds some context about 'stale open questions' and 'area sizes', which loosely relates to staleDays and view, but it does not meaningfully enrich the parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action ('Structural read of a brain.klypix') and enumerates concrete outputs: hub cards, orphaned decisions, stale open questions, and area sizes. It is easy to understand what the tool does, but it does not explicitly differentiate itself from sibling tools such as brain_lens or brain_connect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage contexts: answer 'what matters here / what am I forgetting / what should I review?' and use it at the start of a planning session or before tidying. It does not state when not to use the tool or name alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_lensBrain lens — machine-readable views of a brain (freshness · provenance · activity · timeline · orrery · unresolved)A

The data twin of the desktop app's Brain Lenses: ONE structured payload any surface (agent, web viewer, iOS) can render. Views: freshness (age buckets + stale open ❓), provenance (who wrote the brain, by channel: you/claude/cursor/git/gardener/…), activity (last 7 days), timeline (birth-order events — the Replay spine; events included only for view:"timeline"), orrery (focus+context neighborhood of one card: 1/2/3-hop ring-capped nodes + typed edges — pass root as a card title prefix or id, defaults to the most-connected hub), unresolved (open-❓ triage, oldest first, with typed evidence). Read-only by construction — it never writes. Use it to answer "what's rotting / who wrote this / what happened this week / what's around X / what's undecided" with receipts, or to feed a UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootNoOrrery center: a card title prefix or id. Default: the most-connected hub card.
viewNoWhich lens to compute (default "all" — every section, timeline events omitted from structured output unless view is "timeline").
limitNoCap for recent-activity entries (default 30).
canvasNoCanvas filename/path. Defaults to the project brain ("brain").
staleDaysNoOpen questions older than this count as stale (default 21).
structuredNoAlso return the full machine-readable lens object (large — tens of KB). Default false: the markdown answers the question, and the object was previously attached to every call whether or not anything read it.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it states the tool is read-only and never writes, explains that timeline events are only included for the timeline view, and describes the structured payload size and the structured default behavior. Minor gaps remain around error behavior, but the key safety and return-shape traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely informative, covering the main purpose, each view, key defaults, and usage. It is front-loaded with the core concept and every major clause contributes. Slight redundancy like 'Read-only by construction — it never writes' could be tightened, but it does not bloat the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema and no annotations, the description gives enough detail for an agent to call the tool correctly: it explains what each view returns, how root and structured behave, and what question types the tool answers. The markdown vs. structured output distinction is also addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds valuable meaning beyond the schema for root (card title prefix or id, defaults to most-connected hub), view (events omitted unless timeline), and structured (large payload, default false, historical behavior). This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns one structured payload of brain lens views and enumerates what each view contains (freshness, provenance, activity, timeline, orrery, unresolved). It distinguishes itself as the read-only data twin of the desktop Brain Lenses, making its role distinct from sibling tools like brain_ask or brain_connect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use cases: "what's rotting / who wrote this / what happened this week / what's around X / what's undecided" or feeding a UI. It does not explicitly name alternatives or state when not to use this tool, but the described intents provide clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_messageMessage the other live agent sessions on this project (one-time note, not a brain card)A

Leave a DELIBERATE, targeted note for the OTHER active agent sessions working on this project right now ("merged the hook refactor — rebase before you commit", "don't touch canvasStore, mid-refactor"). Any MCP client can send and receive through the shared machine-local presence lane. A supported lifecycle event or KLYPIX tool result offers the note into model-visible context; a later independent supported action acknowledges that offer. Pending/offered notes replay after reconnect, while expiry or capacity loss leaves a failed per-recipient receipt instead of silently disappearing. Acknowledged means a later action followed the offer — it is NOT proof a human read it. A note then retires either by an explicit brain_message_receipt ("acted on it") or by AUTO-CONSUMPTION on a further independent action, with no receipt; your receipt line names which, and auto-consumption evidences activity, not uptake. Delivery remains OS-user-local, machine-local, bounded by a 24h TTL, and unavailable to a peer that never takes a supported action. Ephemeral and NOT persisted to the brain — for a durable decision use brain_note instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoTarget hint — a peer session id-prefix or branch name; omit or "all" for every live session.
textYesThe note to deliver (kept to 400 chars).
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it delivers extensively: delivery is OS-user-local, machine-local, bounded by a 24h TTL, ephemeral, and replayable after reconnect. It also clarifies acknowledgment semantics (not proof of human reading), auto-consumption behavior, and failure receipts, which is far beyond typical disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with non-redundant behavioral details that matter for correct use. The front-loaded purpose sentence and examples make the primary intent immediately clear; the later lifecycle details are verbose but justified by the unusual ephemeral delivery semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers nearly everything an agent needs: recipient targeting, ephemerality, delivery constraints, expiration, receipt semantics, and the distinction from brain_note. The only minor gap is that it never explicitly describes the response/return shape, though it references a 'receipt line'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters clearly. The description adds examples of message content and behavioral context, but it does not add new parameter-level meaning beyond what the schema provides. The baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Leave'), a specific resource ('note for the OTHER active agent sessions'), and the intended scope ('working on this project right now'). It also differentiates itself from the durable brain_note tool by explicitly stating this is ephemeral and not persisted, which is the key distinction among sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use guidance: leave a deliberate, targeted note for other live sessions. It explicitly contrasts with brain_note ('for a durable decision use brain_note instead'), and it describes the delivery conditions, such as requiring the peer to take a supported action. This is sufficient routing guidance for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_message_receiptConfirm a KLYPIX coordination note was consumedA
Idempotent

Explicit durable receipt for a coordination note already offered into model-visible context and acknowledged by a later independent action. Call only after the note has actually been incorporated into the receiving agent's work. Requires the exact message id and one-time offer token returned with the offered note; identity, token, state, lock, and write mismatches fail closed and never silently mark consumption.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAbsolute project root containing brain.klypix. Defaults to this MCP connection's current project.
message_idYesExact coordination message id returned with the offered note.
offer_tokenYesExact offer token returned with the offered note.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotent and non-destructive behavior. The description adds useful behavioral context by stating the action is a durable receipt and that identity, token, state, lock, and write mismatches fail closed, never silently marking consumption. This goes beyond the annotation fields without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each earning its place: the first defines the tool, the second states when to call it, and the third specifies requirements and failure behavior. The critical usage condition is front-loaded and nothing extraneous is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small, three-parameter receipt tool with no output schema, the description covers what the tool is, when to call it, what inputs are needed, and what happens on mismatch. The annotations cover idempotency and non-destructiveness, so the overall contract is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says about message_id and offer_token, though it adds the 'one-time' nature of the offer token and ties the parameters to the fail-closed matching behavior. There is only marginal added meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific operation: confirming that a coordination note was consumed after being offered into context. It clearly distinguishes this receipt/consumption marker from sibling tools like brain_message or brain_note by emphasizing that the note was already offered and acknowledged by a later independent action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit precondition: 'Call only after the note has actually been incorporated into the receiving agent's work.' It also states the required inputs, but it does not mention exclusions or explicitly route the agent away from alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_noteWrite a deliberate note to the project brain (decision / question / milestone / skill / resolve / update)A

Record something in the project brain ON DEMAND — the agent-neutral twin of the Claude-Code capture hook, so any client (Cursor / Cline / Desktop) can write the brain, not just read it. Unlike add_to_canvas (a flat append), this routes through the brain's capture engine, so a new decision SUPERSEDES a heavily-overlapping older one, ✓ RESOLVES/archives a matching card, closes: resolves the strategy/question a milestone fulfils, and ~ UPDATES a card in place — the full decision lifecycle, with dedup. Use marker "+" to record a 🛠️ SKILL — a reusable how-to/gotcha/convention ("always dedup zKeys before REORDER") that should resurface every session and never age out, distinct from a one-time decision. Use it to remember a decision, ask an open question, mark a milestone, log a skill, resolve a finished item, or correct a card. Defaults to the project brain ("brain").

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoArea/topic — routes the card into that titled container and becomes a #tag (e.g. "Auth", "Release").
textYesThe note — one concise idea; the first line becomes the card title.
guardNoGUARD CARDS: make this '+' skill fire BEFORE a matching tool call runs (Claude Code PreToolUse denies on severity block; other hosts warn), not just resurface in briefs. The card stays a normal 🛠️ rule — ✓-resolving it retires the guard, ~ with {remove:true} disarms it.
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").
closesNoTitle or [[wikilink]] of a strategy/question card this note fulfils — resolves+archives it and draws a "closed by" arrow.
markerNo(none)=decision · ?=open question · !=milestone · +=🛠️ skill (reusable how-to/gotcha; always resurfaces, never ages out) · ✓=resolve+archive the best-matching card · ~=update the matching card in place. Default: decision.
verifyNoVerification instructions or command text to retain and display. Never executed by KLYPIX. On ~, an empty string clears it.
evidenceNoSupporting references. File bytes are fingerprinted as captured working-tree sources; hashes only detect source changes. On ~, [] clears evidence. Not accepted on resolve; use a milestone with closes to attach new evidence.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses lifecycle behavior beyond what annotations provide (which is none, since no annotations are supplied): new decisions supersede overlapping older ones, ✓ resolves/archives a matching card, ~ updates in place, and skills 'resurface every session and never age out.' It also exposes the potential side effect of SUPERSEDING/dedup and the guard card's PreToolUse behavior for blocking/warning. It does not fully inventory every side effect (e.g., evidence fingerprinting) but for an 8-parameter tool with no annotations, this is still strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it defines the tool's niche, differentiates from a sibling, lists the marker meanings, explains guard cards, and notes the default canvas. It is a long paragraph rather than a scannable list, but for a complex 8-parameter tool covering multiple card types, the length is mostly justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects, 8 parameters, multiple marker modes, guard behavior, and no annotations or output schema, the description covers the necessary context: what the card lifecycle does, when to use guard/block, how markers change behavior, what the default canvas is, and how this relates to siblings. Even though the schema already covers each parameter, the description supplies the cross-cutting semantics that make the tool safely usable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents every parameter. The description adds meaning by mapping markers to lifecycle behavior (+, ✓, ~, etc.), clarifying the difference between a skill and a decision, and adding the nuance that guard-card severity 'block' should never be authored without explicit user instruction. It doesn't add exact formatting for every field beyond the schema, but it goes beyond merely repeating schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a highly specific verb+resource ('Record something in the project brain ON DEMAND') and covers every marker type and lifecycle behavior (decision, question, milestone, skill, resolve, update, guard). It explicitly distinguishes itself from add_to_canvas, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a clear when-to-use ('record a decision, ask an open question, mark a milestone, log a skill, resolve a finished item, or correct a card'), explains what the tool does not do (not a flat append like add_to_canvas), gives concrete examples ('always dedup zKeys before REORDER'), and clarifies defaults ('Defaults to the project brain ("brain")'). It also explains guard-card usage and the block severity constraint, which is strong context that would otherwise be missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_reconcileReconcile the brain — contradictions between cards + unrecorded migrationsA

Truth maintenance. (1) CONTRADICTIONS: finds same-subject live card pairs where one carries an explicit correction cue (uppercase "CORRECTION", "was WRONG", "OBSOLETE" — that side is the presumed truth, UNLESS the cue predates its counterpart: then the pair is marked "presumed superseded" and the newer card is presumed current — verify before retiring) or the two use opposite polarity words (deferred↔wired, broken↔fixed, dead↔live), i.e. stale facts whose correction never got linked — candidates only, YOU confirm each: retire the stale card via brain_note ✓. Dismiss a FALSE positive (either kind) by connecting the two ids with brain_connect pairs + relationship:"not_contradiction" — persisted, so it never resurfaces (and its cue stops overlaying recall/ask for that pair). (2) MIGRATIONS: lists committed migration files (Supabase / Rails / Prisma / Knex / generic) that NO brain card references, so an applied-but-unnarrated rollout can be recorded. (3) LEGACY: pre-v1.15 raw-bash ship cards to tidy. Reads ONLY the filesystem — never the database, never the network — and changes nothing. Run it periodically, or when recall surfaces something you believe is stale.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoWhich pass to run (default "all"): contradictions · migrations · legacy (pre-v1.15 raw-bash ship cards to tidy) · claims (open "remaining:/next:" clauses a later milestone likely fulfilled — receipts + ✓ markers, never auto-archived) · plans (plan / proposal / "design decided" cards a LATER 🏁 appears to have built — embedding-first because the ship is usually renamed; receipts + ✓ markers, never auto-archived).
rootNoProject root holding the migrations dir (default: the brain file's folder).
canvasNoBrain canvas filename/path. Defaults to the project brain ("brain").

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly states safety: 'Reads ONLY the filesystem — never the database, never the network — and changes nothing.' It discloses persistence semantics for false-positive dismissals, marks candidates as 'candidates only, YOU confirm each', and notes that claims/plans are 'never auto-archived'. This is unusually transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the tool is genuinely complex and the text is scannable with bolded section labels. It front-loads the core purpose and each sentence carries behavior or usage content. A little trimming would be possible, but the density and structure earn a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, no annotations, and three optional parameters, the description covers the modes, expected findings, interpretation cues, safety profile, and follow-up workflows. It tells the agent what the tool will surface, what requires user confirmation, and how to persist dismissals. Combined with the detailed schema enum descriptions, nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The main description reinforces what mode means but adds no parameter-level detail beyond the input schema's own descriptions of mode, root, and canvas. It does not introduce new syntax, defaults, or relationships between parameters, so it neither compensates nor falls short.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Truth maintenance' and then names precise actions: 'finds same-subject live card pairs', 'lists committed migration files', and 'pre-v1.15 raw-bash ship cards to tidy'. It clearly identifies the resources being reconciled and separates this from siblings like read_canvas or brain_challenge. The title's 'reconcile' jargon is fully resolved by the body.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to run it: 'Run it periodically, or when recall surfaces something you believe is stale.' It also routes follow-up actions to siblings, telling the agent to retire stale cards via brain_note and dismiss false positives via brain_connect with relationship 'not_contradiction'. It does not list explicit when-not-to-use alternatives, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_syncKLYPIX Context Gateway — synchronize task, peers, conflicts, and relevant memoryA
Idempotent

APPROVAL-FREE task gateway over the authorized MCP connection. Call FIRST with a concise intent and expected files, again when scope changes, and with phase:"complete" before the final response. One bounded response returns compact task-relevant brain context, active TASK peers (idle connections hidden), one-time messages, structured exact-file conflicts, and late-arrival overlap alerts. A completion that supplies machine-checkable result manifests is fail-closed: invalid, conflicting, or incomparable evidence returns needs-reconciliation and retains task scope. Works on any MCP host — it needs only the authorized MCP connection, so native lifecycle hooks are optional. LIMITS: conflict matching is EXACT-PATH and both sessions must have declared their files, coordination/result reconciliation is machine-local and OS-user-local (a teammate on another machine is invisible), and file overlap remains ADVISORY.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoProject-relative files you expect to touch or have touched. Exact overlaps with peers are flagged.
phaseNostart replaces prior task scope; checkpoint merges changed scope; complete clears task intent/files. Default: checkpoint.
intentNoOne sentence describing the current task. Supply for start/checkpoint; completion clears it.
projectNoNonempty absolute current project root that directly contains brain.klypix or brain.any. Supply it on phase "start" so routing stays correct even when the MCP host launches from its own install directory.
resultsNoOn phase complete, 1-8 result manifests for stable claim keys. The in-handler versioned validator rejects malformed, empty, unknown-field, or incomparable evidence and retains task scope.
releaseClaimNoStake a durable claim that specific commits ride the NEXT release — the promise "you'll see it in the next build" made machine-readable. Unlike presence rows (which age out ~10min after a session ends), a claim persists until fulfilled (the release ref contains the shas — auto-retired with a courtesy note), withdrawn, or expired (14d). A release that would drop claimed shas is REFUSED until they are acknowledged BY NAME, and acknowledging them away notifies the owner. Use exactly one of shas (stake/extend) or withdraw.
releaseIntentNoDeclare EXCLUSIVE intent to prepare a release of this project. The first declarer takes a ~2h lease (refreshed by checkpoints, freed by phase "complete", by expiry, or when the holder session ends); a second declarer gets a structured hard conflict naming the holder, version, and ref. While any lease is active every peer's sync gains a "release in preparation" footer line. A NEW declaration is also checked against what the release would LEAVE BEHIND: if the ref is missing commits that are on trunk or on a branch a live peer session is working on, OR commits any session STAKED a releaseClaim on (even one that has since ended), the lease is REFUSED (nothing is changed) and the response lists them — report those commits to the user, then re-declare with acknowledge:[...] naming each sha if the release should go ahead without them. Acknowledging away a claimed or live-owned commit queues its owner a notification automatically.
include_contextNoInclude fast task-relevant brain cards and offer queued coordination notes in the same response. Defaults true; false also defers note delivery so internal supervisor probes cannot consume model-visible messages.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations cover idempotency and non-destructiveness, and the description adds substantial behavioral context: fail-closed completion, exact-path conflict matching, machine-local/OS-user-local coordination, release lease and claim semantics, and late-arrival alerts. No contradiction with the annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not redundant; the critical 'Call FIRST' instruction is front-loaded. Every sentence contributes a distinct operational fact: call phases, response contents, fail-closed behavior, portability, and important limitations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately summarizes what a response contains: task context, active task peers, one-time messages, exact-file conflicts, and late-arrival alerts. Limits and failure behavior are also covered, while the complex nested parameters are fully documented in the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the detailed property docs already carry the parameter-meaning burden. The main description adds minor context like 'concise intent and expected files' and 'machine-checkable result manifests', but it does not systematically add meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: an approval-free task gateway that synchronizes task scope, peers, conflicts, and relevant memory. The phase protocol (start/checkpoint/complete) and the returned payload are explicit, clearly distinguishing brain_sync from siblings like brain_ask, brain_reconcile, or brain_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes when to call: first with intent and files, again when scope changes, and with phase 'complete' before the final response. It also explains scope replacement/merging and host-agnostic suitability. It does not name explicit alternatives or when-not-to-use cases, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canvas_viewView a canvas as a spatial board (whiteboard-in-chat)A

Read any .klypix canvas/brain as a SPATIAL BOARD (defaults to the project brain): returns a text summary plus a structured render spec of cards, containers and connection arrows. It ALSO declares an MCP Apps (SEP-1865) UI resource, so a host with that extension can render the spec as an interactive read-only whiteboard — EXPERIMENTAL: no host has been observed rendering it, so do not promise the user a visual board. Hosts without the extension get the text summary, which is the verified path. Use when the user asks to SEE the canvas/brain/board layout, not just query it.

ParametersJSON Schema
NameRequiredDescriptionDefault
canvasNoCanvas filename/path. Defaults to the project brain ("brain").

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden, and it delivers: it discloses that the operation is read-only, that it may declare an experimental MCP Apps UI resource, that no host has been observed rendering it, that the text summary is the verified path, and warns not to promise a visual board. This is unusually transparent about limitations and fallback behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence serves a purpose: purpose, return content, UI resource caveat, verified fallback, and usage condition. The important caveat about not promising a visual board is front-and-center rather than buried. No filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description appropriately explains what the tool returns: a text summary plus a structured render spec of cards, containers, and connection arrows. It also covers the experimental UI side and the fallback behavior, which is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already described in the schema with its default value. The description reinforces the default but does not add meaningful new parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Read any .klypix canvas/brain as a SPATIAL BOARD" and clearly distinguishes the tool from a plain query by emphasizing that it returns a spatial render spec, not just content. It also clarifies the default target (project brain), removing ambiguity about what the tool operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says "Use when the user asks to SEE the canvas/brain/board layout, not just query it," which provides a clear when-to-use boundary. However, it does not name the specific sibling tool to use for pure querying, so the guidance is strong but not as complete as it could be.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_canvasCreate a KLYPIX canvasA

Create a new .klypix canvas from cards + connections and save it to the vault. The user opens it in the KLYPIX app (Canvas → Open). Prefer short, titled cards (one idea each) connected by meaningful arrows. For anything a person reads IN ORDER — steps, phases, checklists, sections — put the cards in groups: each group becomes a titled box with its cards stacked in the order given, boxes left-to-right; the loose grid follows arrows, not reading order, and scatters a sequence.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardsYesThe cards. 5-12 atomic cards is ideal for a mind-map; a checklist can be longer when grouped.
titleYesCanvas title (also the filename).
groupsNoTitled boxes, each listing its member cards in reading order (index, title, or id). Ungrouped cards form a band above the boxes — good for the title card, a link, a legend.
filenameNoOverride the output filename (without extension).
connectionsNoArrows between cards.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses a side effect ('save it to the vault') and explains behavioral traits such as groups becoming titled boxes with stacked cards and boxes arranged left-to-right. It doesn't address overwrite behavior or response format, but the creation intent is unambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core operation, then adding user context and layout guidance. Every sentence contributes distinct information, and there is no repetition of schema field names or annotation data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no output schema and five parameters, the description covers the main behavioral choice (groups vs loose grid), persistence, and the intended user experience. It omits return value and error/overwrite behavior, but those are secondary for a create operation and the input schema already documents all parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by advising card style ('Prefer short, titled cards (one idea each) connected by meaningful arrows') and by explaining the semantic difference between grouped and ungrouped cards, which maps to the `groups`, `group`, and `connections` parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create a new .klypix canvas from cards + connections and save it to the vault.' It clearly distinguishes this from siblings like add_to_canvas by emphasizing 'new' and 'save it to the vault,' and adds user context via 'The user opens it in the KLYPIX app (Canvas → Open).'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete guidance on when to use groups versus the loose grid: 'For anything a person reads IN ORDER — steps, phases, checklists, sections — put the cards in groups.' It explains the consequence of not grouping: 'the loose grid follows arrows, not reading order, and scatters a sequence.' It doesn't explicitly name alternative tools, but the 'new' vs add distinction is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_canvasesList KLYPIX canvasesA

List all .klypix / .any canvas files in the vault, with card and connection counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states the scope ('all .klypix / .any canvas files in the vault') and the included output details ('card and connection counts'). 'List' clearly implies a read-only, non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence fully captures what the tool does without any filler or redundant phrasing. Every word contributes meaning: 'List all', the file types, the vault scope, and the counts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter listing tool with no output schema, the description is complete: it specifies what files are listed, the scope, and the key output contents. There are no missing details that would prevent an agent from selecting and invoking this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description appropriately focuses on the tool's behavior rather than parameters, and no parameter explanation is needed because the input schema is empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List'), a specific resource ('all .klypix / .any canvas files in the vault'), and the expected output ('with card and connection counts'). It is easily distinguishable from sibling tools like read_canvas or create_canvas, though it does not explicitly name alternatives or contrast with search_canvases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: whenever an agent needs a full inventory of canvas files in the vault. However, it does not explicitly mention when not to use it or describe how it differs from search_canvases, so the usage guidance is only implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_map_contextProject Map context - current code structure plus brain decisionsA
Idempotent

Read-only combined context for a coding question. It queries a provider-neutral, bounded view of the generated project graph (Graphify graphify-out/graph.json is supported first) and places that CURRENT CODE evidence beside fast, correction-aware KLYPIX brain cards (decisions and rationale). KLYPIX never installs or runs Graphify and never copies graph nodes into brain.klypix. Missing graph artifacts degrade cleanly to brain-only context. Source-file anchors are accepted only when they stay inside the declared project root. Set deep_history:true only when superseded history is genuinely needed; the default never loads the local embedding model.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMaximum brain cards returned (default 8; fast mode caps 8, deep history caps 20).
depthNoRelationship hops around the best code matches (0-3, default 1).
projectNoAbsolute project root. Defaults to this MCP connection's configured project/vault.
questionYesQuestion or code concept to ground in both current structure and project memory.
max_nodesNoMaximum code nodes returned (default 60, capped 200).
compare_toNoOptional project-relative prior graph JSON path. Adds exact total deltas plus bounded query-neighborhood changes; it may not escape the project root.
graph_pathNoOptional project-relative graph JSON path. Defaults to graphify-out/graph.json and may not escape the project root.
deep_historyNofalse (default) uses the sub-second lexical-fast correction-aware path; true opts into whole-brain semantic/history retrieval, which may cold-load the local model.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and destructiveHint=false, so the read-only safety profile is covered. The description adds valuable non-obvious behavioral details beyond annotations: KLYPIX never installs or runs Graphify, never copies graph nodes into brain.klypix, degrade-to-brain-only fallback, project-root confinement, and that deep_history may cold-load a local model. A 5 would require more detail about output shape or failure modes; a 4 fits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but organized: purpose first, then key behaviors, fallback, constraints, and the deep_history caveat. Each sentence adds real value. It loses one point because some deep_history detail is repeated from the schema description, but overall it is efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 8 parameters, 100% schema coverage, annotations for idempotency/destructiveness, and no output schema, the description covers the critical missing context: what the combined context contains, source fallback behavior, project-root safety rules, model-loading performance trap, and graceful degradation. An agent has enough to invoke it correctly without surprises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already well-documented in the schema. The description reinforces deep_history's tradeoff and the root-escape restriction, but it does not need to add full param semantics because the schema carries that weight. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('queries') and a clear resource ('combined read-only context' from project graph plus KLYPIX brain cards). It distinguishes itself from the many brain/canvas siblings by describing its provider-neutral graph source and correction-aware brain cards. An agent can understand exactly what this tool returns and how it differs from related read tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance for deep_history ('only when superseded history is genuinely needed') and explains the default avoids loading the local embedding model. It also states boundary conditions: source-file anchors are accepted only inside the project root, and missing graph artifacts degrade cleanly to brain-only context. This is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_map_driftCheck brain cards against the repo's real files (drift report)A
Idempotent

Read-only drift check: every brain card that references THIS project's files is verified against the working tree. Reports cards whose referenced files are gone or moved (with rename candidates by unique basename), and headlines the checkout's own position against its origin default branch — reporting BOTH ahead and behind, so a DIVERGED checkout is named as diverged rather than merely behind. In either state a "missing" file may simply not be in this checkout. Slash-joined name enumerations and other-project paths are recognized and skipped, not reported as drift. Nothing is written; fix cards with a CORRECTION marker or by editing them in KLYPIX.

ParametersJSON Schema
NameRequiredDescriptionDefault
brainNoOptional brain filename/path inside the project. Defaults to brain.klypix / brain.any.
projectNoAbsolute project root. Defaults to this MCP connection's configured project/vault.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotent, non-destructive, not open-world), the description meaningfully expands behavioral transparency: it explicitly says 'Nothing is written,' explains that a 'missing' file may simply be absent from the current checkout, covers rename-candidate detection, and clarifies that slash-joined enumerations and other-project paths are skipped. This gives the agent nuanced expectations beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core 'Read-only drift check' intent. Every sentence carries useful behavioral information, but the writing is somewhat verbose, especially around the branch divergence explanation and the 'fix cards' note. It is well-structured for a complex tool but not maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description does a good job explaining what the tool reports: missing/moved files, rename candidates, and branch divergence status. It also covers edge cases like other-project paths and checkout-local absence. The main gap is the lack of explicit detail about the return format or how the report is delivered, but the description covers the essential context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter-level detail beyond what the schema already provides; it only restates the default behavior contextually. Since the schema already documents both optional parameters and their defaults, no additional compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Read-only drift check' and precisely defines the operation: verify brain card file references against the working tree and report missing/moved files plus branch divergence. This clearly identifies the tool's resource and purpose, and differentiates it from sibling tools like project_map_scan or brain_reconcile by focusing on drift detection rather than scanning or reasoning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description strongly implies when to use the tool—when you need to check whether brain card file references are still valid in the repo—but it does not explicitly state when not to use it or name alternative tools. Sibling context suggests related tools exist, but no direct comparison or exclusion is provided, so usage guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_map_scanScan the project natively - no-install file inventory + import mapA
Idempotent

KLYPIX's own zero-install scanner: walks the repo (gitignore-aware, junk dirs like browser profiles and build output excluded), extracts FILE-LEVEL import edges for the JS/TS family (relative, tsconfig-alias, and monorepo-workspace imports resolved), and writes klypix-map/graph.json inside the project — the only thing it ever writes. The artifact then serves project_map_context automatically when no Graphify artifact exists. It deliberately does not build a per-symbol AST graph; deeper external artifacts remain importable through the same door.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAbsolute project root. Defaults to this MCP connection's configured project/vault.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with annotations already marking idempotentHint=true and destructiveHint=false, the description adds concrete behavioral detail: it walks the repo gitignore-aware, excludes junk dirs, resolves import aliases/workspaces, writes exactly one file, and does not build a per-symbol AST graph. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences front-load the core behavior and each adds useful context (scan scope, output file, downstream usage, limitation). Minor brand language ('KLYPIX's own') and the somewhat vague 'through the same door' phrase keep it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema, the description covers the input, traversal behavior, exclusions, resolution rules, the write side effect, and the relationship to project_map_context and deeper artifacts. An agent has enough information to call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is already fully documented in the schema ('Absolute project root. Defaults to this MCP connection's configured project/vault'), and schema coverage is 100%, so the baseline is 3. The description doesn't add parameter-specific meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('scanner'), names the resource ('repo', 'JS/TS family'), and clearly states the output ('writes klypix-map/graph.json'). It also distinguishes itself from deeper AST-graph artifacts, so an agent can tell it apart from siblings like project_map_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the tool is the zero-install native scanner and explains that the artifact serves project_map_context automatically when no Graphify artifact exists. It also notes the tool deliberately avoids per-symbol AST graphs, implying an alternative for deeper analysis, though it does not explicitly name sibling tools or give when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_canvasRead a KLYPIX canvasA

Read a canvas as structured markdown (every card, the connection graph, [[wikilinks]], #tags) AND attach its image assets so you can SEE them, not just their filenames (capped: the first 8 images under ~5MB each — a bigger canvas returns the rest as filenames only). Pass the canvas TITLE directly (e.g. "SS2") — a filename, vault-relative path, or absolute path also work; you do NOT need to list or search first.

ParametersJSON Schema
NameRequiredDescriptionDefault
canvasYesCanvas title or filename (e.g. "SS2"), vault-relative path, or absolute path.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does so well. It discloses that image assets are attached up to a specific cap (first 8 images under ~5MB each), with larger canvases falling back to filenames, and that multiple input forms are accepted. This gives the agent a realistic expectation of the tool's behavior and limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense but well-organized: it front-loads what the tool does, then details the image cap, then gives the input guidance. Every clause contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description fully explains both the return content (structured markdown with cards, graph, wikilinks, tags) and the image-asset behavior. Nothing essential is missing for an agent to invoke and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter at 100%, describing title/filename/path options. The description adds meaningful nuance by saying the canvas TITLE can be passed directly and that listing/searching is unnecessary, which clarifies the intended calling pattern beyond the schema's raw parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Read'), a specific resource ('a KLYPIX canvas'), and precisely what the output contains (structured markdown with cards, connection graph, wikilinks, and tags). It also differentiates itself from sibling search/list tools by stating the caller does not need to list or search first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: pass the canvas title directly, and there's no need to list or search first. It does not explicitly name sibling alternatives for cases like finding a canvas by content, but the direct-input guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_all_brainsSearch every project brain on this machineA

Cross-project memory search: looks through every brain.klypix this machine has REGISTERED, not just the current vault. Ranking is lexical, blended with on-device semantic similarity ONLY when the optional local model is installed (a fresh npx klypix-mcp install is lexical) — it degrades cleanly, never errors. Use when the answer may live in ANOTHER project's decisions. Optional as_of (YYYY-MM-DD) answers "what was true then" — superseded cards count as live if they were current at that date. The registry is populated by Claude lifecycle and by brain_sync on any MCP host; a project that has never started through either path is absent from cross-project search.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoOptional YYYY-MM-DD: rank what was TRUE at that date (time-travel query).
queryYesWhat to find across all project brains.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses ranking is lexical, semantic only when an optional local model is installed, degrades cleanly without errors, explains time-travel semantics for as_of, and clarifies registry population.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient, with the core scope and usage front-loaded. It is one long sentence with many embedded caveats, but every clause conveys necessary constraint information and no filler exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers almost all critical call guidance: ranking, semantic fallback, error behavior, as_of semantics, and registry prerequisites. The only notable gap is the absence of any return-value or result-shape description, though no output schema exists to offset this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantic detail: it explains that as_of treats superseded cards as live if current at that date and clarifies the scope of query across all registered project brains. This goes beyond the schema's simple field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: cross-project memory search across every registered brain.klypix. It explicitly contrasts with the current vault and clearly differentiates from sibling search tools like search_canvases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear usage context: 'Use when the answer may live in ANOTHER project's decisions.' It also describes a key limitation (projects absent from the registry are unreachable), which helps avoid misuse. However, it does not name alternative sibling tools or give explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_canvasesSearch inside all canvasesA

Search card text, titles, and #tags across every canvas in the vault. Returns the canvases and the matching cards.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText or #tag to find inside canvases.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does state the scope ('every canvas in the vault') and the return behavior ('Returns the canvases and the matching cards'), which is useful. However, it does not disclose details like case sensitivity, exact tag syntax, whether archived or hidden canvases are included, or that the operation is purely read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is just two sentences with no filler. It front-loads the action and scope immediately, then gives the return value in the second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter search tool with no output schema, the description provides the essential information: what content is searched, the scope, and what is returned. It is complete enough to invoke correctly, though it could be improved by naming sibling alternatives explicitly or describing output structure in more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the only parameter, 'query', at 100% coverage, so the baseline is 3. The description adds some context by tying the query to card text, titles, and #tags, but it does not add examples, syntax details, or edge-case behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and a specific resource ('card text, titles, and #tags across every canvas in the vault'), and it states the return value. This makes it clearly distinguishable from sibling tools like list_canvases, read_canvas, and even search_all_brains, since it scopes to canvas content vault-wide.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: use this tool to find text or tags inside any canvas in the vault. However, the description does not explicitly say when to prefer this over search_all_brains or other sibling search tools, nor does it mention any exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 22 tool updatesv0.1.0
    • First observedadd_to_canvas
    • First observedbrain_ask
    • First observedbrain_challenge
    • First observedbrain_connect
    • First observedbrain_doctor
    • First observedbrain_garden
    • First observedbrain_insights
    • First observedbrain_lens
    • First observedbrain_message
    • First observedbrain_message_receipt
    • First observedbrain_note
    • First observedbrain_reconcile
    • First observedbrain_sync
    • First observedcanvas_view
    • First observedcreate_canvas
    • First observedlist_canvases
    • First observedproject_map_context
    • First observedproject_map_drift
    • First observedproject_map_scan
    • First observedread_canvas
    • First observedsearch_all_brains
    • First observedsearch_canvases

TDQS

A3.8/5.0

Scored across 22 tools

Disambiguation3/5

Several tools have overlapping surface area: read_canvas vs canvas_view both read canvas content, search_canvases vs brain_ask vs search_all_brains all search text, and brain_insights vs brain_lens both analyze brain structure. The extremely detailed descriptions help an agent differentiate, but there are multiple pairs where the wrong tool could easily be selected without careful reading.

Naming Consistency3/5

Three clear domain prefixes (canvas*, brain_*, project_map_*) make the grouping predictable, but conventions within groups are mixed. Canvas tools mostly follow verb_noun (read_canvas, create_canvas) yet canvas_view inverts it, and brain_* mixes verbs (brain_ask, brain_connect, brain_sync) with nouns (brain_insights, brain_lens, brain_note). The system is readable but not uniform.

Tool Count3/5

At 22 tools this sits in the heavy 16-25 range per the calibration. The broad scope (canvas management, brain lifecycle, project mapping, agent coordination) partially justifies the count, and most tools have a distinct job, but it is a large surface for an agent to navigate and many tools are variations on reading the same underlying brain data.

Completeness3/5

The brain lifecycle is well covered: capture (brain_note), query (brain_ask), structural analysis (brain_insights), linking (brain_connect), truth maintenance (brain_reconcile), consolidation (brain_garden), and diagnostics (brain_doctor). However, the canvas side is append-only — there is no update or delete tool for canvas content, so an agent cannot remove a wrong card or edit existing card text outside the brain. Project map and messaging surfaces are adequately served.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to read, write, and search local tldraw (.tldr) files, providing a persistent visual scratchpad for diagramming and note organization. It supports full CRUD operations on canvas shapes and metadata management for local canvas files.
    13
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides AI agents with persistent knowledge storage, enabling them to store, search, and retrieve text, documents, and files using semantic and keyword search via MCP tools.
    32
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dahshanlabs/klypix-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server