Skip to main content
Glama

Codevira

One memory layer for every AI coding tool you use. Switch between Claude Code, Cursor, Windsurf, and Antigravity without losing context, decisions, or progress.

PyPI version Python Downloads License: MIT MCP PRs Welcome

Built for solo developers working on local projects with AI agents. Codevira gives every AI tool you use access to the same persistent project memory — so you stop re-explaining your codebase every session, stop losing carefully-made decisions, and stop burning tokens on re-discovery.

Works with: Claude Code · Claude Desktop · Cursor · Windsurf · Google Antigravity · any MCP-compatible AI tool


The Problem (Four Pains Codevira Solves)

If you code with AI agents on a project longer than a week, you've felt all of these:

1. Re-explaining your codebase every session

Every new chat starts from zero. The AI doesn't know your architecture, your conventions, your "we don't do it that way" decisions. You waste the first 10 minutes (and thousands of tokens) catching it up — only to do it again tomorrow.

2. AI undoing your careful decisions

Last week you debugged a tricky retry policy for 3 hours. Today's AI session refactors it to a simpler version because it has no idea why the complexity exists. Now it's broken again.

3. Cross-tool amnesia

You started planning in Claude Code. Switched to Cursor for autocomplete. Opened Antigravity to run tests. Three different agents, three different blind copies of your project state. Nothing carries over.

4. Token budget burned on re-discovery

Your AI agent reads the same 12 files every session before doing any actual work. You're paying API costs for the same lookups, over and over.

Codevira is a persistent memory layer that fixes all four — for every AI tool, on every project, on your local machine.


Related MCP server: Tages

How It Works

Codevira is a Model Context Protocol server that runs locally and gives any AI tool a structured, queryable memory of your codebase:

Capability

What it means for you

Zero-config setup

pipx install codevira && codevira register — that's it. No prompts, no JSON editing. Auto-detects language, source dirs, and IDE configs

Cross-tool continuity

One get_session_context() call brings any AI agent up to speed in ~800 tokens — works identically in Claude Code, Cursor, Windsurf, Antigravity

Decision protection

do_not_revert flags + searchable decision log stop AI agents from undoing past architectural choices

Context graph

Every source file has a node: role, rules, dependencies, stability, blast radius. AI calls get_node(path) instead of re-reading the file

Function-level call graph

get_impact(file) answers "what breaks if I change this?" before the AI modifies anything

Semantic code search

Natural-language search across your codebase (search_codebase("auth flow"))

Roadmap + changesets

Multi-file work tracked atomically; sessions resume cleanly after interruption

Adaptive learning

Tracks which past decisions panned out — gives confidence scores and surfaces patterns

Cross-project memory

Learned preferences sync across all your local projects via ~/.codevira/global.db

Auto-init on first call

No codevira init needed — first MCP tool call triggers background project setup

Token-efficient by design

Codevira is built around the principle that AI agent context windows are precious. Tools return summaries by default with opt-in full data:

  • get_node(path) — ~100 tokens by default (counts + flags). Pass full=true for the entire rules array.

  • get_impact(path) — 10 affected files. Pass summary_only=true for just counts (~80 tokens) before deciding to dig deeper.

  • search_codebase(query) — file/symbol pointers only. Pass include_content=true to inline source.

  • search_decisions(query) — 5 truncated matches. Pass full=true for verbatim text.

The agent always asks for what it needs, in the size it needs.


Quick Start

1. Install

# Recommended: global install via pipx (isolated, works everywhere)
pipx install codevira

# Alternative: pip install
pip install codevira

Installs the full toolkit (23 AI-facing MCP tools + 12 admin/CLI tools) out of the box. Semantic search downloads a ~90MB embedding model on first use.

2. Register with your AI tools

codevira register

This one-time global command injects Codevira's MCP config into all detected AI tools — Claude Code, Cursor, Windsurf, Claude Desktop, and Google Antigravity. Run it from anywhere; no project directory needed.

3. Start using

