@event4u/agent-config
OfficialAn MCP server that equips AI coding agents to inspect, validate, maintain, and use an @event4u/agent-config project install, including its skills, rules, commands, memory, history, roadmaps, code graph, and test suite.
Discover and inspect installed artifacts: list skills, rules, and commands; suggest skills for a task; read resource bodies; lint skill/rule/command markdown.
Diagnose project health and conformance: run
doctor_report,conformance_check, and telemetry reports.Maintain generated metadata: regenerate or drift-check
CAPABILITIES.yaml, update roadmap dashboards, and archive completed roadmaps.Manage engineering memory: look up and fetch memory entries, record memory signals, and report memory backend status.
Read and append session chat history with filtering, index/detail views, and dry-run support.
Analyze code relationships: inspect symbols, find paths, assess diff impact, find related tests, and detect dead symbols.
Estimate AI-council costs without billing, and run consumer-project vitest suites under a fixed safety envelope.
Supports both read-only inspection and controlled filesystem/git-index mutations for maintenance workflows.
Integrates with GitHub to manage pull requests with structured descriptions and facilitate the implementation workflow.
Integrates with GitHub Copilot to inject project-specific skills and rules, enhancing its behavior for consistent code generation and review.
Integrates with Jira to retrieve ticket information and structure pull request descriptions based on Jira issues.
Integrates with Linear to fetch issue details and structure pull request descriptions accordingly.
Installs into your user-level AI tool configuration; your repository only gets an agents/overrides/ folder for your own changes. Works with 20 AI coding tools.
Agent Config — teach your AI coding agents to check their work before they say done
Install once. Your AI coding tools are told to plan, test and verify before they say done; on Claude Code a turn that changed files without checking them can be stopped.
npx -y @event4u/agent-config initFree and MIT-licensed. Node 22.6 or newer on macOS, Linux or WSL2. Costs more tokens: about 1.7× to 3.3× on Claude Haiku, not measured on larger models. What it costs →
On a desktop this opens a browser wizard: pick your role and your tools, click Finish. Nothing is written before you do.
Try it in 30 seconds
Not ready to install anything? Drop one read-only checker into your repo and ask it whether your branch is really done:
mkdir -p .claude/agents
curl -fsSL https://raw.githubusercontent.com/event4u-app/agent-config/main/docs/wedge/production-validator/production-validator.md \
-o .claude/agents/production-validator.md
# then in Claude Code: @production-validator check this branch is actually doneproduction-validator reads the code that would ship, hunts mocks and placeholders on that path and asks for proof that it ran. It changes nothing. What it checks →
Related MCP server: Agent Module
What changes
Before. You ask your agent to add a CSV export. It writes a handler that returns a hard-coded placeholder, the existing tests stay green and it replies "Done — export implemented." Nothing ever ran the new code.
After. In Claude Code you ask @production-validator whether the branch is
really done. It reads the code that would ship, finds the placeholder and
answers NOT READY with the exact file and line. On a branch that is really
finished it answers READY and reports nothing. We tested this on two cases:
one with a placeholder left in, one finished.
On Claude Code the package can also refuse to let a turn end on "done" when the agent changed files and ran nothing to check them. On every other tool that is an instruction the agent is asked to follow, not a block.
What your agent is asked to do
Default behavior | With agent-config |
Guess and edit blindly | Analyze code before changing it |
Drift from project conventions | Follow detected stack conventions |
Skip or invent tests | Write tests in the project's framework |
Generic commit messages | Conventional Commits with scope + ticket links |
Skip quality checks | Run the project's quality pipeline and fix reported errors |
Open PRs without context | Structured PR descriptions from Jira / Linear / GitHub |
Claim "done" without proof | Verify with real execution before claiming done |
It changes what the agent is told to do, not how smart the model is: a weaker model (Claude Haiku) gained measurable discipline, while on a strong model the same test found no gain. We publish results like that one instead of hiding them. The whole story →
How it fits together

One install gives the agent you already use a set of skills, agent rules and slash commands. Rules that matter on every task are always on; the narrower ones load when a task needs them. See every slash command →
What it costs
More tokens. On Claude Haiku the default setting cost 3.3× a run with no rules on the tasks that test checking discipline and about 1.7× over the full 30-task corpus; loading everything cost 11.7×. Measured on Claude Haiku only.
Blocking on Claude Code only. Elsewhere the rules are instructions: they cut violations but do not remove them.
Network. By default nothing leaves your machine except the daily update check against the npm registry and a daily question to GitHub, through your own
ghlogin, whether a pull request you pushed has merged. The update check is off in CI, without a terminal or withAGENT_CONFIG_NO_UPDATE_CHECK=1. Telemetry is off. The second-opinion feature is off until you set it up; then it sends work to other AI providers with your own API keys, which bill you. What leaves your machine →Your machine. Node 22.6 or newer. Standing cost of the always-on rules per tool: table.
Your way out.
agent-config uninstall --globalremoves only its own entries and leaves other tools' config untouched.
Benchmark and cost, explained →
See what a change touches
agent-config code-graph map --open draws a local map of your repository: who calls what, which tests cover it, data, interfaces and delivery. Pick a file and every area it reaches lights up. It runs offline and keeps file:line for every fact.

Open the demo map → (sample project, not your code) · Code map →
Pick your profile
The wizard asks for your role and installs a focused set for it instead of the whole catalog. Most of them are not engineering roles.
Profile | For | Starts you with |
| Engineers who ship code |
|
| Solo and early-stage founders |
|
| Writers, ghostwriters, marketers |
|
| Shops delivering for several clients |
|
| CFOs, fractional finance, FP&A |
|
| RevOps, support, SRE-adjacent work |
|
Workflows
You start a piece of work, not a list of commands. These cover most days:
Command | What it does for you |
| Takes a free-form request through refine, plan, implement, test and verify, and reports back; it never commits for you. |
| The same loop for a ticket: it refines the ticket first and stops to ask when something is ambiguous. |
| Reviews your local diff before the PR with focused reviewers (bugs, security, tests, quality, architecture, spec, overbuild) and merges their verdicts. |
| Stages your changes and commits them as logical Conventional Commits, after showing you the split. |
| Checks the install and reports anything missing or changed on disk, with the next command to fix it. |
When a request is unclear the agent stops and asks with numbered options instead of guessing. Implement a change →
Use it in your project
Start with the Quickstart below; the full walk-through is on the site. Install →
Prove it
Every measured figure in this README carries a marker that points at a recorded, re-runnable piece of evidence. The build fails when one stops resolving. The proof page lists each claim with its evidence, including the runs where the package changed nothing, plus commands you run yourself on a fresh checkout. Verify it yourself →

