Codevira MCP
The Codevira MCP server provides a persistent, local-first memory layer for AI coding agents, enabling cross-tool decision sharing, enforcement, and contextual understanding of a codebase.
Decision Management
Record, search, list, expand, supersede, mark outdated, reaffirm, and conflict-check architectural decisions
Optional
do_not_revertlock prevents AI agents from undoing critical decisionsToggle flags/tags, browse per-file history, and list all tags with counts
Session Context & Roadmap
get_session_contextdelivers a ~500-token catch-up (phase, decisions, preferences, rules) for cross-tool continuityAdd, update, complete, defer, and bulk-import project phases; log structured session records and next actions
Code Graph & Navigation
Query function-level callers, callees, tests, dependents, and symbols
Get file metadata, blast radius impact, file skeletons (signatures/docstrings), and individual symbol source
Retrieve curated architectural playbooks for task types (e.g.,
add_tool,commit,debug_pipeline)
Working Memory
Intra-session decay-scored scratchpad for observations and goals (
working_add,working_get,working_promote)Promote scratchpad entries to long-term decisions when warranted
Skill Library
Record, search, version, and supersede reusable procedural skills with BM25 + tag + recency ranking
Track outcomes to reinforce or auto-archive skills; promote skills to permanent playbooks
Spatial / Code-as-Space
Find topologically nearby files, activity heatmaps, folder-tree neighborhoods, and per-file task affordances
Cross-IDE Consensus & Provenance
Detect cross-IDE conflicts, propose and resolve supersession handshakes, and look up the origin IDE of any decision
Preferences & Reflections
Distill user prompts into durable cross-project preferences (communication, workflow, formatting)
Generate and retrieve LLM-powered reflections over recent decisions and sessions
Enforcement
In Claude Code, PreToolUse hooks hard-block edits violating locked decisions, anti-regression rules, or high-fan-in file constraints; other IDEs receive advisory context via AGENTS.md
Local-first Design
Operates entirely locally with no cloud or ML dependencies, using
jsonlfiles and SQLite for storage
Integrates with Git to bootstrap project roadmaps from commit history and uses post-commit hooks to automatically trigger reindexing of the codebase.
Provides Google Antigravity agents with access to a persistent context graph and roadmap, ensuring continuity and reducing token overhead in coding tasks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Codevira MCPShow me the current project roadmap and any pending changesets."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Codevira is a local-first MCP server (Model Context Protocol) that gives every AI coding agent on your machine one shared, in-repo memory of the decisions you've made and why. What one tool learns, all of them know — and a decision you lock, none of them can silently undo: codevira refuses the edit in Claude Code and the commit in any editor.
pipx install codevira # ~66 MB pipx venv, no ML deps, no vectors
cd ~/Projects/my-project
codevira init # opt this project in
codevira setup # wire it into the AI tools on this machineWhat it is | A local MCP server that stores your project's decisions together with the reasoning behind them, in your repo. |
What's different | It doesn't just remember — mark a decision |
Who it's for | Anyone running two or more AI coding tools on the same repo. |
Default scope | Per-machine — memory is not git-tracked. |
Cost | MIT · local-first · no cloud · no account · no vectors · nothing phones home. |
Why Codevira
AI agents write a large share of your code now. They're fast and capable, but each one is stateless across sessions and blind to the others — so you quietly became the memory.
The pain | What Codevira does |
Re-explaining your codebase every session — ten minutes and thousands of tokens, then again tomorrow | Every tool opens with the project's decisions already loaded |
An agent "simplifies" a fix it never knew the reason for — three hours of debugging, undone | A locked decision is refused at the edit (Claude Code) and at the commit (any editor), with the original reasoning attached |
Cross-tool amnesia — plan in Claude Code, code in Cursor, nothing carries over | One in-repo memory every MCP client reads |
Token budget burned on re-discovery — the same dozen files re-read every session | Summary-first recall of only what's relevant |
The root cause under all four: your decisions live in your head, not anywhere the AI can be held to them.
Codevira is not a knowledge base. A knowledge base answers "what is true?" and hopes the agent reads it. Codevira answers "what did we decide, and why?" — then blocks the edit that would break it.
Related MCP server: Tages
See it in action: record, block, recall
1. You (or the AI) record a decision — one MCP call, ~50 tokens.
record_decision(
decision="Use bcrypt for password hashing",
context="md5 considered and rejected — rainbow-table risk. Re-examine only if NIST guidance changes.",
tags=["auth", "security"],
do_not_revert=true,
)
→ D000412 recorded and locked.It lands in <repo>/.codevira/decisions.jsonl — plain text, human-readable, and diffable (and
git-tracked as soon as you run codevira init --shared). Codevira regenerates a slim AGENTS.md
contract from it — that file is always committed.
2. Weeks later, a fresh Claude Code session tries to swap bcrypt for md5.
The Edit goes through Claude Code's PreToolUse hook first. Because the diff touches the
locked decision's subject, the hook denies the tool call and hands the agent the original
reasoning:
✗ Edit blocked — decision_lock (do_not_revert)
D000412: "Use bcrypt for password hashing"
context: md5 rejected — rainbow-table risk.
The file was not modified. Surface this to the human and re-decide deliberately.The regression never reaches disk. An orthogonal edit to the same file — one whose diff doesn't touch the decision's subject — is allowed through and downgraded to a warn. Precision, not paranoia.
3. You switch to Cursor the next morning — and it already knows.
You never re-explained anything. Cursor reads the same repo AGENTS.md and, over MCP, can call
search_decisions("auth") — D000412 comes back with its full context. A decision recorded in
one tool is visible to every tool.
Where the block is physical. Edit-time in Claude Code; commit-time in every editor via
codevira engine install-git-hook— because they all commit with git. Overrides, kill-switches and the precise boundary: Enforcement engine (expand).
What you get
What it means | |
One memory, every AI tool | A decision logged in Claude Code is visible to Cursor, Antigravity, Codex, Copilot — all read the same |
Enforcement, not notes |
|
One-command setup |
|
Local-first, no ML | Decision search is pure keyword/BM25 over SQLite FTS5 — no vectors, no ChromaDB, no sentence-transformers, no torch, nothing phones home. ~1–2 MB of memory per project. |
Frugal by design | Tools return summaries by default; |
Concurrent-safe | Every write is a crash-safe atomic write behind a Posix |
Latest: 4.2.0. Upgrade if you use codevira in more than one project: a stray registration at $HOME could make register-all discover exactly one project and discard every real one as “nested” (measured on a real machine: 1 found, 11 excluded). 4.2.0 also stops background work writing false entries to the crash log — 39 of 45 entries on that machine were one harmless line — and adds codevira reconcile to report duplicate and contradicting decisions. Upgrading is automatic, but a registration that was already wrong is not repaired for you: run codevira register-all once after upgrading to recover projects that went missing. Full release notes →
Quick Start
# 1. Install (production install: ~66 MB pipx venv, no ML deps)
pipx install codevira
# 2. Opt this project in (writes .codevira/, AGENTS.md, .gitignore)
cd ~/Projects/my-project
codevira init
# 3. Wire codevira into every AI tool detected on this machine
codevira setup
# 4. Install the universal commit-time backstop (enforces do_not_revert in ANY editor)
codevira engine install-git-hookStep 4 is what makes enforcement universal. codevira init installs only a post-commit
reindex hook; the enforcing pre-commit hook is this separate, explicit opt-in.
Open any IDE — codevira's MCP server is ready. Then, in your AI tool, ask:
"Use get_session_context to brief me on this project." You get a ~500-token structured
project state in one tool call instead of the AI re-reading docs.
Verify the install:
codevira doctor # health checks: ✓/⚠/✗ + a fix command for each
codevira replay # browse the decisions timeline
codevira sync # regenerate AGENTS.md from current decisions.jsonlTeam sharing. By default codevira keeps decision memory per-machine (not committed), so
unrelated projects never bleed into each other; AGENTS.md and .gitignore are still committed.
To share memory with teammates on the same GitHub repo, run codevira init --shared — it keeps
.codevira/ git-tracked, and a built-in git merge driver reconciles concurrent edits.
Opt-in tracking.
codevira initis the explicit opt-in. Codevira tracks only projects you'veinit-ed; a project you merely open stays inert (its tools return a "runcodevira init" hint and nothing is written), so~/.codevira/projects/never fills with projects you didn't choose. SetCODEVIRA_AUTO_ADOPT=1to track every project you open instead.
How it works
A local MCP server. Decisions live in <repo>/.codevira/*.jsonl — plain text, human-readable,
diffable, and git-tracked once you opt in with init --shared. A slim AGENTS.md is generated
from them for every IDE to read, and Claude Code lifecycle hooks — plus the opt-in git
pre-commit hook — enforce the ones you locked.
codevira init scaffolds everything above except roadmap.yaml and skills.jsonl, which are
written on first use. Deeper detail: docs/architecture.md.
Built to be trusted
Codevira holds a team's architectural decisions and can refuse your AI's edits. Every guarantee below is checked by the build, not asserted in this file.
Test suite | 3,499 tests across 165 test files. More test code than product code (60,960 vs 46,782 lines). |
CI | Every push to |
"Local-first" is enforced, not promised |
|
Adversarial testing |
|
No destructive MCP tools | Every MCP tool carries |
Reversible memory | After a default |
What's solid, what's not
Production-stable | Known-limited |
Cross-IDE decision memory via in-repo JSONL | Hard |
| Graph tools cover Python / TS / JS / Go / Rust; other languages → the AI |
FTS5/BM25 decision search | Real-time multi-machine sync — by design local-first; for team sharing, run |
Per-project + cross-machine project inventory ( | No web UI — use the |
36 MCP tools advertised in | The HTTP server ( |
Concurrent-safe storage (Posix | Windows sentinel fallback is verified in unit tests but not yet load-tested on real Windows |
Anti-Regression on small | Anti-Regression does not yet detect full-file |
Reference
Everything below is depth for when you need it. Each section is collapsed — open the one you came for. Browser find-in-page does not search inside a closed section, so expand before Ctrl+F. What's in them:
CLI init setup doctor status projects untrack index sync repair-ids observe-git
replay search graph memory export import engine prune reset uninstall serve
working induce-skills eval register-all merge-driver
Env CODEVIRA_ENGINE CODEVIRA_TOOL_PROFILE CODEVIRA_DECISION_LOCK_MODE
CODEVIRA_ANTI_REGRESSION_MODE CODEVIRA_BLAST_RADIUS_MODE CODEVIRA_GIT_HOOK_MODE
CODEVIRA_DECISION_LOCK_CONTENT_AWARE CODEVIRA_SESSION_LOG_ENFORCER_MODE
CODEVIRA_AUTO_ADOPT CODEVIRA_IDEMCP tool surface
36 tools are advertised to AI clients via tools/list (37 are defined — a 37th,
refresh_graph, is registered but hidden; humans invoke it via codevira sync). Every tool
carries MCP ToolAnnotations (readOnlyHint / destructiveHint=false / idempotentHint): most
are read-only and can run without a confirmation prompt, and no MCP tool is destructive — the
only destructive ops (reset / uninstall) are CLI-only, never exposed over MCP. Good to know
for anyone wiring codevira into an autonomous agent.
The lean 12 (CODEVIRA_TOOL_PROFILE=lean) are the ones you keep — set that in the MCP
server's env block to cut tools/list from 36 tools to 12, roughly a two-thirds smaller
payload (~8.9K → ~3.5K tokens of fixed per-session cost). Hidden tools still work when called
explicitly.
get_session_context · get_impact · get_node · get_roadmap · search_decisions
list_decisions · expand · record_decision · update_phase_status
complete_phase · update_next_action · write_session_logReads — the memory surface
Tool | Description |
| THE "catch me up" call. ~500 tokens: current phase, next action, recent decisions, top tags, last session brief. |
| FTS5/BM25 over |
| Fetch full records for just the ids you care about — the summary-first complement to |
| Paginate / filter: |
| All tags with decision counts. |
| Recent decisions touching a file. |
| Surface duplicate / contradictory decisions BEFORE you write. |
Writes — capturing decisions
Tool | Description |
| Capture a decision. |
| Retire an old decision, link to its replacement, keep the audit trail. |
| Retire a decision that's simply no longer true (no successor) so it stops surfacing. Reversible via |
| Re-confirm a soft-expired |
| Toggle |
| Structured session record. |
Roadmap — get_roadmap · get_phase · add_phase · update_phase_status ·
update_next_action · complete_phase · defer_phase · bulk_import_phases.
Code graph — get_node (file metadata) · get_impact (blast radius) · query_graph
(function-level callers/callees/tests/dependents/symbols) · get_playbook (curated rules for
add_tool / add_service / add_schema / debug_pipeline / commit / write_test). Plus the
hidden refresh_graph.
Memory subsystems
Subsystem | Tools | What it covers |
Working memory (4) |
| Intra-session scratchpad, decay-scored ( |
Skill library (6) |
| Reusable procedures; FTS5 composite ranking (BM25 + tag-Jaccard + recency); auto-archive at 5 consecutive failures or 90 unused days ( |
Provenance (1) |
| Which IDE, which machine, when — what attributes an amendment across a two-host merge. ( |
Workflow prompt — onboard_session: full project catch-up for new sessions; wraps
get_session_context().
Removed in 4.0 (52 tools → 37 defined; 36 advertised). Cut on measured usage across 4,203
transcripts, not taste — the data they wrote is untouched, and codevira export still includes
everything. See MIGRATING.md.
Removed | Instead |
|
|
| — |
|
|
| the |
| read the file — both measured zero calls in 2.5 months |
Enforcement engine
Codevira ships 7 default engine policies ("heroes"), each hooked to Claude Code lifecycle
events: SessionStart, PreToolUse, PostToolUse, UserPromptSubmit, Stop.
Policy | Event | What it does |
Decision Lock | PreToolUse | Blocks an edit that touches a |
Anti-Regression | PreToolUse | Blocks edits that look like reverts of previously-fixed bugs. Fix-history is scanned from |
Blast-Radius Veto | PreToolUse | Blocks a signature-removing/modifying edit to a high-fan-in file (purely-additive signatures pass). Shows the callers. |
Relevance Inject | UserPromptSubmit | Injects ≤3 relevant decisions per prompt; 0 tokens when off-topic. |
Session-Log Enforcer | SessionStart + Stop | Blocks (or, in |
Post-Edit Graph Refresh | PostToolUse | Reindexes edited files in the background. |
Token Budget / telemetry | Stop | Records outcome telemetry. |
How verdicts combine. The three edit guards compose into a single verdict — first block wins by priority (Decision Lock 100 > Anti-Regression 80 > Blast-Radius 50). The highest-priority block's message is what you see; the rest are recorded as telemetry.
Fail-open and opt-in. The dispatcher never raises: each policy is wrapped in try/except and
returns allow on failure. CODEVIRA_ENGINE=0 disables all policies; each edit guard also has a
per-policy off|warn|block env override (CODEVIRA_DECISION_LOCK_MODE,
CODEVIRA_ANTI_REGRESSION_MODE, CODEVIRA_BLAST_RADIUS_MODE). Enforcement is not global
across all Claude Code projects — in any project you never ran codevira init on, the hooks stay
fully inert.
The universal backstop (4.0). codevira engine install-git-hook installs a pre-commit hook
that runs locked decisions against staged changes through the same engine — so a do_not_revert
decision is enforced in any editor, because they all commit with git. git commit --no-verify
overrides a single commit; CODEVIRA_GIT_HOOK_MODE=warn (or off) changes it globally; merge
commits are never blocked.
Why edit-time blocking is Claude Code only. The hard-block path is Claude Code's real
PreToolUse hook. Edits from Cursor / Codex / Copilot go straight to the filesystem — they never
reach codevira's PreToolUse engine — so those IDEs get decisions as advisory AGENTS.md
context, with the git pre-commit hook as the universal backstop. Verified: Claude Code returns
permissionDecision: deny (exit 2) with the decision's reasoning, rejected alternatives and
re-examination trigger attached; the git hook refuses the commit with the same reasoning. Other
IDEs are supported but verified one at a time rather than inferred.
CLI commands
26 subcommands. Two are internal (merge-driver, invoked by git's merge driver, and
register-all, a setup helper); three more are advanced (working, induce-skills, eval).
The daily-use ones are below — run codevira <cmd> --help for full flags:
Command | What it does |
| Opt this project in: |
| Detect installed AI tools + write MCP configs + Claude Code hooks |
| Health checks (read-only; ✓/⚠/✗ + a fix command each) |
| Index health + project state |
| List tracked projects with staleness; |
| Remove one stray or temporary project entry |
| Build / refresh the code-graph cache |
| Regenerate AGENTS.md + manifest + digest from |
| Detect/repair cross-engineer decision-id collisions ( |
| Classify past decisions as kept/modified/reverted from git history |
| Browse the decisions timeline (terminal / markdown / HTML) |
| Search decisions from the terminal (FTS5/BM25); |
| Render an interactive, offline HTML viewer of decision memory |
|
|
| Back up / restore project memory + global learning across machines |
|
|
| Remove orphaned project dirs, dead |
| Destructive cleanup of this project's memory (auto-exports first; requires a typed confirmation) |
| Reverse every system write codevira made — |
| Removed in 4.0.1 — it was a full uninstall mis-named as tidy-up, and its old description destroyed a real install. It now errors |
| Start the single-project MCP HTTP server (stdio is the daily mode) |
To fully remove codevira: run the uninstall command above, then pipx uninstall codevira.
Language support
Feature | Python | TS/JS | Go | Rust | Others |
Decision capture + search | ✓ | ✓ | ✓ | ✓ | ✓ |
Cross-IDE memory via AGENTS.md | ✓ | ✓ | ✓ | ✓ | ✓ |
Roadmap / sessions | ✓ | ✓ | ✓ | ✓ | ✓ |
Code graph + blast radius | ✓ | ✓ | ✓ | ✓ | — |
Symbol-level | ✓ | ✓ | ✓ | ✓ | — |
Decisions / AGENTS.md / roadmap are language-agnostic — they work for any language.
Code-graph and symbol tools cover exactly Python (stdlib ast) plus TS / TSX / JS / JSX / Go
/ Rust (bundled tree-sitter grammars). For any other language the AI Reads the file directly.
The legacy 17-grammar [all-languages] pack was removed in v2.2.0 to keep the install lean.
Concurrency & safety
Every on-disk write goes through mcp_server/storage/atomic.py: a crash-safe atomic write
(mkstemp + fsync + os.replace) behind a Posix fcntl.flock (with an in-process
threading.Lock first, and a Windows O_EXCL sentinel fallback). Appends to the JSONL logs are
line-atomic — concurrent appenders never interleave bytes. Result: two IDEs hitting the same
project don't race on manifest.yaml / roadmap.yaml / AGENTS.md.
This is exercised by a 50-operation stress over a 10-thread pool, a 20-subprocess cross-process
stress (spawn), and an adversarial chaos harness (scripts/chaos_smoke.py
— 8 scenarios including SIGKILL during a held lock, symlink traversal, malformed MCP payloads,
corrupt-JSONL graceful degradation, and read-only-directory hostility). See
docs/architecture.md § "Concurrent-write safety".
Upgrading & troubleshooting
Upgrading is automatic — codevira migrates your memory on the first server start after an
upgrade, and your existing decisions stay put. (After a pipx upgrade codevira, restart your IDE
so its MCP server reloads the new binary.)
One exception, if you are coming from 4.1.0 or earlier. A bug could register $HOME itself as
a project, and every genuine project below it was then discarded as a "nested sub-store". 4.2.0
stops that happening, but it does not repair a registration that is already wrong — nothing
prunes the bad row on upgrade. If projects went missing from an IDE, run this once:
codevira register-all --dry-run # read-only; shows what IS registeredIf that prints one project at your home directory with your real ones listed as excluded nested, that is this bug. Before clearing it, look at what would be removed:
codevira untrack --dry-run "$HOME" # read-only; lists IDE entries AND the data dirRead that output. untrack deletes the project's data directory, not just the registry
entry. If you were bound to $HOME by mistake, any decisions recorded during that time live in
that directory and will go with it. If the dry-run lists a data dir you might want, copy it
aside first (cp -R the path it names). Your other projects each have their own directory and
are not affected.
Then clear and re-register:
codevira untrack -y "$HOME"
codevira register-allRestart the IDE afterwards.
(codevira doctor will not catch this one: its checks cover the current binding and whether
global.db opens, not what is registered inside it.)
If an IDE then shows the wrong project, doesn't show codevira at all, or memory looks missing,
it's almost always a stale IDE-config entry rather than lost data. Two fixes cover most cases:
remove a stray or temporary entry with codevira untrack <path> (or sweep dead ones with
codevira prune --ghosts), then run codevira doctor — it names the bound project and ships the
exact fix for each ⚠/✗.
Full guides: IDE config hygiene · Antigravity · FAQ
Frequently asked
How do I give Claude Code persistent memory across sessions?
Install codevira and run codevira init in the project. Every new session starts with
get_session_context() — a ~500-token brief of the project's decisions, current phase and next
action — instead of you re-explaining the codebase.
Does this work with Cursor and Antigravity, or only Claude Code?
Memory works everywhere: every tool reads the same in-repo .codevira/decisions.jsonl and the
generated AGENTS.md. codevira setup writes MCP server config automatically for the tools that
support it (Claude Code, Claude Desktop, Cursor, Antigravity); Codex, Copilot and other agents are
covered by the generated AGENTS.md. Hard edit-time blocking is Claude Code only — every other
editor is covered at the commit boundary by codevira engine install-git-hook.
How is this different from a hand-written CLAUDE.md or AGENTS.md?
Those are static text you maintain by hand. Codevira generates AGENTS.md from a queryable
decision log, keeps the reasoning attached to each decision, and blocks the edit that would
break a locked one.
Does it use vectors or embeddings?
No. Decision search is SQLite FTS5/BM25 keyword search — no ChromaDB, no sentence-transformers,
no torch. An AST scan in CI fails the build if any module but egress.py imports a network
client.
Is my code or my memory sent anywhere?
No. Everything lives in <repo>/.codevira/ and ~/.codevira/ on your machine. MIT-licensed, no
account, no API key, no cloud.
What does it cost in tokens?
Tools return summaries by default, get_session_context() is one ~500-token call, and the
lean-12 tool profile cuts tools/list from 36 tools to 12 (~8.9K → ~3.5K tokens per session).
Longer answers: FAQ.md.
How Codevira compares
Most memory tools for AI agents retrieve. Codevira also enforces, and it is per-project across many tools rather than per-session inside one. If you need cross-machine cloud memory, a temporal knowledge graph at enterprise scale, or the top LongMemEval score, other tools are the better pick — that comparison is written out honestly, including where codevira loses: Codevira vs other AI memory tools (Mem0, claude-mem, Zep, MemPalace and others).
Deeper reading: Architecture · Wire protocol · How we dogfood it · Roadmap · Changelog · Migrating to 4.0 · How I built persistent memory for AI coding agents
Contributing
Contributions are genuinely welcome, and the backlog is open — see CONTRIBUTING.md for the dev setup and PR checklist.
Start here before your first PR. One caveat it makes loud: 82% of codevira's internal imports sit inside function bodies, so a static import graph draws this codebase as disconnected leaves — the arrows below are runtime call edges. The diagram also marks the boundaries that don't hold, rather than pretending the layering is clean.
Good places to start:
Run it in an IDE you use and report what happened. That's how the support matrix grows.
Windows. The sentinel-lock fallback is unit-tested but never load-tested on real hardware.
Docs. Anything wrong or slow to find in this README or the FAQ is a bug — file it.
Channels:
Bug? Open a bug report
Feature or idea? Open a feature request
Security issue? Read SECURITY.md — please don't use public issues for vulnerabilities.
Conduct: CODE_OF_CONDUCT.md
If Codevira saves you tokens or sanity, a ⭐ helps other developers find it.
License
MIT — free to use, modify, and distribute. See LICENSE.
Available Tools
36 toolsadd_phaseA
Add a new upcoming phase to the roadmap. Call when you identify new work during a session — gaps, refactors, follow-ups. High-priority phases are inserted at the front of the queue.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short phase name | |
| files | No | Key files that will be touched | |
| phase | Yes | Phase number or label | |
| effort | No | Rough estimate e.g. '~2 hours' | |
| priority | No | high | medium | low | medium |
| depends_on | No | ||
| description | Yes | What this phase does and why |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only show non-readonly and non-destructive. The description adds that it inserts phases, with high-priority at the front, implying additive behavior. More behavioral context than annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters and no output schema, description is brief. It explains insertion but not effects on existing phases, dependencies, or return value. Adequate but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%), so baseline 3. Description only adds meaning for 'priority' by noting insertion ordering; other params rely on schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a new upcoming phase to the roadmap' with a specific verb and resource, and distinguishes from siblings like 'bulk_import_phases' by targeting single-phase addition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call: 'when you identify new work during a session — gaps, refactors, follow-ups'. Also notes insertion ordering for high-priority phases, but does not exclude when not to use it (e.g., vs bulk import).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_skill_outcomeA
v3.1.0 M3: Manually record one outcome for a skill — success or failure. Reinforces the reinforcement loop (resets consecutive_failures on success; auto-archives at 5 consecutive failures unless do_not_revert=True). The canonical signal in M5+ comes from outcomes_writer.py (git-derived, not agent-self-reported); this tool is the manual override.
| Name | Required | Description | Default |
|---|---|---|---|
| success | Yes | ||
| skill_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it mentions the reinforcement loop and auto-archive behavior. However, it references a parameter (do_not_revert) that is not present in the input schema, which is misleading. No mention of return value or side effects. Annotations only provide readOnlyHint and destructiveHint, so description adds some value but has a significant inconsistency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences) and front-loaded with the main purpose. It efficiently conveys key behavioral points. Minor improvement could be structuring parameter details, but overall it is well-sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple mutation (2 parameters, no output schema), the description lacks details on return behavior and confirmation. It hints at state changes (resetting counters, archiving) but does not fully specify the effects. The missing do_not_revert parameter further reduces completeness. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning of the two parameters (skill_id and success). It implicitly references them but provides no details on expected format, values, or behavior. With only 2 parameters and no schema descriptions, this is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: manually recording a skill outcome (success/failure). It specifies the verb 'record' and resource 'outcome for a skill', and distinguishes itself from sibling tools by noting it is a manual override to the automatic git-derived outcomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: as a manual override for the automatic outcome signal. It describes the reinforcement loop behavior (resetting consecutive_failures, auto-archiving at 5 failures) which helps the agent decide context. However, it does not explicitly exclude when not to use or compare with alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_import_phasesA
v2.1.2 Item 29: backfill multiple historical phases at once. Each item: {number, name, status?='done', completed_at?, key_decisions?, git_ref?, description?}. Idempotent. Useful for adopting codevira on a project that already shipped N phases in git.
| Name | Required | Description | Default |
|---|---|---|---|
| phases | Yes | List of phase dicts to import |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses idempotency and the default value of 'status?='done'', adding to annotations (readOnlyHint=false, destructiveHint=false). It also specifies optional fields and a common use case, going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. The first sentence gives the main purpose, the second outlines the item structure, and the third adds idempotency and usage context. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (array of nested objects) and no output schema, the description covers all necessary aspects: input structure, idempotency, and real-world usage scenario. It is sufficient for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description enriches the schema by detailing the structure of each phase item (number, name, status with default, optional fields), which is not present in the schema's minimal description. Schema coverage is 100%, but the description adds significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('backfill multiple historical phases at once'), identifies the resource ('phases'), and distinguishes from sibling tools like 'add_phase' which likely handles single phase addition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: 'useful for adopting codevira on a project that already shipped N phases in git.' It implicitly excludes normal phase addition, but lacks an explicit 'when not to use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_conflictARead-onlyIdempotent
Check whether a proposed decision contradicts any do_not_revert=True decision OR duplicates an existing one. A NEGATED restatement is always a conflict, never a duplicate: 'never do X' and 'do X' differ by one token and score as near-identical text, so they are separated explicitly. Returns {status: novel|duplicate|conflict, conflicts, duplicates}. Call BEFORE record_decision to surface conflicts proactively (record_decision also runs this internally and surfaces _conflict_warning unless force=true).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Optional — prefer hits on the same file | |
| decision_text | Yes | The decision text you'd pass to record_decision |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds substantial behavioral nuance beyond that: the handling of negated restatements as conflicts rather than duplicates, the exact return status vocabulary, and the internal call from record_decision. This is exactly the kind of non-obvious logic an agent needs to predict tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: first the core purpose, then the critical negated-restatement nuance, then the return shape, then the call-timing guidance. There is no filler or redundancy, and the most important operational detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent check tool with no output schema, the description is complete: it names the input concept, the return envelope, the edge-case behavior, and the relationship to record_decision. An agent has everything it needs to invoke the tool correctly and interpret the result at a practical level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 decision_text and file_path, including file_path's preference for same-file hits. The description reinforces the meaning of decision_text by calling it a 'proposed decision' and relating it to record_decision, but it does not add new parameter-level detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: checking whether a proposed decision contradicts or duplicates existing decisions. It also names the concrete behavioral rule for negated restatements, which sharply distinguishes this from sibling tools like record_decision. The return statuses are listed, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this BEFORE record_decision, and even explains that record_decision internally runs the same check and surfaces _conflict_warning unless force=true. This gives the agent a clear procedural rule and a direct comparison to the alternative, so there is no guessing about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_phaseA
Mark the current phase as complete and advance to the next upcoming phase. Records key_decisions permanently. Requires phase_number to match current phase (safety check). v2.1.2 Item 10: pass backfill=True + completed_at='YYYY-MM-DD' to retroactively mark a historical phase done without advancing the queue. v2.1.2 Item 12: pass git_ref to link a commit sha or PR ref to the completion.
| Name | Required | Description | Default |
|---|---|---|---|
| git_ref | No | v2.1.2: optional commit sha / PR ref the phase shipped at | |
| backfill | No | v2.1.2: allow marking any phase done without advancing the queue | |
| completed_at | No | v2.1.2: ISO date for backfill (defaults to today) | |
| phase_number | Yes | Must match current phase (unless backfill=True) | |
| key_decisions | Yes | Decisions made — preserved for all future agents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds that key_decisions are recorded permanently and that backfill does not advance the queue, which clarifies write behavior and the safety check. It does not contradict annotations and provides useful context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences plus two bullet-like items) and front-loaded with the core action. Every sentence adds value: main action, safety requirement, special cases for backfill and git_ref. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple modes, safety check) and lack of output schema, the description adequately covers the main use cases and parameters. However, it does not explain side effects on other system state (e.g., phase status transitions) beyond advancing the queue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining the purpose of phase_number as a safety check, the backfill workflow (with required parameters), and the git_ref linking. This frames parameters in a functional context beyond their schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's main action: 'Mark the current phase as complete and advance to the next upcoming phase.' It also mentions recording key decisions permanently and includes a safety check. This clearly distinguishes it from siblings like add_phase (creation) or defer_phase (postponement).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides specific usage guidance: normal use requires phase_number to match the current phase, and it offers two alternative use cases (backfill for historical phases and linking git_ref). While it does not explicitly state when not to use, the clarity of the normal mode and backfill alternative implies appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
defer_phaseA
Move an upcoming phase to the deferred list. Use when priorities shift or a phase depends on unavailable work.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this is being deferred | |
| phase_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not elaborate on behavioral traits like what exactly happens to the phase, whether it is removed from the original list, or any side effects. The description adds minimal value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first states the action, second provides usage guidance. Every word earns its place, and it is front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool with no output schema, the description covers the action and usage adequately. However, missing parameter details and return value make it slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'reason' has a description). The tool description does not add any parameter details; for example, 'phase_number' lacks any explanation. The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Move' and specifies the resource 'upcoming phase to the deferred list', clearly distinguishing it from siblings like complete_phase or add_phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use when priorities shift or a phase depends on unavailable work.' It does not mention when not to use or alternative tools, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expandARead-onlyIdempotent
E1 (Phase 19): fetch FULL decision records by ID — the expand path for the summary-first search_decisions / list_decisions defaults. Scan the cheap compact rows, then pass the IDs you care about here for complete text + context + origin. Returns {requested, count, decisions, not_found}; never raises on unknown IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Decision IDs to fetch in full (e.g. ['D0000Z4']). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds 'never raises on unknown IDs' and return structure, exceeding annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, strong annotations, and description detailing return structure, no missing critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% with clear parameter description. Description adds minimal extra ('pass the IDs you care about'). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'fetch', resource 'FULL decision records', and context 'expand path for summary-first search'. It distinguishes from sibling tools like list_decisions and search_decimals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use after scanning compact rows via search_decisions/list_decisions defaults. Implies workflow but does not list alternatives for when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historyARead-onlyIdempotent
Get recent decisions touching a file. Default: 5 with truncated context (~500 tokens). Pass full=true for untruncated text. Ordered by most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Untruncated decision text (default false) | |
| limit | No | Max decisions (default 5, max 50) | |
| file_path | Yes | Relative file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. Description adds behavioral details: default truncation (~500 tokens), ordering by most recent first, and option for untruncated text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences. First sentence states purpose and defaults. Second explains the full option and ordering. No waste, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Handles all requirements for a read-only history tool. No output schema, but description covers inputs and behavior. Slightly lacking in describing return format, but inferred.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 params with descriptions (100% coverage). Description adds value beyond schema: clarifies default limit (5) and truncation behavior (~500 tokens) for the full parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource+scope: 'Get recent decisions touching a file.' Distinguishes from siblings like list_decisions and search_decisions by specifying file-specific history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides defaults (5 decisions, truncated context) and optional parameters (full=true, limit). Implicitly guides use for file-specific history, but lacks explicit alternatives or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_impactARead-onlyIdempotent
Get the blast radius for a file before modifying it. Default: returns up to 10 affected files + counts (~400 tokens). Pass summary_only=true for just counts (blast_radius, protected_count, high_stability_count) — ~80 tokens, perfect for gate checks. ALWAYS call before modifying any file.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max affected files to return (default 10, max 100) | |
| file_path | Yes | File you are about to modify | |
| summary_only | No | Return only counts, not the file list (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only, idempotent, non-destructive behavior. The description adds context on default output (10 files + counts, ~400 tokens) and the summary_only option (~80 tokens), which is beyond annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with main purpose. Every sentence adds value: purpose, output details, and a directive. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains return values (files and counts, or summary counts). It covers default behavior, token sizes, and a use case. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions. The description adds meaning by linking default behavior to the 'limit' parameter (default 10) and explaining 'summary_only' in practical terms. Slight improvement over schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get' and resource 'blast radius for a file', distinguishing it from sibling tools like get_node or get_history. It explicitly ties to the pre-modification workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'ALWAYS call before modifying any file', providing strong usage context. It also mentions the summary_only option for gate checks. However, it does not explicitly list scenarios where the tool should not be used or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodeARead-onlyIdempotent
Get the context graph node for a file. Returns a SUMMARY by default (role, layer, stability, rules_count, deps_count, stale flag) — ~100 tokens. Pass full=true for the complete rules/dependencies/key_functions arrays. Call this INSTEAD of reading the source file.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Include full rules + dependencies arrays (default false — summary only) | |
| file_path | Yes | Relative file path (e.g. 'src/services/generator.py') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds beyond that: clarifies default summary behavior, lists the fields returned, mentions token count (~100), and explains the effect of full=true. This is valuable additional context for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: stating the action, describing default behavior, and prescribing when to use. No wasted words, and critical info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return value for the default case and hints at the full output. It also provides a usage recommendation. For a simple retrieval tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds context by explaining what the boolean 'full' does and that the default is summary-only, which helps the agent understand the trade-off between detail and token usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('context graph node for a file'), clearly differentiating it from siblings like get_code or get_impact by focusing on the context node rather than source code or impact analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Call this INSTEAD of reading the source file', providing a clear when-to-use directive. However, it does not list alternative tools for other contexts, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_phaseARead-onlyIdempotent
Get full details of any phase by number — completed, current, or upcoming.
| Name | Required | Description | Default |
|---|---|---|---|
| phase_number | Yes | Phase number (e.g. 19, '8R', '12A') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that it returns 'full details' and works for any phase status, providing additional useful context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 12 words, front-loaded with the core action and resource. No extraneous information; each word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set and annotations that cover safety, the description fully conveys the tool's purpose and scope. No output schema exists, so no need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the schema adequately describes the phase_number parameter with examples. The tool description does not add semantic value beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get' and resource 'phase', specifying scope 'by number' and qualifying that it works for 'completed, current, or upcoming' phases. This differentiates it from sibling tools like add_phase or complete_phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Sibling tools like get_code, get_node, or get_playbook are present but no differentiation is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playbookARead-onlyIdempotent
Get curated architectural rules for a specific task type. Returns only the 2-3 relevant rule files — not all of them. Valid task types: add_tool | add_service | add_schema | debug_pipeline | commit | write_test
| Name | Required | Description | Default |
|---|---|---|---|
| task_type | Yes | Task type (e.g. 'add_tool', 'debug_pipeline', 'commit') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already confirm read-only, idempotent, and non-destructive behavior. The description adds that only 2-3 rule files are returned (not all), which is specific behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, and no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description covers purpose, return value nature, and valid inputs. It lacks details on rule file format but is sufficient for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter description. The description adds the list of valid task types, which is not present as an enum in the schema, providing extra semantic clarity beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves curated architectural rules for a specific task type, specifying the output is only 2-3 relevant files and listing valid task types. This distinguishes it from other 'get' siblings by resource and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining architectural rules for a task type but does not explicitly state when to use this tool over alternatives or provide any exclusion criteria. Usage context is implied but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_roadmapARead-onlyIdempotent
Get current project state: phase number, name, status, next action, and upcoming phases. Call at the START of every session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the returned state fields and the intended invocation time, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by usage advice. No wasted words, perfectly concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, rich annotations, and low complexity, the description fully covers what an agent needs to know: what the tool returns and when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description need not provide parameter details. Per guidelines, 0 params yields a baseline of 4, and the description is satisfactory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'current project state', listing specific fields (phase number, name, status, next action, upcoming phases). This distinguishes it from siblings like 'get_phase' which likely retrieves a single phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call at the START of every session', providing a clear usage context. It does not explicitly mention when not to use or alternatives, but the directive is strong and suffices for a read-only snapshot tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_contextARead-onlyIdempotent
Single 'catch me up' call for cross-tool continuity. Returns current roadmap phase, recent decisions with confidence, learned preferences, and active rules — everything a new session needs. Call this at the START of every session instead of multiple separate calls. recent_decisions is ranked by recency x outcome-confidence (a decision git watched survive outranks one nothing has tested); reverted and outdated ones are hidden entirely. A decision whose file has CHANGED since it was recorded carries 'needs_review': true plus a 'review_hint' — reaffirm_decision if it still holds, supersede_decision or mark_decision_outdated if it does not. Works seamlessly across AI tools: Cursor, Claude Code, Antigravity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description reveals important behaviors: recent_decisions ranking by "recency x outcome-confidence," hidden reverted/outdated decisions, a needs_review flag with review_hint values, and cross-tool support. This materially shapes how an agent interprets the response and what follow-up actions may be needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose in its first sentence and then elaborates on ranking, filtering, and review semantics that directly affect how the output should be used. It is somewhat dense with examples like the "decision git watched survive" parenthetical, but every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what the agent will receive, and it does so thoroughly: roadmap phase, decisions with confidence, preferences, active rules, ranking logic, hidden entries, and review hints. Combined with zero parameters and safe read annotations, this is complete enough for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema reflects that with 100% coverage, so there is no parameter documentation burden on the description. The baseline for a zero-parameter tool is 4, and the description does not need to add parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific framing, "Single 'catch me up' call for cross-tool continuity," and then lists the concrete resources it returns: current roadmap phase, recent decisions, learned preferences, and active rules. This clearly distinguishes it from narrower sibling tools like list_decisions or get_roadmap by describing it as the all-in-one session-restore call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage directive: "Call this at the START of every session instead of multiple separate calls." This tells the agent both when to invoke it and that it should be preferred over assembling the same information through multiple sibling calls, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skillARead-onlyIdempotent
v3.1.0 M3: Composite-ranked search over active skills. score = 0.5 × BM25_norm + 0.3 × tag_jaccard + 0.2 × recency_decay (τ=30d, never-used skills score 0 recency). Returns hits with score_breakdown for debuggability. Pass file_path to filter skills whose trigger file_patterns don't match.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search keywords (e.g., 'rebase main') | |
| top_k | No | ||
| file_path | No | Optional file path to filter skills by their trigger file_patterns (fnmatch). Skills with no patterns match anything (not filtered). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by revealing scoring formula, recency decay, and score_breakdown return, providing deep insights into tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with front-loaded version and purpose, no filler, every sentence adds unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers scoring, filtering, and debug output adequately, but could mention pagination or empty result behavior. With no output schema, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds context for query (example) and file_path (filtering behavior), though top_k lacks additional description. Schema coverage is 67%, and description compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's a composite-ranked search over active skills with explicit scoring formula, distinguishing it from sibling tools like list_skills and search_decisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidance is provided on using file_path for filtering, but no explicit when-not-to-use or comparison to alternatives is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_working_contextARead-onlyIdempotent
v3.1.0 M2: Compact markdown rendering of the top working-memory entries for ReAct-loop injection. Returns {markdown, entries, count}. Capped at ~150 tokens of output (entries truncated at 120 chars each).
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | Max entries to include (default 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds valuable behavioral details: output capped at ~150 tokens, entries truncated at 120 characters, and returns a specific structure. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with version and key purpose. Every word earns its place, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description provides sufficient context including return type, constraints, and intended use (ReAct-loop injection). It competently covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of top_k. The description does not add additional semantics beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it renders top working-memory entries in compact markdown for ReAct-loop injection, specifying return structure and output limits. While it doesn't explicitly differentiate from siblings like working_get, the purpose is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like working_get or other queries. The description implies it's for injection into the ReAct loop, but does not provide when-not-to-use or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_decisionsARead-onlyIdempotent
v2.1.2 Item 11: enumerate decisions with filters (since_date, file_pattern, protected_only, session_id, tags). Closes the gap that 'codevira can remember things across sessions, but can't list what it remembers.' Default (E1): compact rows — one-line decision summary + key fields; full=true (or CODEVIRA_DECISION_DETAIL=full) for untruncated records, expand(ids=[...]) to fetch specific decisions in full.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Untruncated decision text | |
| tags | No | Filter to rows matching ALL these tags (v2.1.2 Item 27) | |
| limit | No | Max rows (default 20, max 200) | |
| session_id | No | Filter to one session | |
| since_date | No | ISO 8601 timestamp or YYYY-MM-DD | |
| file_pattern | No | SQL LIKE pattern on file_path | |
| summary_only | No | Smallest payload — only {id, summary, do_not_revert} per row (parity with search_decisions). Takes precedence over full. | |
| protected_only | No | Only do_not_revert=true rows | |
| include_superseded | No | Include soft-deleted rows (v2.1.2 Item 26) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and idempotent behavior. The description adds significant behavioral detail: default compact rows, full mode, summary_only precedence, expand function, and filters (protected_only, include_superseded). This exceeds the minimal disclosure from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with version numbers and internal references (v2.1.2 Item 11, 26, 27) that may clutter for an agent. It contains a verbatim quote and acronym (E1). While informative, it could be more streamlined for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description partially compensates by describing compact vs full rows and expand. However, it lacks explicit output field listing beyond 'one-line decision summary + key fields'. The mention of parity with search_decisions aids context, but return structure could be clearer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 9 parameters with descriptions. The description adds context: default limit (20, max 200), expand mechanism, interaction between full and summary_only, and version-specific filter tags. This adds meaning beyond raw schema, though some parameter behavior (e.g., since_date format) is already in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'enumerate decisions with filters'. It lists specific filter parameters and explains the gap it closes ('can't list what it remembers'). The inclusion of default vs full modes and the expand function further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus alternatives like search_decisions. It mentions 'parity with search_decisions' for summary_only, but does not provide direct comparison or exclusion criteria. The default behavior is described, but usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsARead-onlyIdempotent
v3.1.0 M3: Filtered list of skills. status='active' (default) returns the daily-driver set; 'all' returns every state; any other value filters to that one state. tags filter is set intersection.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| source | No | ||
| status | No | active | archived | superseded | all | active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, indicating safety. The description adds behavioral detail on how status and tags filters work, which is beyond the annotations. It does not mention pagination or sorting, but given the annotations cover the safety profile, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two clear, concise sentences. The first sentence states the primary purpose, and the second elaborates on filtering behavior. No extraneous information is included, making it efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately explains core filtering behavior for a list tool but lacks details on the 'limit' and 'source' parameters. There is no output schema, so the agent has no information about the response format. For a tool with 4 parameters and no output schema, the description is somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only status has a description). The description adds meaning for status and tags, explaining their behavior. However, it omits any detail about the 'limit' and 'source' parameters, which remain undocumented. Thus, the description partially compensates for low schema coverage but not completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a filtered list of skills, mentioning the status and tags filter behavior. It distinguishes its purpose from single-skill retrieval tools like get_skill, though it does not explicitly differentiate from other list tools like list_decisions or list_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives specific guidance on when to use different status values (active vs all vs filtered) and explains that tags use set intersection. However, it does not provide context on when to use this tool versus sibling tools like search_decisions or get_skill, nor does it mention prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsARead-onlyIdempotent
v2.1.2 Item 27: enumerate all tags in the project with decision counts. Useful for discovery — 'what categories of decisions do we track?'
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds that tool returns decision counts, which is useful context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with an explanatory phrase. No fluff, every word earns its place. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description fully explains what it does and what it returns (tags with decision counts). Complements the sparse structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no parameters (coverage 100%). Description adds meaning by explaining what tags are and that counts are included, which enriches the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'enumerate all tags' and resource, specifies 'with decision counts', and provides a usage context question. Easily distinguishes from siblings like list_decisions or list_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'useful for discovery — what categories of decisions do we track?' which guides when to use. Lacks explicit when-not-to-use or alternatives, but contextually clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_decision_outdatedA
v3.7.0 staleness read-side: tombstone a decision as OUTDATED so it stops surfacing in get_session_context / search_decisions / list_decisions — without deleting it. Use when a decision is simply no longer true and has NO successor (for a replacement, use supersede_decision to preserve lineage). Reversible via set_decision_flag(is_outdated=false). Writes one amendment to .codevira/decisions.jsonl; audit preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Required to retire a do_not_revert (protected) decision — surface its reasoning to the user first | |
| reason | No | Optional short note on why it's outdated | |
| decision_id | Yes | Decision id to retire (e.g. 'D000007') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds significant context: the tool writes one amendment to .codevira/decisions.jsonl, audit is preserved, it is reversible via set_decision_flag(is_outdated=false), and it stops the decision from surfacing in list/search tools. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with version and purpose, then covers behavior, usage, and reversibility. No superfluous words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (3 parameters, no output schema), the description covers behavior, side effects, alternatives, and reversibility. It lacks return value details but that's acceptable without an output schema. Slightly more about error states could improve, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already describes each parameter. The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('tombstone' / 'mark as outdated') and clearly identifies the resource ('a decision'). It distinguishes from the sibling tool 'supersede_decision' by noting when to use each, and lists which tools are affected (get_session_context, search_decisions, list_decisions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when a decision is simply no longer true and has NO successor'. Also specifies when not to use and provides an alternative: 'for a replacement, use supersede_decision to preserve lineage'. Mentions reversibility via set_decision_flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
origin_ofBRead-onlyIdempotent
v3.1.0 M7: Return the M1 origin block attached to a decision ({ide, agent_model, host_hash, ts}) + protection / supersession metadata. Always available regardless of the handshake flag.
| Name | Required | Description | Default |
|---|---|---|---|
| decision_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds behavioral context about what the tool returns (specific fields and protection/supersession metadata), which goes beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two sentences that front-load the key information. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter, the description is mostly adequate but lacks explanation of the parameter and output format. Given the presence of annotations, it meets a minimum viable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter with 0% description coverage. The tool description provides no additional meaning for the parameter 'decision_id' beyond its name, failing to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'M1 origin block', and specifies the contained fields and metadata. It is specific enough, though it does not explicitly differentiate from sibling tools like 'get_node' or 'get_history'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that the tool is 'always available regardless of the handshake flag', implying a usage condition, but it does not explicitly state when to use this tool over alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promote_skill_to_playbookA
v3.1.0 M3: Write the skill's procedure as a playbook markdown file at .codevira/playbooks//.md. Refuses on existing file unless force=True so hand-written playbooks aren't clobbered. After promotion the procedure is also discoverable via get_playbook(task_type).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional filename slug; defaults to slugified(skill.name) | |
| force | No | ||
| skill_id | Yes | ||
| task_type | Yes | Playbook directory name (e.g., 'commit', 'add_tool', 'debug_pipeline') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate the tool modifies data but is not destructive. The description adds important behavioral context: it refuses if the target file exists unless force=True, and it makes the result discoverable via get_playbook. This goes beyond the annotation signals, providing concrete failure conditions and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences covering the main action and two key behaviors (refusal condition and discoverability). It includes a version prefix ('v3.1.0 M3') that is unnecessary and adds clutter, but the core information is front-loaded. The structure is logical and efficient, though trimming the version would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters, no output schema, and sparse annotations. The description explains the primary input (skill_id, task_type) through the file path, and mentions the force parameter. It also notes the post-promotion discoverability. However, it does not specify what the tool returns (e.g., success message, file path, or error), nor does it address prerequisites like the skill having a procedure. Some gaps remain for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (task_type and name have descriptions). The description adds meaning for 'force' (clobber protection) and indirectly for 'task_type' (as directory). However, 'skill_id' is not described in either schema or description (though its purpose is inferable from the tool name). The description does not detail the 'name' parameter's use beyond what the schema states. Overall, it adds moderate value but does not fully compensate for missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'write' and the specific resource ('skill's procedure as a playbook markdown file'), with a concrete file path pattern and the resulting discoverability. It distinguishes from siblings like 'get_playbook' (retrieval) and 'record_skill' (different action). The version prefix is unnecessary but does not obscure the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides limited usage guidance: it notes that the tool refuses on existing files unless force=True, preventing accidental overwrites. However, it does not explicitly compare to alternatives or state when to use this versus other tools like 'record_skill' or 'update_playbook' (if such existed). The context is implied but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_graphARead-onlyIdempotent
Query the function-level call graph. Find callers, callees, tests, or dependents for a specific symbol. Use query_type='symbols' to list all functions in a file.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Function or class name to query | |
| file_path | Yes | Relative file path | |
| query_type | No | callers | callees | tests | dependents | symbols | callees |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, which clearly indicate the tool is safe and non-destructive. The description adds no behavioral context beyond the annotations, but does not contradict them. Since annotations carry the transparency burden, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences with no wasted words. The first sentence states the core purpose, and the second provides a concrete usage example. It is well front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with three parameters fully described in the schema and no output schema, the description provides adequate context. It explains the functionality and gives a practical hint. However, it does not describe the return format, which could be useful for an agent. Still, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all three parameters described. The description adds a helpful hint about using query_type='symbols' to list all functions, but otherwise adds little beyond the schema. Baseline 3 is correct given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries a function-level call graph for callers, callees, tests, dependents, or symbols. It uses specific verbs (Query, Find) and identifies a specific resource (function-level call graph). Among sibling tools, none appear to offer similar call graph functionality, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for call graph queries but does not explicitly state when to use this tool versus alternatives like get_code or get_signature. It provides query type options but no when-not or exclusions. This leaves some ambiguity for an agent selecting among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reaffirm_decisionA
v3.2.0: refresh a do_not_revert decision's soft-expire clock. Long-lived locked decisions can grow stale, so search and list output carry 'dnr_soft_expired' and 'dnr_age_days' on every do_not_revert decision — 180 days by default, override via CODEVIRA_DNR_SOFT_EXPIRE_DAYS (0 disables). The lock never auto-flips; the flag is advice. Call this on a soft-expired decision that is still load-bearing — it appends a single 'reaffirmed_at' amendment to .codevira/decisions.jsonl and resets the clock. For semantic rewrites use supersede_decision; for flipping the flag use set_decision_flag.
| Name | Required | Description | Default |
|---|---|---|---|
| decision_id | Yes | Decision id to reaffirm (e.g. 'D000007') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive, so the description carries the full behavioral burden. It discloses the precise side effect: appending a single 'reaffirmed_at' amendment to .codevira/decisions.jsonl and resetting the clock. It also clarifies important nuances: the lock never auto-flips, the flag is advisory, and soft-expiry can be configured via an environment variable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: every sentence contributes either the core action, the trigger condition, the configuration, the side effect, or an alternative. The action is front-loaded, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter and no output schema, the description fully equips an agent to invoke the tool correctly. It covers the decision trigger, the expiry mechanism, the environment override, the exact file mutation, and the relevant sibling tools — more than enough for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single decision_id parameter with an example, so the baseline is 3. The description adds selection semantics beyond the schema: the decision should be soft-expired and still load-bearing, which helps the agent choose the right id. It does not add syntax or format details, but the schema is already sufficient for that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('refresh') on a specific resource ('a do_not_revert decision's soft-expire clock'), making the action unambiguous. It also distinguishes itself from sibling tools by explicitly naming supersede_decision and set_decision_flag as the tools for different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call the tool: 'on a soft-expired decision that is still load-bearing.' It also gives clear alternatives with conditions: 'For semantic rewrites use supersede_decision; for flipping the flag use set_decision_flag.' The soft-expiry trigger is made observable via dnr_soft_expired and dnr_age_days, so an agent can decide with concrete evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionA
Record one architectural decision. Set do_not_revert=true to lock it across sessions and IDEs. Returns {decision_id, session_id}. To change it later use supersede_decision (preserves the audit trail) or set_decision_flag (toggle do_not_revert / tags).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional list of tag strings (e.g. ["security", "auth"]). Surfaces in list_decisions / list_tags filters. | |
| force | No | If true, skip the implicit `check_conflict` duplicate/conflict warning step. Use when you've already reviewed a conflict and want to record anyway. | |
| symbol | No | Optional function/class name within file_path to scope the decision to (e.g. "login"). With do_not_revert, the lock then blocks only edits INSIDE that symbol; edits elsewhere in the file warn instead. Requires file_path. | |
| context | No | Free prose: why this won, what it depended on, what evidence backed it. Surfaced verbatim when a locked decision blocks an edit — this is what the next agent reads instead of guessing. | |
| decision | Yes | The decision itself (1 sentence is fine) | |
| file_path | No | Optional file/path the decision pertains to | |
| session_id | No | Optional session id to attach to (auto-generated if omitted) | |
| do_not_revert | No | If true, mark the decision as protected — future sessions will see do_not_revert=true and must NOT propose changes that conflict without surfacing this decision to the user first. Default false. | |
| would_re_examine_if | No | The condition that should trigger reconsidering this (e.g. "if the payload exceeds 1 MB" or "if we add a second write path"). Especially valuable with do_not_revert — it turns a one-way ratchet into a lock with a stated release condition. | |
| alternatives_considered | No | The strongest options you REJECTED, one per entry (e.g. ["polling — simpler but 3s worst-case latency", "webhooks — needs a public endpoint"]). Surfaces the losers so a future session can weigh whether to revisit instead of re-deriving them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses that do_not_revert locks the decision across sessions and IDEs, and it specifies the return shape {decision_id, session_id}. It also hints at the audit trail preservation via supersede_decision. No contradiction with annotations, and useful behavioral context is added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and every sentence earns its place by covering action, locking behavior, return value, and alternatives. There is no redundant phrasing or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high schema coverage and that the tool has no output schema, the description compensates by specifying return values and the cross-session lock effect. It does not mention the implicit check_conflict behavior or the force parameter, but those are covered in the schema. The description is complete enough for a well-informed agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage with detailed descriptions for all 10 parameters, so the description need not repeat them. It does add extra context for do_not_revert ('lock it across sessions and IDEs'), reinforcing the schema, but does not substantially expand meaning for other parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Record one architectural decision' with a specific verb and resource, clearly distinguishing the create action from siblings. It also names supersede_decision and set_decision_flag as alternatives for later changes, explicitly differentiating this tool from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool ('Record one architectural decision') and provides explicit alternatives for later modifications ('To change it later use supersede_decision ... or set_decision_flag'), giving clear context. It does not mention exclusions or conditions when this tool should be avoided, but the guidance is sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_skillA
v3.1.0 M3: Author a new skill in the canonical store (.codevira/skills.jsonl). Skills encode 'how to do X in this project' as markdown procedures. Calls check_conflict against the SKILLS corpus before writing; near-duplicate warnings can be overridden via force=True. Use supersede_skill to version an existing skill, or promote_skill_to_playbook to promote a skill into the existing playbook system.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short identifier (e.g., 'git-rebase-workflow') | |
| force | No | Skip duplicate-check warning | |
| source | No | explicit | |
| summary | No | Optional one-liner (max 256 B) | |
| triggers | No | Discovery hints: tags (lowercased, set-membership for jaccard ranking) + file_patterns (fnmatch globs for file-scoped retrieval) | |
| procedure | Yes | Markdown body of how to do this thing (max 2 KB) | |
| do_not_revert | No | Exempt from auto-archive sweep; flag canonical doctrine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false. The description adds that the tool writes a skill and checks for conflicts, with an option to override. This provides useful context beyond annotations, though it doesn't cover all potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, well-structured. First sentence states purpose and format, second explains conflict check and alternatives. The version string 'v3.1.0 M3' adds minor noise but does not significantly detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters (including nested objects) and no output schema, the description covers the main purpose and conflict check but lacks details on return values and the nested 'triggers' object. Slightly incomplete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%), so baseline is 3. The description adds value for the 'force' parameter by explaining it overrides duplicate warnings. However, other parameters like source, summary, triggers, do_not_revert are not elaborated beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Author' and resource 'new skill' with location '.codevira/skills.jsonl'. It distinguishes from siblings by mentioning alternatives like supersede_skill and promote_skill_to_playbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (creating new skills) and when not (use supersede_skill for versioning, promote_skill_to_playbook for promotion). Also explains conflict checking and force override.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_decisionsARead-onlyIdempotent
Search past decisions across sessions and roadmap phases. Keyword search over an FTS5/BM25 index (Porter-stemmed) — NO semantic/vector matching, so recall depends on sharing keywords with the stored decision; for a concept with no shared words, browse list_decisions or list_tags instead. Default (E1): summary-first rows — {id, decision (one-line ≤140), file_path, do_not_revert, tags, score}, dropping per-row snippet/origin. Pass full=true for untruncated rows, expand(ids=[...]) to fetch specific decisions in full, or summary_only=true for a ~70%-smaller {id, summary, score} payload. Answers 'has anyone decided this before?'
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return untruncated decision text (default false) | |
| limit | No | Max results (default 5, max 20) | |
| query | Yes | Keywords to search (e.g. 'threshold', 'uuid', 'retry') | |
| session_id | No | Optional — filter to a specific session | |
| all_projects | No | v3.6.0: search EVERY registered project's decisions, not just the current one. Each result gains `project` + `project_path`. Use to recall how you solved something in another repo. Default false. | |
| summary_only | No | v2.1.2 Item 28: return id+summary+score only (smallest payload) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond annotations: confirms the tool is a read-only, idempotent operation (consistent with annotations), details the indexing algorithm (FTS5/BM25, Porter-stemmed), specifies default response format (summary-first rows with specific fields), and describes optional output modes. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place. The description is front-loaded with the main purpose, then covers indexing, output format, and parameter options without unnecessary words. Efficiently structured for an AI agent to quickly grasp key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return format (fields and structure). It covers all relevant behaviors, options, and usage context for a tool with 6 parameters and multiple output modes, making it a complete and useful reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds meaningful context: explains default behavior for full and summary_only, the effect of all_projects (v3.6.0, adding project fields), and the structure of the default response. This enhances understanding beyond the schema alone, though the schema already provides good baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool performs keyword search on past decisions using FTS5/BM25 with Porter stemming, explicitly distinguishing from semantic search and from browsing tools like list_decisions/list_tags. The verb 'search' plus the specific resource and scope makes it highly distinguishable from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (searching for previous decisions with shared keywords) and when to use alternatives (browsing list_decisions or list_tags for concepts without shared words). Also explains default behavior and key parameters like full, expand, and summary_only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_decision_flagA
v3.0.0 lightweight flag/tag update for an existing decision. Use this when you only need to toggle do_not_revert or correct a tag list — avoids supersede_decision's mandatory rewrite of the decision text + reason. Writes a single amendment record to .codevira/decisions.jsonl. For semantic rewrites use supersede_decision instead.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement tag list (omit to leave unchanged) | |
| force | No | Required to set is_outdated=true on a do_not_revert (protected) decision | |
| decision_id | Yes | Decision id to amend (e.g. 'D000007') | |
| is_outdated | No | v3.7.0: set/clear the outdated tombstone (omit to leave unchanged; False un-retires a decision marked via mark_decision_outdated) | |
| do_not_revert | No | New flag value (omit to leave unchanged) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it writes a single amendment record to .codevira/decisions.jsonl, which goes beyond annotations (which only indicate not read-only and not destructive). This adds meaningful behavioral context about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. Front-loaded with version and clear action. Every sentence earns its place, distinguishing from sibling and describing behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema, the description covers purpose, usage context, behavioral side effect (file write), and parameter intent. No gaps remain given the annotations and schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The tool description adds high-level context but does not enhance understanding of individual parameters beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it performs a lightweight flag/tag update on an existing decision, specifying the exact resources (tags, do_not_revert, is_outdated) and distinguishes itself from supersede_decision by avoiding a full rewrite. This is a specific verb+resource+scope with clear sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('only need to toggle do_not_revert or correct a tag list') and when not to ('for semantic rewrites use supersede_decision'), providing clear context and an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supersede_decisionA
v2.1.2 Item 26: retire old_id and link to a replacement. Writes the new decision with [supersedes #<old_id>: <reason>] prefix, sets the old row as superseded. Default-hidden in search / list (pass include_superseded=true to opt back in).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| old_id | Yes | Decision id to retire (e.g. 'D000001'). v3.0.0 uses zero-padded string IDs returned by record_decision. v2.x integer IDs are not accepted — they live in graph.db which v3.0.0 no longer reads. | |
| reason | Yes | Why the prior decision changed | |
| context | No | Optional context | |
| file_path | No | Optional file path | |
| new_decision | Yes | Replacement decision text | |
| do_not_revert | No | Lock the replacement |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) with no destruction (destructiveHint=false). The description adds useful context: writes with a prefix, marks old as superseded, and default-hides the old decision. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences that front-load the main action, then detail behavioral traits and search visibility. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main effects (writing, superseding, hiding) and includes the format prefix. Lacks mention of error cases or prerequisites (e.g., old_id must exist), but with 7 parameters and 3 required, the description is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%) with good parameter descriptions. The description adds specific format for the prefix ('[supersedes #<old_id>: <reason>]'), which is not in the schema, providing additional clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'retire old_id and link to a replacement' with specific verb and resource. It distinguishes from siblings like 'reaffirm_decision' and 'record_decision' by explicitly describing the superseding behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied—to retire a decision and create a replacement—but no explicit when-to-use or when-not-to-use guidance is given. Alternatives like 'consensus_propose_supersession' exist among siblings but are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supersede_skillA
v3.1.0 M3: Version a skill. Writes a new skill that supersedes old_id; amendment-marks the old as 'superseded' with a backref. Triggers inherit from the old skill when not supplied. The old skill no longer surfaces in search after this; it's still retrievable via list_skills(status='superseded') for audit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| old_id | Yes | ||
| reason | No | ||
| summary | No | ||
| triggers | No | ||
| procedure | Yes | ||
| do_not_revert | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description explains that triggers inherit when omitted, old skill becomes hidden in search but retrievable via list_skills(status='superseded'), and the old is marked 'superseded' with a backref. This provides comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear purpose front-loaded. Minor version prefix ('v3.1.0 M3') adds noise but does not significantly impact clarity. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing output schema description, no error conditions or prerequisites. Parameter semantics incomplete. Does not place tool in broader workflow among many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains old_id, name, procedure (implied), and triggers inheritance, but does not cover reason, summary, or do_not_revert. Partial value added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new skill version that supersedes an old one, using the verb 'writes' and specifying the resource 'skill'. It distinguishes from sibling tools like 'record_skill' (new without superseding) and 'list_skills' (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when versioning and deprecating a skill) and mentions inheritance and search behavior. However, it lacks explicit exclusions or comparisons with alternatives like 'supersede_decision'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_next_actionA
Update the roadmap's next_action field. Call at session end.
| Name | Required | Description | Default |
|---|---|---|---|
| next_action | Yes | Exact description of what the next agent should do |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only and not destructive. The description adds the timing instruction 'at session end', which is useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first states purpose, second gives usage timing. Perfectly front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter update tool with no output schema, the description adequately covers purpose and timing. It could mention what happens post-update, but the context seems sufficient for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the parameter completely with a description, and the tool description confirms the field name but adds no additional meaning, examples, or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the specific resource 'roadmap's next_action field', uniquely identifying its function among many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call at session end' providing clear context, but does not mention when not to use or explicitly name alternatives, though sibling tools imply other update options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_phase_statusA
Update the current phase status: pending | in_progress | blocked. Call when starting work on a phase (in_progress) or when blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | pending | in_progress | blocked | |
| blocker | No | Required when status=blocked | |
| started | No | ISO date override (defaults to today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds little beyond repeating the allowed status values from the schema, failing to disclose potential side effects, authorization needs, or what 'current phase' refers to.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with the purpose and usage immediately front-loaded. Every sentence adds value, and there is no superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no explanation of return values or side effects, the description is insufficient. It does not clarify what 'current phase' is (e.g., a session-level state or a phase ID), nor does it mention the conditional requirement for the 'blocker' parameter when status is 'blocked'. The description should explain what happens after a status update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters. The description repeats the allowed statuses inline but does not add additional meaning, examples, or constraints beyond what the schema provides. It does not mention the conditional 'blocker' parameter when status is 'blocked'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'current phase status'. It lists the valid statuses and provides specific usage scenarios ('when starting work on a phase' or 'when blocked'), which helps distinguish it from sibling tools like complete_phase or defer_phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Call when starting work on a phase (in_progress) or when blocked'), providing clear context. However, it does not mention when not to use it or suggest alternative tools for other operations like marking a phase as pending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
working_addA
v3.1.0 M2: Append one observation or goal to working memory (intra-session, bounded, decay-scored scratchpad in .codevira-cache/working.jsonl). 'observation' = a fact the agent saw (file edited, error message, command output). 'goal' = what the agent is currently trying to accomplish. Use working_promote to move an entry to long-term memory (decision/skill/playbook) when it earns its keep.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | observation | goal (default: observation) | observation |
| links | No | Optional D-ids / S-ids this entry references | |
| content | Yes | Free-text markdown (max 2 KB) | |
| confidence | No | 0.0-1.0, optional. Voyager-style belief strength | |
| importance | No | 1-10 (default 5). Errors = 7, decisions = 8+ | |
| session_id | No | Optional session slug; defaults to ad-hoc-XXXXXX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds behavioral context: it is intra-session, bounded, decay-scored, and stored in a specific file (.codevira-cache/working.jsonl). This goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. It is front-loaded with the core action and then provides context and alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, all documented in schema with 100% coverage, and the description adds behavioral context, it is complete. No output schema is needed as return is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the meaning of 'observation' and 'goal' in context, and mentions confidence and importance in terms of use cases (errors=7, decisions=8+). This enhances understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends one observation or goal to working memory, distinguishing between 'observation' and 'goal' with specific definitions. It also references the sibling tool 'working_promote' for long-term storage, providing differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('append... to working memory') and provides an alternative ('Use working_promote to move an entry to long-term memory'), giving clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
working_getARead-onlyIdempotent
v3.1.0 M2: Top-K live working-memory entries by decay score (importance × exp(-Δt_hours / 6) + 0.5 × access_count). Filters by kind / session_id. Tombstoned (evicted or promoted) entries are excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter to observation | goal (default: both) | |
| top_k | No | Max entries to return (default 10) | |
| session_id | No | Filter to one session slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable context: the decay formula, filtering capabilities, and tombstone exclusion, which go beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence covering version, purpose, formula, filters, and exclusions. No redundant phrases; every part adds value. It is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose, filtering, exclusion, and scoring logic. It does not explicitly state that results are sorted by decay score (implied by 'Top-K') or mention pagination, but for a read operation with default top_K=10, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'Filters by kind / session_id' which aligns with parameters but does not add new meaning beyond the schema's own descriptions. The decay formula is not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies it retrieves top-K live working-memory entries sorted by a decay score formula, with filters for kind/session_id and exclusion of tombstoned entries. It distinguishes itself from sibling tools like working_add or working_promote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states filtering options (kind/session_id) and that tombstoned entries are excluded, which helps an agent decide when to use it. However, it does not explicitly mention when not to use it or compare to similar getter tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
working_promoteB
v3.1.0 M2: Promote a working-memory entry to long-term memory and tombstone the source. to='decision' is the fully wired path (calls check_conflict first; force=true overrides). to='skill' and to='playbook' are reserved for M3+; the call returns {deferred: true, milestone: ...} until those stores ship.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Target LTM store | decision |
| tags | No | ||
| force | No | Skip check_conflict warning (e.g., on second-pass promote) | |
| context | No | ||
| entry_id | Yes | The W-id from working_add / working_get | |
| file_path | No | ||
| do_not_revert | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it will 'tombstone the source', indicating a destructive action, but the annotation destructiveHint is false. This is a direct contradiction. Additionally, it does not fully disclose other behavioral traits such as permission requirements or side effects beyond tombstoning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, starting with the core action, then detailing the 'to' options. It is concise and front-loaded, though the version prefix 'v3.1.0 M2' adds minor noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters and no output schema, the description covers the 'to' options well but omits details about the return value for 'to=decision', side effects, and preconditions. The annotation contradiction also undermines completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds context for key parameters like 'to' (target stores and their status) and 'force' (overrides check_conflict). However, schema coverage is low (43%), and parameters such as tags, context, file_path, and do_not_revert are not explained in the description, leaving gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool promotes a working-memory entry to long-term memory and tombstones the source, specifying different behaviors for 'to' targets. It distinguishes itself from siblings by focusing on promotion from working memory, though it does not explicitly contrast with other tools like working_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each 'to' option: 'to=decision' is fully wired and calls check_conflict, while 'to=skill' and 'to=playbook' are reserved for future milestones and return a deferred response. It also mentions force=true to override conflict checks. However, it lacks general prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_session_logA
Write a structured session log to .agents/logs/YYYY-MM-DD/. Called by the Documenter at the end of every session. Feeds search_decisions() with institutional memory.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Original developer prompt | |
| phase | Yes | phase | |
| decisions | Yes | ||
| skill_ids | No | IDs of skills you actually applied this session. Feeds the outcomes fan-out that reinforces or retires a skill based on whether its session's work survived in git. | |
| task_type | No | What KIND of work this session was. Skill induction clusters sessions by task_type — without it a session can never contribute to a learned skill, which is why induction has yielded zero across every project to date. | |
| next_steps | Yes | ||
| session_id | Yes | Short ID (8-char slug) | |
| files_changed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-destructive operation. The description adds context by specifying the output location and downstream integration with search_decisions(), but it does not clarify whether files are appended or overwritten, naming conventions, or required permissions. Some behavioral context is added, but significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of three short, purposeful sentences: the first states the action and destination, the second identifies the caller and trigger, and the third explains the downstream value. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description provides useful context about purpose and integration but lacks details on return behavior, file handling, or the exact structure of the log. It is adequate for a straightforward write operation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 63%, covering 5 of 8 parameters (task, phase, skill_ids, task_type, session_id), but the description itself does not describe any parameters or add meaning beyond 'structured session log'. Missing descriptions for decisions, files_changed, and next_steps are not compensated for in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes a structured session log to a specific directory path .agents/logs/YYYY-MM-DD/. It distinguishes itself from siblings like record_decision by focusing on the entire session log, and mentions its role as the Documenter's end-of-session action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is called by the Documenter at the end of every session, giving a precise trigger and context. It does not mention alternative tools or when not to use it, but the specific caller and timing serve as sufficient guidance.
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.
17 tool updates
v4.0.0- Removed
consensus_check - Removed
consensus_propose_supersession - Removed
consensus_resolve - Removed
consensus_status - Removed
distill_preferences - Removed
get_code - Removed
get_reflections - Removed
get_signature - Removed
list_reflections - Changed
record_decision3 fields changed- added
Input schema / properties / alternatives_consideredAdded value: +{ + "description": "The strongest options you REJECTED, one per entry (e.g. [\"polling — simpler but 3s worst-case latency\", \"webhooks — needs a public endpoint\"]). Surfaces the losers so a future session can weigh whether to revisit instead of re-deriving them.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / context / descriptionPrevious value: -"Why this won (alternatives, what would force re-examination)"New value: +"Free prose: why this won, what it depended on, what evidence backed it. Surfaced verbatim when a locked decision blocks an edit — this is what the next agent reads instead of guessing." - added
Input schema / properties / would_re_examine_ifAdded value: +{ + "description": "The condition that should trigger reconsidering this (e.g. \"if the payload exceeds 1 MB\" or \"if we add a second write path\"). Especially valuable with do_not_revert — it turns a one-way ratchet into a lock with a stated release condition.", + "type": "string" +}
- Removed
reflect - Removed
search_preferences - Removed
spatial_affordances - Removed
spatial_heat - Removed
spatial_nearby - Removed
spatial_neighborhood - Changed
write_session_log2 fields changed- added
Input schema / properties / skill_idsAdded value: +{ + "description": "IDs of skills you actually applied this session. Feeds the outcomes fan-out that reinforces or retires a skill based on whether its session's work survived in git.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / task_typeAdded value: +{ + "description": "What KIND of work this session was. Skill induction clusters sessions by task_type — without it a session can never contribute to a learned skill, which is why induction has yielded zero across every project to date.", + "enum": [ + "feature", + "bug", + "refactor", + "release", + "docs", + "other" + ], + "type": "string" +}
2 tool updates
v3.7.0- Added
mark_decision_outdated - Changed
set_decision_flag2 fields changed- added
Input schema / properties / forceAdded value: +{ + "description": "Required to set is_outdated=true on a do_not_revert (protected) decision", + "type": "boolean" +} - added
Input schema / properties / is_outdatedAdded value: +{ + "description": "v3.7.0: set/clear the outdated tombstone (omit to leave unchanged; False un-retires a decision marked via mark_decision_outdated)", + "type": "boolean" +}
50 tool updates
v3.6.0- First observed
add_phase - First observed
apply_skill_outcome - First observed
bulk_import_phases - First observed
check_conflict - First observed
complete_phase - First observed
consensus_check - First observed
consensus_propose_supersession - First observed
consensus_resolve - First observed
consensus_status - First observed
defer_phase - First observed
distill_preferences - First observed
expand - First observed
get_code - First observed
get_history - First observed
get_impact - First observed
get_node - First observed
get_phase - First observed
get_playbook - First observed
get_reflections - First observed
get_roadmap - First observed
get_session_context - First observed
get_signature - First observed
get_skill - First observed
get_working_context - First observed
list_decisions - First observed
list_reflections - First observed
list_skills - First observed
list_tags - First observed
origin_of - First observed
promote_skill_to_playbook - First observed
query_graph - First observed
reaffirm_decision - First observed
record_decision - First observed
record_skill - First observed
reflect - First observed
search_decisions - First observed
search_preferences - First observed
set_decision_flag - First observed
spatial_affordances - First observed
spatial_heat - First observed
spatial_nearby - First observed
spatial_neighborhood - First observed
supersede_decision - First observed
supersede_skill - First observed
update_next_action - First observed
update_phase_status - First observed
working_add - First observed
working_get - First observed
working_promote - First observed
write_session_log
TDQS
Scored across 36 tools
Each tool targets a distinct operation and resource: roadmap phases, decision records, working memory, skills, and graph queries are cleanly separated. Even related tools like search_decisions vs list_decisions and get_node vs query_graph are clearly differentiated by their descriptions and intended use cases.
The overwhelming majority of tools follow snake_case verb_noun naming like add_phase, get_roadmap, search_decisions, and record_skill. Minor deviations such as working_add, working_get, expand, and origin_of break the pattern slightly but are still readable and not chaotic.
36 tools is well beyond the 25+ threshold that should be considered too many for a coherent MCP surface. While the tools cover multiple subdomains, the sheer number makes the set heavy for an agent to navigate and weigh in context.
The tool surface provides deep lifecycle coverage for its apparent domain: roadmap phases, decision records, skills, working memory, and file context graph. There are few obvious missing operations — decisions can be recorded, searched, superseded, flagged, and outdated; skills can be created, listed, promoted, and managed; and phases have create, read, update, complete, and bulk-import operations.
Maintenance
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that provides persistent project context, workflow management, and knowledge capture for AI coding agents. It enables agents to maintain structured memory across sessions by tracking project profiles, conventions, skills, and technical debt.7-
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.4MIT
- AlicenseNot gradedqualityAmaintenanceProvides persistent memory for AI coding agents via MCP, allowing them to recall fragility, decisions, and bugs across sessions.241 npm3MIT
- AlicenseNot gradedqualityAmaintenanceMCP memory server for AI coding agents to remember decisions, patterns, and bugs between sessions. Provides persistent memory with 37 MCP tools, multi-session coordination, and token-efficient recall.86 npm11MIT