Open any project in your AI tool. On the first MCP tool call, Codevira auto-initializes:

  • Detects language, source directories, and file extensions from project markers

  • Creates the context graph and roadmap

  • Installs a post-commit git hook for automatic reindexing

No explicit codevira init needed — everything happens on demand.

Note: codevira init is still available for explicit per-project setup with custom settings.

4. Verify

Ask your AI agent to call get_roadmap() — it should return your current phase and next action.

Note: Restart your AI tool after running codevira register to pick up the new MCP config.

Customizing what's indexed

Codevira tries to auto-detect your project's source layout, but monorepo or non-standard layouts sometimes slip through — you'll notice when codevira index --full reports 0 chunks indexed and prints a hint pointing you here.

cd your-project
codevira configure

Scans your project (gitignore-aware), shows discovered directories and extensions with file counts, and lets you pick which to watch via a numbered-list prompt. It writes your choices back to .codevira/config.yaml and offers to rebuild the index.

Non-interactive (useful in scripts or CI):

codevira configure --dirs src,packages,apps --extensions .py,.ts,.tsx --no-reindex

After changing watched directories, restart your AI tool — running watchers snapshot the dir set at boot.

Manual config (only if auto-inject didn't detect your tool)

Codevira supports two transports. Use the right one for your client:

Client

Transport

Config file

Claude Desktop (app)

stdio

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Code (CLI)

stdio or HTTP

.claude/settings.json

Cursor

stdio

.cursor/mcp.json

Windsurf

stdio

.windsurf/mcp.json

Google Antigravity

stdio

~/.gemini/antigravity/mcp_config.json

Stdio transport — Claude Desktop, Cursor, Windsurf (.claude/settings.json / .cursor/mcp.json / .windsurf/mcp.json):

{
  "mcpServers": {
    "codevira": {
      "command": "codevira",
      "args": [],
      "cwd": "/path/to/your-project"
    }
  }
}

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "codevira": {
      "command": "/path/to/codevira",
      "args": ["--project-dir", "/path/to/your-project"]
    }
  }
}

Tip: find the full binary path with which codevira

HTTP/HTTPS transportPreview in v1.7, single-project only. The HTTP server binds to one project at startup and cannot switch contexts per request. Multi-project HTTPS is planned for v1.8. For multi-project work today, use stdio via codevira register (above).

First start the HTTP server in a terminal:

codevira serve --port 7007 --project-dir /path/to/your-project
# For HTTPS (required by some clients):
codevira serve --https --port 7443 --project-dir /path/to/your-project

Then register the URL:

{
  "mcpServers": {
    "codevira": {
      "url": "https://localhost:7443/mcp"
    }
  }
}

HTTPS note: Claude Code uses Node.js, which requires a trusted CA for HTTPS. Run once to trust the mkcert CA:

brew install mkcert && mkcert -install
launchctl setenv NODE_EXTRA_CA_CERTS "$(mkcert -CAROOT)/rootCA.pem"
echo 'export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"' >> ~/.zshrc

Then restart Claude Code.

Auto-start on login (macOS):

codevira serve --install-service    # start server automatically on login
codevira serve --uninstall-service  # remove auto-start

Google Antigravity (~/.gemini/antigravity/mcp_config.json):

{
  "mcpServers": {
    "codevira": {
      "$typeName": "exa.cascade_plugins_pb.CascadePluginCommandTemplate",
      "command": "codevira",
      "args": []
    }
  }
}

Codevira data layout (v1.6)

~/.codevira/                         <- global Codevira home
├── global.db                        <- cross-project intelligence
├── projects/
│   └── <project-key>/               <- per-project data (keyed by path)
│       ├── config.yaml
│       ├── metadata.json
│       ├── graph/
│       │   ├── graph.db
│       │   └── changesets/
│       ├── codeindex/               <- semantic search (optional)
│       └── logs/
└── certs/                           <- HTTPS certs (if using --https)

Legacy .codevira/ directories inside project repos are auto-migrated to centralized storage on first server start.