Contribute
Skills, rules and commands are plain Markdown under src/; one command rebuilds every tool's copy and runs the checks. Development has the loop. Contributing guide →
Quickstart
npx -y @event4u/agent-config init # browser wizard on a desktop
npx -y @event4u/agent-config init --tools=claude-code,cursor # no wizard: CI, scripts, serversinit finds the AI tools you have installed and selects them for you. In CI, without a terminal or with --yes or --tools=<ids> it installs without the wizard; both paths run the same installer. install is the same wizard under another name.
Installer default: user-global. agent-config init installs into your home directory — the package under
~/.event4u/agent-config/ and each AI tool's user-level folder such as
~/.claude/ or ~/.cursor/ — and writes no skills, rules or commands into
your repository, which only gets an agents/overrides/ folder for your own
changes plus a few gitignored bookkeeping files and a block each in
.gitignore and .gitattributes; agent-config init --project creates just
those in a repository and nothing else.
Then, in your AI tool:
/work "your first real task"Later | Command |
Change role, profile or tools |
|
Open the settings screen |
|
Update to the latest release |
|
Check the install |
|
Remove it |
|
What it is and what it is not
Agent Config is a set of skills, agent rules, slash commands and guidelines that it writes into each AI tool's own format. Skills use the open Agent Skills SKILL.md format with a few package-specific frontmatter keys.
It is not an agent. Your AI agent still runs the loop, calls the LLM and uses its own tools; the package changes what that agent is told to do. It does not lock you to a model or a vendor.
What's inside
How the counts in the badges at the top are counted — one counter, update_counts --check, re-derives all six from the tree and fails the build when one is off by one. Commands 214 counts every command file, including the ones in subfolders; all 213 are listed in the Commands section of the catalog page. Rules 122 counts the source rules, while the linked folder holds 121 because one rule is switched off and not shipped. Personas 29 leaves out the directory README. These are counts of files: none of them measures quality or adoption.
You do not get all of it at once. On tools without a way to hide skills, a new install ships a smaller set chosen for your role; Claude Code and Codex get every skill and show them as needed. Browse the catalog →
Customize
Rule level.
--profile minimal | balanced | fullat install sets the rule level: how many rules load on every task. It is separate from the role profile above;balancedis the default andfullcosts the most tokens.Your own changes. Put them in
agents/overrides/in your repository instead of editing the installed files.Settings.
agent-config configopens the settings screen with search and reset.Skill sets for your role. Add a set of skills for another domain without switching profile.
Supported tools
init detects 23 AI coding tools and works with 20 of them. What a tool gets depends on its tier:
18 tools get their own format written into their user-level folder. Which of rules, skills and commands each one reads is in the table below. Only Claude Code can block a turn; on the others the rules are instructions.
Codex CLI is one of those 18 but reads skills only.
GitHub Copilot gets a discovery plugin: a read-only MCP server that points to the install.
Claude Desktop gets skill ZIPs that you upload yourself under Settings → Customize → Skills.
Aider, Zed and JetBrains are export-only: you add the exported file to their config yourself.
Tool | Rules | Skills | Commands | How it works |
Claude Code | ✅ | ✅ | ✅ | Reads |
Cursor | ✅ | — | ☑️ | Reads |
Cline | ✅ | — | ☑️ | Reads |
Windsurf | ✅ | — | ☑️ | Reads |
Gemini CLI | ✅ | — | ☑️ | Reads |
GitHub Copilot | ✅ | — | ☑️ | Discovery plugin (read-only MCP server, no hooks); project rules via |
Roo Code | ✅ | — | ☑️ | Auto-discovers |
Codex CLI | — | ✅ | — | Reads skills from |
Continue.dev | ✅ | — | ☑️ | Auto-discovers |
Aider | 📌 | — | — | Export-only: add the file to |
Augment (VSCode/IntelliJ) | 📌 | — | — | Global-only; project writes marker |
Claude Desktop | — | 📦 | 📦 | Skill ZIPs (commands bundled as skills) that you upload yourself under Settings → Customize → Skills |
✅ native ☑️ text reference (in AGENTS.md, not a native slash command) 📌 marker or export only 📦 ZIP you upload yourself — not available
Plugins. Augment CLI can also install it as a plugin with rules, skills and commands. GitHub Copilot gets a discovery-only plugin: a read-only MCP server and a skill that points to the install, with no hooks. For per-project Copilot instructions run agent-config export --tool=copilot-instructions --output=.github/copilot-instructions.md. The Claude Code marketplace plugin is deprecated because the npm install already carries the content and the hooks; agent-config doctor flags a leftover plugin.
Teams. Every tool you install is recorded in agents/installed-tools.lock; a new team member runs npx @event4u/agent-config sync after cloning.
Cloud sessions. A Claude Code cloud session (claude.ai/code, claude --cloud) starts on a fresh clone and does not see the home-directory install, so it runs without agent-config skills, rules and hooks. See cloud sessions.
Works with agent-switch
agent-switch runs several agent accounts on one machine, each in its own profile. The two compose: agent-switch keeps the accounts apart and agent-config shapes what the agents do inside them. Its settings stay scoped to the active profile. How they work together →
Who this is for
Anyone whose AI coding agent says "done" too early. The habits — analyse first, test, verify, commit cleanly — work in any stack. The deepest skill sets are for Laravel and modern PHP (Pest, PHPStan, Rector, Eloquent, Livewire), then Symfony, Next.js and React. Cross-stack skills cover API design, testing, security, databases, Docker, Git, CI, review, threat modeling and prompt engineering.
The skills come from production work on TypeScript and PHP codebases. Treat coverage on other stacks as promising, not proven. Tell us where it falls short. Discussions →
Legal and safety notes
Legal pack — not legal advice. The EU/DE legal skill set (contract, NDA and DPA review) is a research and drafting aid only. It does not replace a qualified lawyer and must not be relied on for a concrete matter. Read the legal notice (LEGAL_NOTICE.md) before use.
Security reports: SECURITY.md. Security features →
Documentation
Page | What you find there |
Every install path, flags and what gets written where | |
From install to a finished change | |
Keeping current and leaving cleanly | |
Implement, review, plan, commit and open a PR | |
Code map, security, cost, second opinion, memory | |
Every | |
The evidence behind every number |
Machine-readable index for AI tools: llms.txt.
Troubleshooting
Start with agent-config doctor: it flags a binary missing from PATH, version mismatches and leftovers, each with a one-line fix. If a rule or hook did not fire, agent-config routing:doctor reports which checks are active and why. Upgrade problems such as a missing command or a skill listed twice: troubleshooting.
Development
Working on the package itself? Edit src/ only and rebuild the generated trees:
task sync # regenerate dist/agent-src/ and .augment/
task generate-tools # regenerate .claude/, .cursor/, .clinerules/, .windsurfrules
task ci # full pipeline — green before PR
task test # unit + integration tests
task dev:setup # boot the onboarding wizard against the working treeFrom a source checkout, run the CLI as ./agent-config <command>; npx @event4u/agent-config does not resolve there without npm link. Build it with npm run build:cli if dist/cli/agent-config.js is missing. The whole stack is TypeScript.
Development guide · Quality and CI · CONTRIBUTING.md · CHANGELOG · Breaking changes
Requirements
Node 22.6 or newer.
npx -y @event4u/agent-config initis the install path; nothing else is needed.Platform: macOS 12.3+, Linux and WSL2. Git Bash needs Developer Mode for symlinks. Contributors also need Task.
Windows. Native PowerShell and cmd are not supported for the file install; use WSL2. Without WSL2, point any MCP client at the built-in MCP server and the skills, rules and commands are available as prompts and resources:
npx -y @event4u/agent-config mcp-serverFunding
The package is free, MIT and stays that way — no paid tier, no dual licensing. If it saves you time and you want to chip in, the GitHub Sponsor button at the top of the repo is the whole mechanism. If you would rather not, use it anyway; nothing here is gated on it.
License
MIT.
mcp-name: io.github.event4u-app/agent-config
Available Tools
26 toolscapabilities_indexA
Regenerate CAPABILITIES.yaml, the package's coverage index of skills, rules, commands, and guidelines. Use after adding or removing an artifact to keep the index current. Pass check: true to run in read-only CI mode (fails instead of writing on drift).
| Name | Required | Description | Default |
|---|---|---|---|
| check | No | When true, run in read-only drift-check mode instead of writing the index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool writes/regenerates the index, and importantly explains the read-only CI behavior ('fails instead of writing on drift'). This complements the readOnlyHint: false annotation by giving concrete failure semantics, though it does not detail side effects or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and resource, then usage timing, then the parameter mode. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter write tool with no output schema, the description fully covers what the tool does, when to use it, and how the parameter changes behavior. The inclusion of failure mode in CI makes it operationally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the 'check' parameter with high coverage, and the description adds practical context by explaining the CI-mode behavior. This reinforces the schema without redundancy, raising it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Regenerate') and a clear resource ('CAPABILITIES.yaml'), identifying it as the package's coverage index. This distinguishes it from sibling tools like list_skills or list_rules, which query rather than update the index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use after adding or removing an artifact to keep the index current,' which is clear guidance for when to invoke it. It also explains the CI-mode use case with 'check: true', but does not name alternative tools to use instead of this one, such as list_* commands.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat_history_appendA
Append one structured entry to the consumer project's chat-history log (a JSONL file). Use to record a decision, note, or phase marker that should persist into a later session or be distilled by mine_session. Writes to the filesystem (agents/runtime/.agent-chat-history by default; agents/.agent-chat-history and .agent-chat-history accepted for back-compat) and returns the written entry plus its resolved target path. Path-scoped: a path outside the allowlist, or any traversal escaping the project root, raises an error before writing. Set dry_run: true to preview the entry and target path without touching disk.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional path override. Must resolve to `agents/runtime/.agent-chat-history` (current default), `agents/.agent-chat-history`, or `.agent-chat-history` under consumer_root. | |
| text | Yes | The entry body to record. | |
| dry_run | No | When true, return the entry and resolved target path without writing to disk. | |
| session | No | Optional 16-char session id to group the entry under. Defaults to the current session. | |
| entry_type | No | Short ``t`` tag categorising the entry (e.g. note, decision, phase). Defaults to ``note``. | |
| min_schema_version | No | Refuse to write if the on-disk history schema is older than this version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint: false, annotations are minimal. The description fully discloses the write behavior, filesystem target, return value ('returns the written entry plus its resolved target path'), safety validation ('path outside the allowlist... raises an error before writing'), and the dry_run side-effect-free preview. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the primary action, then usage context, then safety/behavior specifics. Every sentence adds critical information: what it does, when to use it, the write behavior and safety, and the dry_run escape hatch. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter write tool with no output schema and minimal annotations, this description is remarkably complete. It covers the target file locations, the return payload, path restrictions, dry_run behavior, and downstream consumers. An agent can confidently select and invoke this tool without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful behavioral semantics for the 'path' parameter (allowlist and traversal checks) and clarifies dry_run's purpose. It also explains the entry body ('text') in the context of a JSONL log, enhancing understanding beyond the schema's bare field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Append one structured entry to the consumer project's chat-history log (a JSONL file).' This is a specific verb+resource that distinguishes it from siblings like chat_history_read, which retrieves the log, and other memory tools that operate on different stores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to record a decision, note, or phase marker that should persist into a later session or be distilled by `mine_session`.' This gives clear context for when to use the tool. It also notes back-compat paths and the dry_run option, but it does not explicitly state when not to use it (e.g., for ephemeral or non-history data), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat_history_readARead-only
Read recent entries back from the consumer project's chat-history JSONL (agents/runtime/.agent-chat-history; agents/.agent-chat-history accepted for back-compat). Use to recover context from an earlier session — decisions, notes, phase markers — at the start of a new task. Read-only. Returns the resolved file path plus a list of matching entries (newest last). Combine session, last, and entry_type to narrow the result.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | Return only the most recent N entries, after other filters apply. | |
| path | No | Optional history-file path override; defaults to the standard chat-history location under the project root. | |
| around | No | Timeline anchor: return the entries around this ref (from a detail:"index" row) instead of the filtered list — depth_before/depth_after neighbours plus the anchor. Refs are within-file ordinals; rotation invalidates them. | |
| detail | No | 'index' returns compact rows (ref, t tag, ~100-char preview, tokens_estimate) instead of full entries — scan first, then re-read the refs you need via `around` or a narrowed filter. History entries are large, so index mode pays off here. 'full' (default) returns complete entries. | full |
| session | No | Filter to a single 16-char session id. | |
| entry_type | No | Filter by the `t` tag (e.g. note, decision, phase). | |
| depth_after | No | Neighbours after the anchor (with `around`). Defaults to 3. | |
| depth_before | No | Neighbours before the anchor (with `around`). Defaults to 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it adds valuable context: returns the resolved file path plus matching entries (newest last), describes path resolution with back-compat, warns that rotation invalidates refs, and notes that history entries are large so 'index' mode is helpful. These details give the agent a clear behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at four sentences, each serving a distinct purpose: what it reads, when to use it, return shape, and filter guidance. No redundant text or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 optional parameters and no output schema, the description covers the core aspects: purpose, file location, filtering hints, and return format. It lacks explicit mention of error conditions or edge cases, but the schema and rich parameter descriptions fill the gap reasonably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a useful tip about combining 'session', 'last', and 'entry_type' filters, but it doesn't further explain each parameter or add semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' with a concrete resource ('chat-history JSONL') and gives exact paths, making the tool's function unambiguous. It differentiates from sibling 'chat_history_append' by emphasizing read-only access and mentions return contents (entries, resolved path).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the intended use case: recovering context from earlier sessions at the start of a new task. It also advises combining filters to narrow results, but it doesn't explicitly mention when not to use it or name alternative tools (e.g., memory_get) for different context sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conformance_checkARead-only
Run the consumer conformance contract (doctor --ci plus installed-and-firing checks) and return pass/fail per check. Use to verify a consumer project's install is fully wired before relying on it. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, and the description reiterates 'Read-only,' with no contradiction. It adds behavioral detail by naming the commands executed and stating that results are returned per check, going beyond the annotation's simple safety flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, command details, and output type, then a clear usage recommendation. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool with no output schema, the description adequately covers the operation, return semantics (pass/fail per check), and when to use it. There are no essential gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is trivially 100%. No parameter information is needed, and the baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource combination ('Run the consumer conformance contract') and clearly identifies the underlying command (`doctor --ci` plus installed-and-firing checks) and output (pass/fail per check). It distinguishes this from sibling tools like `doctor_report` or `run_tests` by emphasizing verification of a consumer project's install wiring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage scenario: 'Use to verify a consumer project's install is fully wired before relying on it.' It does not mention when not to use the tool or alternatives, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
council_estimateARead-only
Estimate the token cost of an AI-council debate over a given input (roadmap, diff, prompt, or file set) without spending — no network call, no billing. Use before deciding whether to authorize a real council run. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Council depth tier to estimate for. Defaults to the configured default depth. | |
| input_path | Yes | Path to the roadmap, diff, or file to estimate council cost for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already marks it as read-only, and the description adds meaningful behavioral context beyond that: 'no network call, no billing' and 'without spending'. This clarifies the side-effect-free nature in a way the annotation alone does not convey. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and packs in purpose, safety, and timing without any filler. It is front-loaded with the action verb and resource, making it immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple read-only nature and the rich annotations and schema, the description adequately covers purpose, usage timing, and safety. It does not describe the return format or precision of the estimate, and since there is no output schema, that is a minor gap, but not enough to lower the score further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters, so schema coverage is 100%, giving a baseline of 3. The description adds value by specifying that the input can be a 'roadmap, diff, prompt, or file set', which expands on the schema's narrower 'roadmap, diff, or file' phrasing. Depth is not mentioned, but the schema's enum covers it sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Estimate the token cost') and the resource ('AI-council debate over a given input'). It also distinguishes itself from a real council run by emphasizing 'without spending — no network call, no billing', leaving no ambiguity about its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use before deciding whether to authorize a real council run' explicitly defines when to use this tool. While it provides a clear context, it does not explicitly mention when not to use it or name an alternative tool, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctor_reportARead-only
Run the consumer-project doctor diagnostic and return a structured health report (install drift, hook wiring, settings schema, discovery manifest freshness). Use to triage a misbehaving install. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the tool is read-only, and the description reinforces this with 'Read-only.' Beyond that, it adds useful behavioral context about the nature of the diagnostic (checks for drift, hook wiring, settings schema, freshness) and the structured form of the output, which is not fully derivable from the annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and resource, and contains zero filler or redundant content aside from the harmless repetition of 'Read-only.' Every clause adds information about the tool's purpose, output, or usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool with no output schema, the description provides all necessary context: what it runs, what the report covers, why you would use it, and its safety profile. The annotations and schema further support completeness, leaving no significant gaps for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline of 4 applies per the rubric. The schema is fully covered (100%) and the description does not need to clarify any parameter details because none exist. The description appropriately focuses on behavior and use case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and names a precise resource ('consumer-project doctor diagnostic'), while detailing the report's contents (install drift, hook wiring, settings schema, discovery manifest freshness). This clearly distinguishes it from siblings like run_tests or telemetry_report by identifying a unique diagnostic target and purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use to triage a misbehaving install.' This provides clear context for the appropriate use case. However, it does not mention when not to use it or suggest alternatives among the sibling tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_deadARead-only
Symbols with no accepted reference that no declared entry point names. REFUSES (status refused) while a source is unreadable: with no exportedness recorded, an exported-but-unimported symbol is indistinguishable from a dead one. Never a deletion recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_points | No | Path under this root to a newline-separated id/label list; `#` comments ok. | |
| accept_missing_exports | No | Answer anyway, accepting the gap. Never a default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the tool REFUSES with status 'refused' when a source is unreadable, and explains the rationale. It also states 'Never a deletion recommendation', which adds important behavioral context for an agent deciding whether to rely on the output. This is meaningful beyond the read-only hint, though it doesn't cover output format or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise and front-loaded with the purpose in the first sentence. However, the first sentence is somewhat cryptic and could be clearer, but it earns points for brevity and focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the core behavior (identifying dead symbols), the refusal condition, and the non-deletion stance. It doesn't specify the output format, but the parameter schema covers parameter details. For a read-only analysis tool with optional params, this is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents their meaning. The tool description adds no additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines the tool's output as 'Symbols with no accepted reference that no declared entry point names', which identifies dead symbols, but it lacks an explicit action verb like 'list' or 'find'. It distinguishes from siblings like graph_impact by focusing on dead symbols, though it doesn't name the alternative directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling tools such as graph_impact or graph_path. It only mentions behavioral conditions (refusing on unreadable sources) and the non-deletion recommendation, but no when-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_impactA
What a diff can break: callers, dependents and test files reaching the changed symbols. Walks only stated-fact edges, never a same-name guess, and reports the guesses refused. Runs git diff for the rev.
| Name | Required | Description | Default |
|---|---|---|---|
| diff | Yes | Git rev to diff HEAD against, e.g. `HEAD~1`. | |
| depth | No | Hop limit. | |
| untested_only | No | Instead return changed symbols no test imports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotation: it walks only stated-fact edges, never guesses on same-name matches, reports refused guesses, and runs `git diff`. The annotation (readOnlyHint: false) already indicates it may not be read-only, and the description does not contradict this. It adds valuable algorithmic context that the annotation does not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using a single lead-in sentence followed by two brief clarifications. It is front-loaded with the core purpose and includes no filler or repetition. Every clause contributes to understanding the tool's behavior and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description conveys the essential output (callers, dependents, test files) and the algorithm's constraints (stated-fact edges, refused guesses). It does not explain the `untested_only` parameter's behavior, but the schema covers that. For a tool with three parameters and a non-trivial purpose, the description is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (diff, depth, untested_only). The description only indirectly references the diff parameter by mentioning `git diff`; it adds no new meaning for depth or untested_only. This is the baseline score when the schema carries the explanatory load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it identifies what a diff can break by finding callers, dependents, and test files that reach changed symbols. It also distinguishes itself from likely siblings by specifying it walks only stated-fact edges, never guessing on name matches, and reports refused guesses. This gives a specific, actionable purpose that sets it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It mentions that it runs `git diff`, implying it is for diffs, but it does not explicitly state scenarios or exclude other tools. No sibling references or conditions are given, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_nodeARead-only
One symbol in full: where it is declared, what reaches it, what it reaches, and how connected it is. Resolves EXACTLY (node id, then label) and refuses anything it cannot — it never scores free text, so an answer is always about the node you named.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Node id `<relpath>#<sym>` or an exact label. | |
| depth | No | Hop limit. | |
| relation | No | Restrict to one relation. Omit for all of them. | |
| direction | No | Which edges to walk. `in` = who reaches it, `out` = what it reaches. | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply only readOnlyHint, so the description carries most of the burden and delivers: resolution is deterministic and ordered (id, then label), the tool refuses unresolvable input rather than approximating, and results are guaranteed to concern the named node. It adds no permission or rate-limit context, but the determinism/failure behavior is genuinely valuable beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the capability and then the resolution guarantee. No filler, though the second clause is emphatic enough to verge on rhetorical redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly sketches the return shape: declaration location, inbound edges, outbound edges, and a connectivity measure. Combined with a read-only annotation and a fully documented 4-parameter schema, an agent has enough to call it correctly, though the connectivity metric is not quantified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the direction/relation/depth parameters are already well documented in the schema, including the in/out meaning. The description restates those semantics in prose ('what reaches it, what it reaches') without adding syntax, defaults, or edge-case behavior. Baseline 3 for a schema that does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb+resource: retrieve one symbol in full, covering its declaration site, incoming and outgoing edges, and connectivity. It implicitly separates itself from fuzzy-search siblings by stressing exact resolution and refusal of free text, though it never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear applicability condition — you must supply an exact node id or label — and a clear when-not: free text is never scored, so this is the wrong tool for fuzzy lookups. The only gap is that it doesn't name the sibling to use instead for text search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_pathARead-only
The shortest relation chain between two symbols, direction preserved. Answers "how does A reach B" without reading the files between. (no path found) when unconnected is an answer.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Goal node id, label, or free text. | |
| from | Yes | Start node id, label, or free text. | |
| budget | No | Token budget for lines. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: it returns a shortest path, preserves direction, and uses '(no path found)' as an answer for unconnected nodes. This goes beyond the annotation by describing output semantics and performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and a clarifying example. It includes a performance note and a sentinel behavior without wasting words. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three parameters, full schema coverage, and no output schema, the description covers the essential behavior: shortest path, direction preservation, and the unconnected case. It is complete for an agent to invoke correctly without additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is already documented. The description does not add extra meaning beyond what the schema provides, such as elaborating on 'from' and 'to' or the 'budget' parameter. The description reinforces the path-finding purpose but does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: finding the shortest relation chain between two symbols while preserving direction. It explicitly answers the question 'how does A reach B' and distinguishes itself from siblings like graph_query by noting it does so without reading files between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when a path between symbols is needed without reading intermediate files. It implies a lightweight, read-only operation but does not explicitly mention alternatives or exclusions. This is useful but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_queryARead-only
A symbol's direct outgoing relations — calls, imports, uses, inherits — each line carrying its confidence and resolution mechanism. For "what does this touch" before reading a file.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | Token budget for lines. | |
| symbol | Yes | Node id, label, or free text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, covering the read-only nature. The description adds behavioral detail: it specifies the output includes confidence and resolution mechanism per line, and that it covers direct outgoing relations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste. The core functionality is front-loaded in the first sentence, and the second sentence adds a quick usage hint. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two parameters, the description covers purpose, output format, and usage context. It lacks explicit error handling or edge cases, but that is not critical for a query tool. The use case is well stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'symbol' and 'budget' are adequately documented in the schema. The description does not add extra meaning about parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it returns a symbol's direct outgoing relations (calls, imports, uses, inherits) with confidence and resolution mechanism. It also provides a concrete use case ('what does this touch before reading a file'), which distinguishes it from siblings like graph_path or graph_impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for when to use it: 'For what does this touch before reading a file.' It implies the tool is for exploring dependencies before diving into code, but it does not explicitly mention alternatives or when not to use it. This is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_tests_forARead-only
Which test files exercise a symbol, derived from a test file importing it or its module. Empty means no test imports it — a finding, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Node id `<relpath>#<sym>`, label, or free text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering safety. The description adds meaningful behavioral context: 'Empty means no test imports it — a finding, not an error.' This clarifies an expected edge case that the annotation doesn't convey, adding value beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that explains the purpose and the key behavioral nuance (empty result meaning). No wasted words, perfectly concise for the complexity level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only graph query with one well-documented parameter and no output schema, the description fully covers what the agent needs: what it does, how to interpret the result, and the safety profile (via annotation). Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the symbol parameter documented as 'Node id `<relpath>#<sym>`, label, or free text.' The description adds no additional parameter details beyond that. Per the baseline for high coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Which test files exercise a symbol' – clearly a query about test coverage. It distinguishes itself from sibling graph tools (graph_dead, graph_impact, graph_path) by focusing on test files and symbol imports, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (checking test coverage of a symbol) and provides clear context. It doesn't explicitly exclude alternatives like graph_path or graph_impact, but the purpose is unambiguous enough to guide selection among the graph_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_skillsARead-only
Lint skill, rule, command, guideline, and persona markdown files for frontmatter and structural errors. Use before committing or opening a PR that adds or edits any of those artifacts, to catch schema violations early. Read-only — never writes files or spawns git. Returns the scripts/skill_linter.py --format json payload: a summary object (pass / pass_with_warnings / fail / total counts) and a per-file results array with severity-tagged findings. Pass paths to lint a subset; omit for a full tree scan.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Repo-relative paths to lint (files or directories). Empty or missing → full tree scan via gather_all_candidate_files. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explicitly states the tool is read-only, never writes files, never spawns git, and details the exact return payload structure (summary and per-file results). This adds meaningful behavioral context well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, front-loading the primary purpose, then usage guidance, then safety/behavior, then return format, and finally parameter usage. Every sentence contributes valuable information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, when to use, safety/read-only behavior, return payload, and parameter semantics. With a simple one-parameter input schema and no output schema, the description provides all necessary context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a thorough description for the 'paths' parameter, including the meaning of empty/missing values (full tree scan). The description merely restates this ('Pass 'paths' to lint a subset; omit for a full tree scan') without adding new information. Schema coverage is 100%, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (lint) and a clear resource (skill, rule, command, guideline, and persona markdown files) to state what the tool does. It distinguishes itself from siblings by being the only linting tool among the listed tools, and it mentions 'frontmatter and structural errors' as the focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for when to use the tool ('Use before committing or opening a PR that adds or edits any of those artifacts'), which is strong guidance. It does not explicitly name alternatives or say when not to use it, but the sibling tools are clearly unrelated in function, so the omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commandsARead-only
Enumerate every slash command the server currently exposes as a prompt, each with its name and description. Use to discover available commands before routing a user request to one. Read-only manifest view, takes no arguments. Returns a count plus a commands array.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the readOnlyHint annotation: it labels itself a 'Read-only manifest view,' states it takes no arguments, and reveals the response shape ('Returns a count plus a commands array'). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: the first states what it does, the second gives usage context, read-only nature, argument count, and return format. Every sentence earns its place with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no parameters and no output schema, the description fully covers purpose, usage context, behavior, and return structure. Sibling relationships are implied through the tool name and the usage note, so no further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema coverage is 100%, so there is nothing to misinterpret. The description reinforces 'takes no arguments,' matching the empty schema. Baseline for 0 params is 4, and no further parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Enumerate') and resource ('every slash command the server currently exposes as a prompt'), and clarifies what's included ('name and description'). This clearly distinguishes it from siblings like list_rules and list_skills, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use: 'Use to discover available commands before routing a user request to one.' This gives clear context. However, it does not mention alternatives or when not to use it (e.g., for rules or skills), so it lacks the explicit exclusion/alternative guidance of a top-tier score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesARead-only
Enumerate every behavioral rule the server exposes as a resource, each with its URI, name, and description. Use to discover which rules are in effect, then fetch a body with read_resource_body or resources/read. Read-only manifest view, takes no arguments. Returns a count plus a rules array.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true. The description adds that it is a 'read-only manifest view', takes no arguments, and returns a 'count' plus 'rules' array. This offers concrete behavioral detail beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states purpose and result structure; the second gives usage and return format. No redundant wording, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument list tool with no output schema, the description fully covers purpose, usage, and return shape. It even notes the next step (fetch a body), making it contextually complete relative to its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and the description explicitly states 'takes no arguments'. Since schema coverage is 100% trivially, the description adds confirmation of the empty parameter list. Baseline for zero params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Enumerate' and identifies a distinct resource: 'behavioral rule the server exposes as a resource'. It explicitly lists what each rule includes (URI, name, description), distinguishing it from sibling tools like list_commands and list_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: 'Use to discover which rules are in effect' and explicitly names alternative tools for a follow-up action (read_resource_body or resources/read). This tells the agent when to use this tool and what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsARead-only
Enumerate every skill the server currently exposes as a prompt, each with its name, description, and source. Use to discover which skills are available before suggesting or invoking one. Read-only manifest view, takes no arguments. Returns a count plus a skills array.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is reinforced by 'Read-only manifest view,' and the description adds behavioral details such as taking no arguments and returning a count plus a skills array. Since there is no output schema, explaining the return shape is valuable context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three sentences are tightly packed: definition, usage context, and behavior/return. No waste or redundancy; each clause serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing tool, the description covers what it returns, when to use it, and its read-only nature. Given the lack of output schema, the return value explanation is sufficient, and the tool's simplicity means no further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the input schema is an empty object. The description explicitly notes 'takes no arguments,' and with no parameters to document, the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Enumerate every skill the server currently exposes as a prompt,' clearly identifying the action and resource. It distinguishes itself from sibling listing tools like list_commands and list_rules by focusing specifically on skills. The mention of name, description, and source further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use: 'Use to discover which skills are available before suggesting or invoking one.' However, it does not mention when not to use or explicitly compare with alternative list tools, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getARead-only
Batch-fetch FULL memory entries by id — the second half of the index-first retrieval workflow. Call memory_lookup with detail:"index" first, pick the ids whose title/tokens_estimate justify the fetch, then fetch them here in ONE batched call. Unknown ids are reported per-id (ids[]="unknown"), never failing the batch. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Entry ids to fetch (from a detail:"index" lookup). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that unknown ids are reported per-id as 'unknown' and never cause the whole batch to fail—critical error-handling behavior that is not visible in the schema. It also reinforces the read-only nature and highlights the batching capability, adding genuine behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core purpose, the second gives the workflow and usage order, and the third details error behavior. There is no fluff or repetition; the description is tightly packed and front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only tool with no output schema, the description fully covers purpose, usage, error handling, and the relationship to its sibling. The 'FULL' qualifier and the per-id unknown example give enough detail for an agent to anticipate the response shape without needing a formal output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the 'ids' parameter as 'from a detail:"index" lookup', so baseline is 3. The description adds the selection criterion ('title/tokens_estimate justify the fetch') and emphasizes the batched nature of the call, providing marginal but meaningful extra guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('Batch-fetch FULL memory entries by id') and explicitly frames the tool as the 'second half of the index-first retrieval workflow', distinguishing it from sibling memory_lookup. It clearly states what the tool does and what it returns (full entries as opposed to index summaries).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit when-to-use workflow: call memory_lookup with detail:'index' first, select ids based on title/tokens_estimate, then fetch them here in ONE batched call. It also names the alternative (memory_lookup) and the order of operations, leaving no ambiguity about usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_lookupARead-only
Retrieve engineering-memory entries for one or more memory types, optionally narrowed to specific anchor paths. Use before editing a security-sensitive or historically buggy file to surface prior incidents, ownership, and patterns tied to it. WORKFLOW: call with detail:"index" FIRST — each row carries id, title and tokens_estimate (the cost of fetching it) — then fetch full bodies via memory_get ONLY for the ids you will actually use, batching multiple ids into one call. Reads agents/memory/<type>/*.yml plus the agents/memory/intake/*.jsonl signal log. Read-only. Returns the v1 retrieval envelope: a status field plus per-type slices carrying the matched entries.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | No | Optional anchor paths or globs to match entries against (e.g. a file you are about to edit). | |
| limit | No | Maximum entries to return per type. Defaults to 5. | |
| types | Yes | Memory types to scan, e.g. `historical-patterns`, `incident-learnings`, `ownership`. At least one required. | |
| detail | No | 'index' returns compact priced rows (id, title, tokens_estimate) instead of full bodies — call this first, then memory_get the ids you need. 'full' (default) returns complete entries. | full |
| token_budget | No | Optional token budget. When set, entries are rendered as one-line compact rows (id, type, confidence, `line`) and the row set is hard-cut at token_budget × 4 chars; omitted hits appear as a top-level `truncation` hint naming a concrete next step. Absent → the envelope is unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the tool's read-only nature, which aligns with the readOnlyHint annotation but goes beyond it by naming the exact data sources ('Reads `agents/memory/<type>/*.yml` plus the `agents/memory/intake/*.jsonl` signal log') and describing the return envelope ('a `status` field plus per-type `slices`'). This provides valuable context about side effects, data scope, and output structure not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose, followed by usage context, workflow, data sources, and return format. Every sentence contributes value, and the 'WORKFLOW:' label provides clear structure. Despite its length, it is appropriately sized for the tool's complexity, with zero redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes responsibility for explaining return values, and it does so ('Returns the v1 retrieval envelope: a `status` field plus per-type `slices` carrying the matched entries'). It also covers the `detail` modes and token_budget behavior indirectly through the schema. Considering the tool's complexity and the rich schema, the description is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the strategic use of the `detail` parameter ('call with detail:"index" FIRST') and the purpose of `keys` ('anchor paths to match entries against'). While it doesn't add new meaning for every parameter, the workflow guidance enhances understanding of how to use the parameters effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve engineering-memory entries for one or more memory types, optionally narrowed to specific anchor paths.' It clearly distinguishes itself from sibling tools like memory_get by explaining its role as a lookup that returns indexes and summaries, with memory_get for full bodies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'Use before editing a security-sensitive or historically buggy file...' It also provides a step-by-step workflow ('call with detail:"index" FIRST... then fetch full bodies via memory_get') and names the alternative tool (memory_get) for fetching full entries. This is explicit guidance about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_signalA
Record an engineering-memory signal — a short, anchored observation such as a recurring bug pattern or an ownership note — to the monthly intake log agents/memory/intake/signals-YYYY-MM.jsonl. Use to capture a learning tied to a specific file so future memory_lookup calls surface it. Appends to the filesystem and is rate-limited per (type, path) within a rolling window. Returns the recorded signal.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Free-form signal body — the observation to record. | |
| path | Yes | Repo-relative anchor path the signal is about. | |
| type | Yes | Memory type the signal belongs to (e.g. historical-patterns, incident-learnings, ownership). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false (write operation), but the description adds that it 'Appends to the filesystem', is 'rate-limited per (type, path) within a rolling window', and 'Returns the recorded signal'. This clearly discloses side effects and constraints beyond the annotation, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences: front-loaded with the action and destination, followed by usage context, behavioral details, and return value. Every sentence adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 3 required params and no output schema. The description covers purpose, target file path, append behavior, rate limiting, and return value, which is complete for an agent to decide when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters (type, path, body). The description adds general context like 'short, anchored observation' and 'tied to a specific file' but does not provide additional per-parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Record' with a resource ('engineering-memory signal') and a concrete destination (the monthly intake log). It distinguishes from sibling memory_lookup by stating this captures learnings so future lookups can surface them, making the tool's role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use it ('Use to capture a learning tied to a specific file') and gives examples (recurring bug pattern, ownership note). It implies the read counterpart is memory_lookup but does not explicitly exclude alternatives, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statusARead-only
Report the memory backend status. Memory is entirely file-backed (agents/memory/); there is no external backend. Read-only, takes no arguments. Returns a status (file), the active backend (file), and a short reason.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable context: memory is entirely file-backed at a specific path, there is no external backend, and it discloses the exact return fields (status, backend, reason). This goes beyond annotation and helps the agent understand expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences, each adding distinct value: purpose, backend context, read-only behavior, and return format. It is front-loaded with the purpose and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool, the description fully covers what it does, how it behaves, and what it returns. It also explains the file-backed architecture, making the tool's behavior predictable even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description reinforces this by stating 'takes no arguments', which is sufficient. No additional parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Report the memory backend status', a specific verb+resource pair that clearly distinguishes this from sibling tools like memory_get or memory_lookup which retrieve data. It unambiguously conveys that this is a status query, not a data access operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: it is a read-only status check with no arguments, and the file-backed nature is explained. However, it does not explicitly mention when not to use this tool or point to alternative siblings, leaving the user to infer distinctions from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resource_bodyARead-only
Fetch the rendered body of a single resource URI (rule, guideline, or context document) in one call, without the two-step resources/list + resources/read handshake. Use when you already know the URI and want to inline its content into a tool-call result. Read-only. Returns the resource uri, name, description, and full text body.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Resource URI to fetch, e.g. `rule://commit-policy`, `guideline://php/patterns/events`, or `context://authority/scope-mechanics`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the tool is read-only, and the description reinforces this, but more importantly it adds the return payload details ('uri', 'name', 'description', and full text body') which are not in an output schema. This provides useful behavioral context beyond the annotation, though it does not cover error cases or other edge behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose in the first sentence and usage/return details in the second. No fluff or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter read-only tool with no output schema, and the description sufficiently covers the operation, usage condition, and return format. The sibling tools are unrelated, so no confusion. The description is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the only parameter 'uri' with examples and format. The description adds minimal additional meaning (e.g., 'single resource URI' and types) but does not go beyond what the schema already provides. Given 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch the rendered body of a single resource URI'), specifies the resource types (rule, guideline, context document), and distinguishes itself from the two-step resources/list + resources/read handshake. This is a specific verb+resource definition that sets it apart from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it ('when you already know the URI and want to inline its content into a tool-call result') and references the alternative two-step approach it avoids. This gives clear context and an explicit alternative, fulfilling the dimension perfectly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roadmap_archiveA
Archive every roadmap that has reached count_open == 0 and was touched on the current branch — git mv to agents/roadmaps/archive/, migrate inbound references, and regenerate the dashboard. Use as the PR-gate sweep before opening a pull request. Mutates the git index (moves tracked files) but never commits or pushes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint: false annotation by detailing that it mutates the git index, moves tracked files, migrates references, and regenerates the dashboard, while explicitly noting it never commits or pushes. This is valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first defines the action, the second gives usage context, and the third discloses side effects. It is front-loaded and has no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main actions and usage context. It does not mention return values or behavior when no roadmaps match, but given the absence of an output schema and the tool's mutation focus, the coverage is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter info. The baseline is 4 for zero-parameter tools. The description adds operational semantics but does not need to explain parameters, as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (archive every roadmap with count_open == 0 touched on the current branch) and the resource (roadmaps). It also names the specific operations (git mv, migrate references, regenerate dashboard) and differentiates from siblings like roadmap_progress and memory_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use as the PR-gate sweep before opening a pull request,' providing a clear when-to-use context. It does not mention when not to use or explicit alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roadmap_progressA
Regenerate agents/roadmaps-progress.md from the current checkbox state of every active roadmap. Use after landing roadmap work to keep the dashboard in sync without a shell round-trip. Writes the dashboard file inside the project tree. Set dry_run: true to compute counts without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | When true, return the computed dashboard without writing the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool writes a file inside the project tree, which is useful behavioral context beyond the readOnlyHint:false annotation. It also explains the dry_run flag to avoid writing, adding transparency about how to perform a non-destructive run. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: main action, usage context, and dry-run behavior. It is front-loaded with the core purpose and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, no output schema, and a clear write behavior, the description covers the essential aspects: what it does, when to use it, and how to avoid writing via dry_run. It could be slightly more explicit about return values, but overall it is complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the `dry_run` parameter with 100% coverage. The description adds minimal extra meaning by stating it 'compute counts without writing', but this largely paraphrases the schema description. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool regenerates `agents/roadmaps-progress.md` from checkbox states of active roadmaps. The verb 'regenerate' and specific file path make the purpose unambiguous, and it differentiates from siblings like `roadmap_archive` by focusing on syncing the dashboard file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it 'after landing roadmap work' and contrasts it with a 'shell round-trip', giving clear context on when and why to use the tool. It does not list exclusions or alternative tool names, but the guidance is sufficient for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_testsA
Run the consumer project's vitest test suite under a compiled safety envelope: fixed argv (no shell interpolation), 120s timeout, 64KB output cap per stream. Shell-exec pilot per the 2026-07-07 council cut — vitest projects only; other runners (Pest / PHPUnit, pytest, Jest) return an error until a future council round approves them. Pass filter (vitest --testNamePattern) or path (in-tree file or directory) to narrow the run. Returns runner, passed, exit_code, timed_out, truncated stdout/stderr, and duration_ms.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Restrict to tests under this directory. | |
| filter | No | Restrict to tests matching this name pattern. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotation (readOnlyHint=false), the description reveals the compiled safety envelope: fixed argv, no shell interpolation, 120s timeout, 64KB output cap per stream. It also notes the Shell-exec pilot status and details the return fields, providing substantial behavioral context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences front-load the core action and safety constraints, then proceed to restrictions, parameter guidance, and return fields. Every sentence contributes new information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two optional parameters and no output schema, the description covers purpose, safety envelope, supported/unsupported runners, parameter usage, and return value shape. The only minor omission is an explicit statement that passing neither parameter runs the full suite, but this is strongly implied by 'narrow the run.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema already describes both parameters, the description adds mapping: `filter` maps to vitest --testNamePattern and `path` is an in-tree file/directory, clarifying exact usage. This goes beyond the schema's generic descriptions and helps an agent choose parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Run the consumer project's vitest test suite,' clearly identifying the tool's action and scope. It further distinguishes itself by stating it supports only vitest projects and that other runners return an error, making it unmistakable from a generic test runner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit exclusions ('other runners ... return an error until a future council round approves them') and explains how to narrow runs with `filter` or `path`. However, it does not name an alternative tool to use for non-vitest projects, so it stops short of full when-to-use-vs-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_skill_for_taskARead-only
Rank skills against a free-form task by deterministic keyword scoring over SKILL.md frontmatter. Use when the skill you need is absent from the host's catalogue — one measured host dropped 402 entries from its model-visible list — so asking by name is impossible and asking by task is not. Each row gives a name, score, personas and the skill's own description, its routing criteria including any clause pointing elsewhere. Choose by reading the rows, then open at most two bodies with read_skill. Read-only: no shell, no writes, no bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task to match skills against. | |
| limit | No | Maximum skills to return; the default is a pre-registered recall depth, not a round number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, but the description adds the scoring mechanism, the guarantee of no shell/writes/bodies, and the exact row contents (name, score, personas, description, routing criteria including clauses pointing elsewhere). This is meaningful behavior beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then rationale, then return shape and follow-up action. Dense but every clause carries information; slightly long sentences cost it a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly describes the returned rows and their fields, and it explains the read-only constraints and next step. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, and the description adds nothing about the task or limit parameters beyond what the schema states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rank), resource (skills), input (free-form task) and the mechanism (deterministic keyword scoring over SKILL.md frontmatter), which cleanly separates it from list_skills and read_skill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes when to use it — when the needed skill is absent from the host catalogue so name-based lookup is impossible — and prescribes the follow-up flow: choose from rows, then open at most two bodies with read_skill.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
telemetry_reportARead-only
Return the artefact-engagement telemetry report — essential / useful / retirement-candidate skills and rules ranked by recorded consult+apply signals over a rolling window. Use to see which artifacts are actually load-bearing. Read-only. No-op (empty report) when telemetry recording is disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| window_days | No | Reporting window in days. Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only', which is consistent with the readOnlyHint annotation, but goes beyond it by adding a significant non-obvious behavior: 'No-op (empty report) when telemetry recording is disabled.' This is valuable context not available in structured data. It also notes the 'rolling window' aspect, adding operational detail about data recency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the main action, and packs in the purpose, usage context, and an edge-case behavior. There is no redundant phrasing or filler. Every clause contributes to understanding, making it appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter and no output schema, the description covers the essential aspects: what the report contains, how it is ranked, when to use it, and what happens when telemetry is disabled. It falls slightly short of a 5 because it does not describe the expected return shape (list, object) or field names, but given the simplicity, it is sufficiently complete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter 'window_days' with a description and default. The description mentions 'over a rolling window' but does not add new details about the parameter itself. Since schema coverage is 100%, the baseline of 3 is appropriate; the description provides minimal additional semantic value beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Return' and identifies the resource as the 'arteffect-engagement telemetry report'. It details the content (skills/rules ranked by consult+apply signals) and clearly distinguishes it from sibling tools like list_skills or capabilities_index, which are general artifact listings. The inclusion of 'essential / useful / retirement-candidate' categories further clarifies the specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Use to see which artifacts are actually load-bearing' provides a clear use case for when to invoke this tool. While it does not explicitly name alternatives or exclusions, the focus on telemetry signals implies it is the right choice over generic listing tools. The context is sufficient for an agent to decide appropriately, but lacks an explicit 'when not to use' or alternative tool reference.
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.
2 tool updates
v16.5.0- Added
graph_node - Changed
suggest_skill_for_task3 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -5New value: +8 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of skills to return. Defaults to 5."New value: +"Maximum skills to return; the default is a pre-registered recall depth, not a round number." - changed
Input schema / properties / task / descriptionPrevious value: -"Free-form description of the task to match skills against."New value: +"The task to match skills against."
5 tool updates
v14.22.0- Added
graph_dead - Added
graph_impact - Added
graph_path - Added
graph_query - Added
graph_tests_for
1 tool update
v14.2.0- Added
suggest_skill_for_task
TDQS
Scored across 26 tools
Most tools have distinct domains: graph_* (node, dead, impact, path, query, tests_for) are cleanly separated by query shape, and the memory_lookup/memory_get pair is explicitly framed as an index-then-fetch workflow. The only mild overlap is doctor_report vs conformance_check (both install diagnostics), but their descriptions distinguish triage vs a strict contract pass. No two tools appear to do the same thing.
Names are uniformly snake_case with a domain prefix, and list_skills/list_commands/list_rules plus chat_history_append/read are strongly parallel. The pattern drifts between verb_noun (list_skills, run_tests, lint_skills) and noun_noun/noun_verb (capabilities_index, roadmap_archive, memory_status), but the domains are legible and no camelCase or mixed conventions appear.
At 26 tools, the set is on the heavy side, though the breadth is real: graph analysis, engineering memory, roadmap tooling, skill/command/rule discovery, diagnostics, telemetry, and chat history. Each tool is defensible on its own, but the count is high enough that an agent must sift across many subsystems to find the relevant operation.
Coverage across graph, memory, roadmap, skills, diagnostics, and telemetry is broad and coherent, with read/write pairs for chat history and memory (lookup/get/signal/status). Minor gaps exist — no roadmap creation, no skill/command/rule authoring beyond lint, and read_resource_body is the only body-fetch path — but core workflows are reachable without dead ends.
Related MCP Connectors
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
System-of-record notebook for AI coding agents: pages, datastores, tasks, skills over MCP.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- AlicenseAqualityAmaintenanceCross-agent memory bridge for AI coding assistants. Persistent knowledge graph shared across 10 IDEs (Cursor, Windsurf, Claude Code, Codex, Copilot, Kiro, Antigravity, OpenCode, Trae, Gemini CLI) via MCP. 22 tools including team collaboration, auto-cleanup, mini-skills, session management, and workspace sync. 100% local, zero API keys required.91,654 npm887Apache 2.0
- AlicenseAqualityCmaintenanceAgent-native knowledge infrastructure. Deterministic, vertical-specific knowledge bases for autonomous agent consumption via MCP. Ethics modules mapped to EU AI Act articles. Free 24-hour trial.72MIT
- AlicenseAqualityCmaintenanceAgent Toolbelt is an MCP server exposing 11 focused API tools for LLM agents — schema generation, text extraction, token counting, CSV conversion, Markdown conversion, URL metadata, regex builder, cron expressions, address normalization, color palettes, and brand kits. Each tool is a focused microservice with structured input/output, WCAG-scored color data, USPS address parsing, and multi-model to2525 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEmpower any MCP-compatible AI Agent(MCP Client) with engineering-grade capabilities to understand, modify, run, and deliver real-world code repositories.164 PyPI1,216Apache 2.0