Configuration

Each project has a config.yaml at ~/.codevira/projects/<project-key>/config.yaml. It's auto-generated on first use with sensible defaults, but you can edit it to customize what Codevira indexes:

project:
  name: my-project
  language: python
  collection_name: my_project
  # Which directories to scan for source files
  watched_dirs:
    - src
    - tests
    - scripts
  # Which file extensions count as "source" for indexing + change detection
  file_extensions:
    - .py
    - .ts
    - .tsx
  # Directories to skip even if inside watched_dirs
  skip_dirs:
    - node_modules
    - .venv
    - __pycache__
    - dist
    - build
logs:
  # 0 = keep sessions/decisions forever (default).
  # Only set > 0 if you have privacy reasons to time-bound history.
  retention_days: 0

Common gotchas:

  • file_extensions must be a proper YAML list — each extension on its own line. This is wrong:

    file_extensions:
      - .py, .md, .html    # ❌ one item containing commas, not three extensions

    This is correct:

    file_extensions:
      - .py
      - .md
      - .html

    Or inline:

    file_extensions: [.py, .md, .html]
  • file_extensions is intended for source code (Python, TypeScript, Go, Rust, etc.). Codevira uses tree-sitter AST parsing — putting .md or .html here may produce malformed graph nodes since tree-sitter parsers for those languages are different.

  • Files are only scanned if they live inside watched_dirs. Adding an extension alone isn't enough — make sure the directory is listed too.

After editing the config, run codevira index --full to rebuild the graph from scratch, or codevira index for incremental changes.

Uninstall / Reset

codevira clean              # remove global data + IDE configs + launchd service
codevira clean --all        # also remove per-project artifacts
codevira clean --dry-run    # preview what would be removed

How It Works

Setup Flow

flowchart LR

A["pipx install codevira"] --> B["codevira register"]
B --> C["Open project in\nClaude Code / Cursor /\nWindsurf / Antigravity"]
C --> D["First MCP tool call\ntriggers auto-init"]
D --> E["✓ Config written\n✓ Graph built\n✓ Roadmap created\n✓ Ready"]

Agent Session Lifecycle

flowchart TB

Start([Start Session])

subgraph "Orientation (single call)"
A["get_session_context()\nroadmap + changesets +\ndecisions + global intelligence"]
end

subgraph "Work"
B[get_node / get_impact\nbefore touching files]
C[Plan + Implement + Test]
D[refresh_index\nafter changes]
end

subgraph "Session End"
E[update_node — record changes]
F[write_session_log — decisions]
G[update_next_action — handoff]
end

Start --> A
A --> B
B --> C
C --> D
D --> E
E --> F
F --> G

Architecture

flowchart TB

A[Source Code\n15+ languages]

subgraph "Indexing Pipeline"
B[Tree-sitter AST Parser]
C[Function / Class / Call Extraction]
D[Background File Watcher\nauto-reindex on save]
end

subgraph "Centralized Storage — ~/.codevira/"
E[(Context Graph + Call Graph\nSQLite DB)]
F[(Semantic Index\nChromaDB — optional)]
G[(Global Memory\ncross-project intelligence)]
H[(Session Logs + Decisions\nsearchable history)]
end

subgraph "Adaptive Learning"
I[Outcome Tracking]
J[Rule Inference]
K[Preference Learning]
end

subgraph "MCP Server"
L[36 Tools + 5 Prompts\nstdio or HTTP transport]
end

M[AI Coding Agent\nClaude Code · Cursor · Windsurf · Antigravity]

A --> B
B --> C
C --> E
C --> F
D --> B

E --> L
F --> L
G --> L
H --> L

I --> G
J --> G
K --> G

E --> I

L --> M

Session Protocol

Every agent session follows a simple protocol. Set it up once in your agent's system prompt — then your agents handle the rest.

Session start (mandatory):

list_open_changesets()      -> resume any unfinished work first
get_roadmap()               -> current phase, next action
search_decisions("topic")   -> check what's already been decided
get_node("src/service.py")  -> read rules before touching a file
get_impact("src/service.py") -> check blast radius

Session end (mandatory):

complete_changeset(id, decisions=[...])
update_node(file_path, changes)
update_next_action("what the next agent should do")
write_session_log(...)

This loop keeps every session fast, focused, and resumable.


MCP Tools + 5 Prompts

23 tools exposed to AI agents (token-optimized, summary-first). The remaining 12 tools are admin/dashboard tools that work via dispatch but aren't advertised in list_tools() — humans access them via the CLI or via specific MCP prompts. Tools marked (admin) below.

Graph Tools

Tool

Description

get_node(file_path, full?)

Summary by default (counts + flags); full=true for rules/dependencies arrays

get_impact(file_path, summary_only?)

Blast radius — summary_only=true returns just counts (~80 tokens)

update_node(file_path, changes)

Append rules, connections, key_functions

query_graph(file_path, symbol?, query_type)

Function-level: callers, callees, tests, dependents, symbols

list_nodes(...) (admin)

Bulk node listing — agents should use targeted queries instead

add_node(...) (admin)

Register a new file (auto-generated by refresh_graph)

refresh_graph(file_paths?) (admin)

Auto-generate stubs (background/automatic)

refresh_index(file_paths?) (admin)

Background reindex (fire-and-forget)

export_graph(format, scope?) (admin)

Mermaid/DOT export — large dump

get_graph_diff(base_ref?, head_ref?) (admin)

PR review — use review_changes prompt

analyze_changes(base_ref?, head_ref?) (admin)

Risk scoring — use pre_commit_check prompt

find_hotspots(threshold?) (admin)

Complexity dashboard

Roadmap Tools

Tool

Description

get_roadmap()

Current phase, next action, open changesets

get_phase(number)

Full details of any phase by number

update_next_action(text)

Set what the next agent should do

update_phase_status(status)

Mark phase in_progress / blocked

add_phase(phase, name, description, ...)

Queue new upcoming work

complete_phase(number, key_decisions)

Mark done, auto-advance to next

defer_phase(number, reason)

Move a phase to the deferred list

get_full_roadmap(include_decisions?) (admin)

Full history with all decisions inline

Changeset Tools

Tool

Description

list_open_changesets()

All in-progress changesets

start_changeset(id, description, files)

Open a multi-file changeset

complete_changeset(id, decisions)

Close and record decisions

update_changeset_progress(id, last_file, blocker?)

Mid-session checkpoint

Search Tools

Tool

Description

search_codebase(query, limit?, include_content?)

Semantic search — pointers only by default

search_decisions(query, limit?, full?)

Past decisions (default 5, truncated context)

get_history(file_path, limit?, full?)

Recent decisions touching a file (default 5)

write_session_log(...)

Write structured session record

Adaptive Learning Tools

Tool

Description

get_session_context()

THE main "catch me up" call — start every session here (~800 tokens)

get_decision_confidence(file_path?, pattern?)

Outcome-based reliability scores

get_preferences(category?) (admin)

Already in get_session_context

get_learned_rules(file_path?, category?) (admin)

Already in get_session_context

get_project_maturity() (admin)

Dashboard metric — use architecture_overview prompt

Code Reader Tools

Tool

Description

get_signature(file_path)

All public symbols, signatures, line numbers (Python, TypeScript, Go, Rust)

get_code(file_path, symbol)

Full source of one function or class

Playbook Tool

Tool

Description

get_playbook(task_type)

Curated rules for: add_tool, add_service, add_schema, debug_pipeline, commit, write_test

MCP Workflow Prompts (v1.5)

Prompt

Description

review_changes

Staged diff + blast radius + risk score

debug_issue

Symptom -> affected files -> call chain -> hypothesis

onboard_session

Full project context catch-up for new sessions

pre_commit_check

Test coverage gaps + high-risk functions before commit

architecture_overview

Module map + hotspots + dependency summary


Language Support

Feature

Python

TypeScript

Go

Rust

12+ Others

Context graph + blast radius

Y

Y

Y

Y

Y

Semantic code search

Y

Y

Y

Y

Y

Function-level call graph

Y

Y

Y

Y

get_signature / get_code

Y

Y

Y

Y

AST-based chunking

Y

Y

Y

Y

Auto-generated graph stubs

Y

Y

Y

Y

Roadmap + changesets

Y

Y

Y

Y

Y

Session logs + decision search

Y

Y

Y

Y

Y

Supported languages: Python, TypeScript, JavaScript, Go, Rust, Java, Kotlin, C#, Ruby, PHP, C, C++, Swift, Solidity, Vue.


Requirements

  • Python 3.10+

  • ~500MB install (includes ChromaDB + sentence-transformers for semantic search)

  • ~90MB model download on first search_codebase() call

pip install codevira includes the full toolkit out of the box — graph, roadmap, changesets, code reader, learning, call graph, and semantic search.

If you want to skip the ML stack and use only graph-based tools (semantic search disabled), install without the search deps:

pip install codevira --no-deps
pip install pyyaml mcp watchdog tree-sitter tree-sitter-language-pack rich uvicorn starlette pathspec

The search_codebase tool will be hidden from your AI agent; all other tools work normally.


Background

Want to understand the full story behind why this was built, the design decisions, what didn't work, and how it compares to other tools in the ecosystem?

Read the full write-up: How We Cut AI Coding Agent Token Usage by 92%


Contributing

Contributions are welcome. Read CONTRIBUTING.md for the full guide.

Reporting a bug? Open a bug report Requesting a feature? Open a feature request Found a security issue? Read SECURITY.md — please don't use public issues for vulnerabilities.

Testing a release candidate locally? See docs/local-pypi-https.md for setting up a Docker-based HTTPS PyPI registry that mirrors the real PyPI install flow without touching public PyPI.


FAQ

Common questions about setup, usage, architecture, and troubleshooting — see FAQ.md.

Roadmap

See what's built, what's next, and the long-term vision — see ROADMAP.md.

Star History

If Codevira saves you tokens or sanity, a star helps other developers find it. Tracking growth keeps me focused on what's working.

License

MIT — free to use, modify, and distribute.

Available Tools

36 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesShort phase name
filesNoKey files that will be touched
phaseYesPhase number or label
effortNoRough estimate e.g. '~2 hours'
priorityNohigh | medium | lowmedium
depends_onNo
descriptionYesWhat this phase does and why

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
successYes
skill_idYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
phasesYesList of phase dicts to import

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_conflictA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNoOptional — prefer hits on the same file
decision_textYesThe decision text you'd pass to record_decision

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents 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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
git_refNov2.1.2: optional commit sha / PR ref the phase shipped at
backfillNov2.1.2: allow marking any phase done without advancing the queue
completed_atNov2.1.2: ISO date for backfill (defaults to today)
phase_numberYesMust match current phase (unless backfill=True)
key_decisionsYesDecisions made — preserved for all future agents

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYesWhy this is being deferred
phase_numberYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

expandA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesDecision IDs to fetch in full (e.g. ['D0000Z4']).

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_historyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoUntruncated decision text (default false)
limitNoMax decisions (default 5, max 50)
file_pathYesRelative file path

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_impactA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax affected files to return (default 10, max 100)
file_pathYesFile you are about to modify
summary_onlyNoReturn only counts, not the file list (default false)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_nodeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoInclude full rules + dependencies arrays (default false — summary only)
file_pathYesRelative file path (e.g. 'src/services/generator.py')

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_phaseA
Read-onlyIdempotent

Get full details of any phase by number — completed, current, or upcoming.

ParametersJSON Schema
NameRequiredDescriptionDefault
phase_numberYesPhase number (e.g. 19, '8R', '12A')

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_playbookA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
task_typeYesTask type (e.g. 'add_tool', 'debug_pipeline', 'commit')

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_roadmapA
Read-onlyIdempotent

Get current project state: phase number, name, status, next action, and upcoming phases. Call at the START of every session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_contextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_skillA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch keywords (e.g., 'rebase main')
top_kNo
file_pathNoOptional file path to filter skills by their trigger file_patterns (fnmatch). Skills with no patterns match anything (not filtered).

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_contextA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNoMax entries to include (default 5)

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_decisionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoUntruncated decision text
tagsNoFilter to rows matching ALL these tags (v2.1.2 Item 27)
limitNoMax rows (default 20, max 200)
session_idNoFilter to one session
since_dateNoISO 8601 timestamp or YYYY-MM-DD
file_patternNoSQL LIKE pattern on file_path
summary_onlyNoSmallest payload — only {id, summary, do_not_revert} per row (parity with search_decisions). Takes precedence over full.
protected_onlyNoOnly do_not_revert=true rows
include_supersededNoInclude soft-deleted rows (v2.1.2 Item 26)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_skillsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
limitNo
sourceNo
statusNoactive | archived | superseded | allactive

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_tagsA
Read-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?'

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoRequired to retire a do_not_revert (protected) decision — surface its reasoning to the user first
reasonNoOptional short note on why it's outdated
decision_idYesDecision id to retire (e.g. 'D000007')

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_ofB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
decision_idYes

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional filename slug; defaults to slugified(skill.name)
forceNo
skill_idYes
task_typeYesPlaybook directory name (e.g., 'commit', 'add_tool', 'debug_pipeline')

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_graphA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoFunction or class name to query
file_pathYesRelative file path
query_typeNocallers | callees | tests | dependents | symbolscallees

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
decision_idYesDecision id to reaffirm (e.g. 'D000007')

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional list of tag strings (e.g. ["security", "auth"]). Surfaces in list_decisions / list_tags filters.
forceNoIf true, skip the implicit `check_conflict` duplicate/conflict warning step. Use when you've already reviewed a conflict and want to record anyway.
symbolNoOptional 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.
contextNoFree 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.
decisionYesThe decision itself (1 sentence is fine)
file_pathNoOptional file/path the decision pertains to
session_idNoOptional session id to attach to (auto-generated if omitted)
do_not_revertNoIf 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_ifNoThe 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_consideredNoThe 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesShort identifier (e.g., 'git-rebase-workflow')
forceNoSkip duplicate-check warning
sourceNoexplicit
summaryNoOptional one-liner (max 256 B)
triggersNoDiscovery hints: tags (lowercased, set-membership for jaccard ranking) + file_patterns (fnmatch globs for file-scoped retrieval)
procedureYesMarkdown body of how to do this thing (max 2 KB)
do_not_revertNoExempt from auto-archive sweep; flag canonical doctrine.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_decisionsA
Read-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?'

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn untruncated decision text (default false)
limitNoMax results (default 5, max 20)
queryYesKeywords to search (e.g. 'threshold', 'uuid', 'retry')
session_idNoOptional — filter to a specific session
all_projectsNov3.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_onlyNov2.1.2 Item 28: return id+summary+score only (smallest payload)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoReplacement tag list (omit to leave unchanged)
forceNoRequired to set is_outdated=true on a do_not_revert (protected) decision
decision_idYesDecision id to amend (e.g. 'D000007')
is_outdatedNov3.7.0: set/clear the outdated tombstone (omit to leave unchanged; False un-retires a decision marked via mark_decision_outdated)
do_not_revertNoNew flag value (omit to leave unchanged)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
old_idYesDecision 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.
reasonYesWhy the prior decision changed
contextNoOptional context
file_pathNoOptional file path
new_decisionYesReplacement decision text
do_not_revertNoLock the replacement

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
old_idYes
reasonNo
summaryNo
triggersNo
procedureYes
do_not_revertNo

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
next_actionYesExact description of what the next agent should do

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYespending | in_progress | blocked
blockerNoRequired when status=blocked
startedNoISO date override (defaults to today)

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoobservation | goal (default: observation)observation
linksNoOptional D-ids / S-ids this entry references
contentYesFree-text markdown (max 2 KB)
confidenceNo0.0-1.0, optional. Voyager-style belief strength
importanceNo1-10 (default 5). Errors = 7, decisions = 8+
session_idNoOptional session slug; defaults to ad-hoc-XXXXXX

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly states when to 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_getA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoFilter to observation | goal (default: both)
top_kNoMax entries to return (default 10)
session_idNoFilter to one session slug

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoTarget LTM storedecision
tagsNo
forceNoSkip check_conflict warning (e.g., on second-pass promote)
contextNo
entry_idYesThe W-id from working_add / working_get
file_pathNo
do_not_revertNo

TDQS

B3.2/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesOriginal developer prompt
phaseYesphase
decisionsYes
skill_idsNoIDs 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_typeNoWhat 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_stepsYes
session_idYesShort ID (8-char slug)
files_changedYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 17 tool updatesv4.0.0
    • Removedconsensus_check
    • Removedconsensus_propose_supersession
    • Removedconsensus_resolve
    • Removedconsensus_status
    • Removeddistill_preferences
    • Removedget_code
    • Removedget_reflections
    • Removedget_signature
    • Removedlist_reflections
    • Changedrecord_decision3 fields changed
      • addedInput schema / properties / alternatives_considered
        Added 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"
        +}
      • changedInput schema / properties / context / description
        Previous 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."
      • addedInput schema / properties / would_re_examine_if
        Added 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"
        +}
    • Removedreflect
    • Removedsearch_preferences
    • Removedspatial_affordances
    • Removedspatial_heat
    • Removedspatial_nearby
    • Removedspatial_neighborhood
    • Changedwrite_session_log2 fields changed
      • addedInput schema / properties / skill_ids
        Added 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"
        +}
      • addedInput schema / properties / task_type
        Added 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. 2 tool updatesv3.7.0
    • Addedmark_decision_outdated
    • Changedset_decision_flag2 fields changed
      • addedInput schema / properties / force
        Added value: +{
        +  "description": "Required to set is_outdated=true on a do_not_revert (protected) decision",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / is_outdated
        Added 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"
        +}
  3. 50 tool updatesv3.6.0
    • First observedadd_phase
    • First observedapply_skill_outcome
    • First observedbulk_import_phases
    • First observedcheck_conflict
    • First observedcomplete_phase
    • First observedconsensus_check
    • First observedconsensus_propose_supersession
    • First observedconsensus_resolve
    • First observedconsensus_status
    • First observeddefer_phase
    • First observeddistill_preferences
    • First observedexpand
    • First observedget_code
    • First observedget_history
    • First observedget_impact
    • First observedget_node
    • First observedget_phase
    • First observedget_playbook
    • First observedget_reflections
    • First observedget_roadmap
    • First observedget_session_context
    • First observedget_signature
    • First observedget_skill
    • First observedget_working_context
    • First observedlist_decisions
    • First observedlist_reflections
    • First observedlist_skills
    • First observedlist_tags
    • First observedorigin_of
    • First observedpromote_skill_to_playbook
    • First observedquery_graph
    • First observedreaffirm_decision
    • First observedrecord_decision
    • First observedrecord_skill
    • First observedreflect
    • First observedsearch_decisions
    • First observedsearch_preferences
    • First observedset_decision_flag
    • First observedspatial_affordances
    • First observedspatial_heat
    • First observedspatial_nearby
    • First observedspatial_neighborhood
    • First observedsupersede_decision
    • First observedsupersede_skill
    • First observedupdate_next_action
    • First observedupdate_phase_status
    • First observedworking_add
    • First observedworking_get
    • First observedworking_promote
    • First observedwrite_session_log

TDQS

A3.9/5.0

Scored across 36 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    An 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
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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 npm
    11
    MIT