CodeEraser
Read-only MCP server exposing CodeEraser's deterministic code-quality reports, verdicts, and advisories over a project.
scan— size, complexity, and readability metrics.check_duplication— verified T1/T2 clone blocks.clone— T3 near-miss clone judgment; withunits, lists the cached unit universe.docdup— documentation duplication judgment.deadcode— liveness verdicts over the reference graph plus symbol-level advisory.graph_sites— resolution-free reference sites.flow— dead code inside functions: unreachable statements, dead stores, unused locals/parameters.churn— append-vs-rewrite and co-change over a git window.join— three-signal join: similarity, graph position, churn.structure— eight tree-scale structure axes, with optional deep, doc-staleness, and split-pricing modes.check— ADR-006 baseline judgment: score, ratchet, and axes; report only, never writes a baseline.trend— score trajectory over mainline git history.similar_units— same-role advisor with optional PPMI associative view; advisory only.query— one CE Datalog question over index facts, with optional derivations and prelude.rules— judge the project's architecture rules, with violations and witnesses.merge_suggestions— clone-merge anti-unification suggestions; advisory only.architecture— directory layers, cycle cuts, clusters, fan-in/out, and impact tracing; advisory only.erase— deterministic erase plan only; dry-run by construction, applying is a human act.erase_log— read-only applied-erase audit trail.doctor— machine state: core handshake, guard tiers, index freshness, daemon, degraded-run counter.update_check— whether a newer CodeEraser release exists; does not install it.
All capabilities are read-only reports or advisories; nothing writes baselines, applies erases, or mutates the project.
Analyzes local Git repositories to report churn, score trajectories over commit history, co-change patterns, and change impact, using git windows and diffs for code and documentation auditing.
Integrates with pre-commit hooks to refuse commits that introduce duplicate code or documentation, or exceed file size budgets, via ce precommit and ce commitmsg.
CodeEraser
· English | 中文
An eraser against LLM-induced code & document entropy.
What it does
Long-lived LLM-assisted codebases drift the same way: the same function written twice, the same paragraph pasted into three files, files that only ever grow. CodeEraser stops that drift at the moment of writing and gates it in CI, with no model in the loop.
Two refusals happen before the content reaches disk: a write that would introduce an exact T1/T2 clone is denied at PreToolUse with the duplicated region named, and a write leaving a file over 750 lines (or its [[rules.class]] line) is denied the same way. Everything else is a report or a gate: the Stop audit refuses the turn, ce precommit / ce commitmsg refuse the commit, CI refuses the merge.
Scope. Judged: Python, TypeScript/TSX, Rust, Go, Haskell, C, C++, Java, Lua, R, Markdown and HTML (thirteen language codes, twelve tree-sitter grammars). Size-checked only: js/mjs/cjs/jsx, css/scss/less, vue, svelte, sh/bash, yml/yaml. Documentation duplication only: .txt. Faces: CLI · GUI (eleven screens) · Claude Code plugin (four hooks, one skill, one command, twenty-one read-only MCP tools) · pre-commit · CI.
Related MCP server: codedelta
The effect: the same task, run twice
Without CodeEraser | With CodeEraser | |
writes refused before they reached disk | 0 | 2 |
duplicate clone blocks left behind | 4 | 0 |
duplicated doc segments | 1 | 0 |
removals still owed | 1 | 0 |
check score | 871 | 979 |
One seven-step task, two identical copies of the seed; the only variable is whether CodeEraser is in the loop — the write-time guard, the Stop audit, and, once the audit refuses, the eraser acting on its own plan. Both runs still end red — not on the same things.
A scripted agent replays one seven-step task (discounts, a compact report, CSV and JSON output, money formatting) on demo/seed, a small invoicing service, once without CodeEraser and once with it. Every number above and every refusal below is ce's verbatim output.
A copied helper, refused before the file exists. Move 1 of the run above, on its own. The reason names the region the content duplicates and the ordering that would pass, so the refusal is actionable rather than a veto.
$ Write invoicer/discount.py
✗ ce: content for <work>/invoicer/discount.py duplicates 1 indexed region(s): invoicer/money.py:1-18 (89 tokens). Reuse the existing implementation instead of re-writing it. Moving it? Trim the source region first: the probe verifies against the current tree, and the same write then passes.One line, two mouths. ce.toml puts invoicer/** on file_lines_fail = 40. The write-time guard refuses the write that would cross it, and ce scan grades the same tree against the same number — one declaration, read by the hook and by CI.
$ Write invoicer/invoice.py
✗ ce: this write leaves <work>/invoicer/invoice.py at 93 lines, past the hard budget of 40 (plan §4.1). Split the file instead of growing it.
$ ce scan .
FAIL invoicer/invoice.py:1 file-lines = 51 (limit 40) [invoicer/invoice.py]
warn invoicer/report.py:1 file-lines = 35 (limit 30) [invoicer/report.py]
scanned 9 files / 19 functions — 1 warn, 1 fail -> FAIL (failed: hard_line)The full table, both transcripts and the JSON behind them are in demo/README.md, replayed byte for byte in CI; the first real interception is recorded in T1-INTERCEPT. The precision and recall points are frozen with their evaluation ledgers (EVAL-SET, EVAL-SET-LANGS).
How it works
Zoom and pan this diagram at codeeraser.dev/how/#verdict.
Write-time clone guard: normalized tokens winnowed at k = 25, w = 26, so any shared run of 50+ tokens is caught; only novel duplication is charged (FPR-REPLAY).
Near-miss (T3) clones: candidates from MinHash/LSH, judged in the core by tree edit distance at TSED ≥ 0.85.
Documentation duplication that survives rewording: 5-word shingles, Jaccard ≥ 0.80 or a 50-word verbatim run.
Liveness: per-language resolution ladders feed a reference graph; a four-way verdict comes back with a confidence code.
Gate score: 0–1000 over seven axes, held by the ADR-006 shrink-only ratchet (growth needs
max(+2 %, +10 lines)or a named re-establish).Deterministic: no model anywhere; text crosses only the local
ce→ce-corepipe, and the core opens no file.
The rest — same-role advice, Datalog queries and rules, intra-function dead code, merge suggestions, architecture, structure axes, tombstone residue, erase — is on codeeraser.dev/how and in the methodology booklets.
Install, run, update
Installer. Each release ships five GUI installers (NSIS / AppImage / dmg) bundling the GUI,
ceand thece-corejudgment core; the Windows installer runsce setup(AppImage / dmg users run it once), which wires Claude Code. The fifteen artifacts are unsigned by decision; verify withsha256sum -c --ignore-missing SHA256SUMS.Homebrew / winget.
brew install skymanbp/codeeraser/codeeraser;winget install skymanbp.CodeEraseronce winget-pkgs merges.Claude Code plugin.
/plugin marketplace add skymanbp/CodeEraser@release, then/plugin install codeeraser@codeeraser.CLI only, or from source. Put
ceandce-coreside by side on PATH, orcargo install codeeraser, or build with GHC 9.14.1 + cabal;cefinds the core asCE_CORE_BIN→ ace-coresibling → PATH, and--core <path>wins.Updating.
ce updatechecks the latest release against its two-phase pins and--yesreplaces the binaries (RELEASE).
Commands
Command | What it reports / judges |
| size and complexity metrics; T1/T2 clone blocks against the budget |
| T3 near-miss clones; documentation duplication |
| reference sites and mentions; liveness verdicts |
| git-window churn; the three-signal join; score trajectory |
| same-role units, ranked by the core; advice only |
| Datalog over the index's facts; rules judged as a gate |
| dead code inside functions, from the control-flow graph |
| how a clone group would fold into one function; advice only |
| directory layers, cycle cuts, clusters, change impact; advice only |
| eight structure axes and split pricing |
| the ratchet and score floor, six named fail conditions |
| the deterministic two-phase eraser; dry run by default |
| latest release vs this build; |
| machine state; Claude Code wiring; uninstall; the MCP server |
Output is English by default and Chinese under --lang zh, CE_LANG=zh or [ui] lang = "zh". [[rules.class]] in ce.toml gives one glob set its own lines and ratchet tolerance (ce.toml reference).
Three faces, one product
Every capability reaches the CLI, the GUI and the plugin with its MCP server, or is a named omission; the face_parity gate derives the sets from the code.
capability | report document (core catalogue) | CLI | GUI (screen · commands) | plugin (hooks · MCP · commands · skills) |
size / complexity / readability metrics |
|
|
| MCP |
T1/T2 clone blocks |
|
|
| MCP |
T3 near-miss clones |
|
|
| MCP |
the unit universe T3 judges |
|
|
| MCP |
documentation duplication |
|
|
| MCP |
reference sites |
|
|
| MCP |
the mention universe |
|
| — CLI only: the census behind the symbol advisory, which every face of | — CLI only: the MCP |
liveness verdicts + symbol advisory |
|
|
| MCP |
graph screen (canvas + liveness) |
| — GUI only: the canvas is a picture; the same judgment's CLI and MCP faces are |
| — GUI only: the MCP face of the same judgment is |
git-window churn |
|
|
| MCP |
three-signal join |
|
|
| MCP |
tree-scale structure (split pricing) |
|
|
| MCP |
score trajectory |
|
|
| MCP |
score, ratchet and floor |
|
|
| MCP |
same-role advisor (similar units, associative view) |
|
|
| MCP |
code query and architecture rules |
|
|
| MCP |
intra-function dead code (unreachable, dead stores, unused locals and parameters) |
|
|
| MCP |
clone merge suggestions (anti-unification) |
|
|
| MCP |
architecture analysis (layers, cuts, clusters, impact) |
|
|
| MCP |
baseline writes | — |
| — CLI only: a machine surface never writes a baseline | — |
erase plan |
|
|
| MCP |
erase apply | — |
|
| — no MCP face: applying is a human act |
erase audit log |
|
|
| MCP |
machine state and guard-class tiers | — |
|
| MCP |
update check | — |
|
| MCP |
update apply | — |
|
| — the plugin's copy is re-pinned by |
write-time guard | — |
| — hooks are the plugin's face; flow and tombstone judge the write inside the hook, so no report family of their own — their tiers ride every face's doctor | hook |
asked-write settlement | — |
| — hooks are the plugin's face | hook |
stop audit / git hooks | — |
| — hooks are the plugin's face; precommit and commitmsg are git's; tombstone judges the changeset inside them, its tier on every face's doctor | hook |
session health line | — |
| — hooks are the plugin's face | hook |
project daemon | — |
| — started lazily by every face | — |
read-only report server | — |
| — the plugin registers it |
|
uninstall | — |
| — CLI only | — |
Claude Code wiring | — |
| — CLI only: the Windows installer calls it, AppImage / dmg users run it once | — |
root anchoring | — | — every command and hook anchors through |
| — |
Tech stack and philosophy
Zoom and pan this diagram at codeeraser.dev/#architecture.
Rust 1.94.1 (edition 2024): tree-sitter 0.27 with twelve grammars, rusqlite 0.40 (index schema 17 / GRAPH_REV 23 / MENTION_REV 4), a per-project daemon.
Haskell (GHC 9.14.1):
ce-core, every judgment family. Tauri 2: the GUI over the same crate.One wire: NDJSON over stdio (proto 9.0.0, sixteen families); the daemon speaks its own protocol (2.3.0).
Design rules: ADR-001 … ADR-009 (Rust frontend, parse layer in Rust, lazy daemon, cheap PreToolUse, two clone layers, shrink-only ratchet, pinned distribution, policy as Haskell data, derived documentation facts) in DEVELOPMENT_PLAN.
Philosophy. Measure in Rust, decide and write in Haskell, print everywhere else. Nothing asks a model anything; hooks fail open and say so; documentation is generated or gated, including the nineteen-booklet methodology, and every push runs the seven product gates on this tree.
Known limits
PreToolUse shapes behaviour; it is not a security wall (shell writes bypass it; the Stop audit and CI are the backstops). Hooks fail open on internal errors and record the degradation.
Languages. AST judgment uses the twelve grammars above; Markdown, HTML and
.txtare judged by the documentation and graph rules; T4 clones are not promised.Advice, never a verdict. Symbol-level liveness,
ce similar,ce mergeandce archnever fail a gate; a guard class staysobserveuntil it has its own false-positive record.Lines not drawn.
cognitive_faildefaults to 0 (complexity only warns), andce structurehas no score floor.Distribution. A release builds five targets;
ce setupwires nothing from an elevated account that is not the logged-in user (exit 13); judging this repository needs thecli/testssubmodule seated.One wire line. A request line to the core is at most 134,217,728 bytes; larger requests split into batches, and an oversized item is refused by name, never truncated.
Scores are not comparable across a [[rules.class]] switch, across a named re-establish that moves softLine, or across these releases: v0.7.3 → v1.0.0, v1.2.0 → v1.3.0, v1.3.x → v1.4.0, v1.6.0 → v1.7.0, v1.7.4 → v1.8.0, v1.8.0 → v1.9.0 (1.9.1 and 1.9.2 are comparable with 1.9.0); the reasons are in CHANGELOG.
Documentation
CLI reference · ce.toml reference (generated from the binary and the config schema; drift reddens CI) · Methodology (nineteen booklets, cited to implementation lines) · structure axes · size advisory · erase contract · GUI reference · plugin · demo
DEVELOPMENT_PLAN · EVAL-SET · EVAL-SET-SIMILAR · EVAL-SET-LANGS · EVAL-SET-FLOW · language-expansion · FIELD-TEST · PERF-BUDGET · FPR-REPLAY · FPR-TOMBSTONE · FPR-L2 · T1-INTERCEPT · contracts/VERSIONING.md · docs/RELEASE.md (wire SemVer and the two-phase release runbook)
Website: codeeraser.dev · how it works · math · stack
License
Apache-2.0; see LICENSE. Third-party inventory in NOTICE (regenerated and gated in CI). The test suite lives in skymanbp/CodeEraser-tests; clone with --recurse-submodules. "CodeEraser"™ is a trademark of skymanbp; per Apache-2.0 §6 the license covers the code, not the name.
Available Tools
21 toolsarchitectureB
The architecture of the tree (ce.arch-report schema): directory layers and the arcs to cut out of their cycles (each with the file references behind it), file clusters and the files outside their cluster's directory, per-directory fan-in / fan-out / instability, and the files a change to impact reaches. Advisory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) | |
| impact | No | paths whose dependents to trace (root-relative) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that output follows the 'ce.arch-report schema' and enumerates report contents, and 'Advisory' implies a read-only, non-mutating operation. However it does not state permissions, cost, or whether the operation is purely a read, leaving meaningful behavioral gaps.
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?
It is a single dense sentence, but it is front-loaded with the resource ('The architecture of the tree') and cleanly partitioned by a colon and parallel list items. Nearly every clause names a distinct report section, so little is wasted.
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 must convey return content, and it does list the report sections. But for a tool with no annotations it omits usage routing and explicit read-only/permission behavior, leaving it adequate rather than 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%, so the schema already documents both `path` and `impact`. The description adds only a small amount of meaning by framing `impact` as 'the files a change to `impact` reaches', which clarifies its effect in the report but does not add syntax or format detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the tree's architecture) and enumerates the exact report sections it produces: directory layers, cycle arcs, file clusters, per-directory fan-in/fan-out/instability, and impact reachability. This is far more concrete than a tautology. It does not, however, explicitly distinguish itself from plausible siblings like `structure`, `graph_sites`, or `trend`.
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?
There is no when-to-use or when-not-to-use guidance, and no alternatives are named despite ~20 siblings. The only hint is the trailing word 'Advisory', which implies a non-mutating analysis but does not say when an agent should prefer this over the other analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkC
ADR-006 baseline judgment: score, ratchet and axes (report only — this surface never writes a baseline).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | churn window in days; absent = the churn tables stay empty | |
| path | No | subpath (default: project root) | |
| floor | No | arm the --fail-under score floor; absent = the ratchet alone judges |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present the description carries the full burden, and it does disclose one meaningful trait: this surface is non-mutating and never writes a baseline. Beyond that it says nothing about permissions, what the 'ratchet' or 'axes' output means, or failure behavior, so the disclosure is thin for an unannotated tool.
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?
It is a single dense sentence with no padding, and the report-only caveat is placed at the end as a qualifier. It is efficient, though the jargon makes it less immediately readable than it could be.
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 and no annotations, a report-generating tool of this apparent complexity should explain what it returns and what the score/ratchet/axes concepts mean. The description leaves the agent guessing at the result shape and the semantics of its own domain terms.
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% and all three parameters (days, path, floor) are documented in the schema, including absence semantics — so the baseline is 3. The description adds no parameter-level meaning beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leans on internal jargon ('ADR-006 baseline judgment', 'ratchet and axes') and never states a plain verb+resource an agent can act on. It never distinguishes itself from close siblings such as trend, scan or update_check, several of which plausibly also report baseline-ish status. An agent can't confidently tell what 'check' actually computes from the text alone.
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?
There is a partial exclusion — 'report only — this surface never writes a baseline' implies when not to reach for a writing surface — but no positive guidance on when to choose this over trend, scan or architecture. No prerequisites or trigger conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_duplicationC
Verified T1/T2 clone blocks (ce.dedup-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) | |
| min_tokens | No | report threshold (default 50) | |
| min_distinct | No | diversity floor: suppress blocks with fewer distinct tokens |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about side effects, permissions, cost, or read-only nature. The only behavioral hint is the qualifier 'Verified' (implying a filtered/suppressed set) and the T1/T2 scope, which is thin for an unannotated tool.
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?
It is short, but it is an under-specified noun fragment rather than a front-loaded statement of purpose; there is no leading verb to orient the agent. Brevity here comes from omission, not from efficient structuring.
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 3-parameter tool with no annotations and no output schema, the description leaves out what the tool returns, what 'T1/T2' means in practice, and how the referenced 'ce.dedup-report' schema should be interpreted. An agent cannot confidently invoke this from the description alone.
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% (path, min_tokens, min_distinct all documented), so baseline 3 applies. The description adds no parameter meaning beyond the schema — notably it does not connect 'Verified' to the min_distinct diversity floor or min_tokens threshold.
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 an artifact ('Verified T1/T2 clone blocks') and a schema ('ce.dedup-report'), so the duplication-detection domain is identifiable, but there is no verb and no statement of what the tool actually does (find? report? verify?). Sibling differentiation is absent despite close siblings like 'clone', 'docdup' and 'similar_units'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative routing is given. With 'clone', 'docdup', 'similar_units' and 'check' in the sibling list, the agent has no basis for choosing this tool over those. Not misleading, but zero guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
churnC
Append-vs-rewrite and co-change over a git window (ce.churn-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | git history window in days (default 14) | |
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that analysis runs over a git window and references a report schema, but says nothing about read-only nature, permissions, performance cost, or what the report contains beyond a schema name.
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 compact sentence with the analytical scope front-loaded. The parenthetical schema reference is slightly cryptic but overall the definition is tight and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a terse description, the definition is under-specified for a tool that produces an analytical report. An agent cannot tell what the report returns, whether the call is safe or expensive, or how the two analyses interrelate.
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 parameters ('days', 'path') are already documented in the schema. The description adds no format, default, or boundary detail beyond naming the git window, 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 names two specific analyses ('append-vs-rewrite', 'co-change') and the domain ('git window'), which is more than a tautology and gives an agent a rough sense of the resource. However, it never frames the resource plainly (a churn report) and does not distinguish itself from likely-related siblings such as 'trend', leaving the purpose only implied.
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?
There is no when-to-use, when-not-to-use, or alternative guidance. With 22 sibling tools and neighbors like 'trend' and 'scan', the description offers nothing to help an agent choose this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloneC
T3 near-miss clone judgment (ce.clone-report schema); units lists the cached unit universe instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) | |
| units | No | list the unit universe (ce.clone-units schema) instead of judging |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses output-side context (ce.clone-report / ce.clone-units schemas) and that the unit universe is cached, which is useful. It says nothing about whether a judgment is persisted, permissions required, or side effects, leaving significant behavioral gaps.
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 short, front-loaded sentence with no filler, which is good. But the density comes at the cost of clarity (unexplained 'T3', bare schema identifiers), so it is terse rather than effectively 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?
There is no output schema and no annotations, so the description should explain return semantics and safety profile. It instead references two schema names (ce.clone-report, ce.clone-units) without explaining what a judgment contains or whether anything is written, leaving an agent under-informed for a two-mode 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 description coverage is 100%, so both `path` and `units` are already documented in the schema. The description's mention of `units` largely repeats the schema text, adding little semantic value beyond the mode-flip it already 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?
The description names a resource and action ('near-miss clone judgment'), so an agent can infer it evaluates clone candidates. However, 'T3' is undefined jargon and there is no differentiation from siblings like check_duplication, similar_units, or merge_suggestions, so the purpose stays vague.
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 explains the `units` mode ('lists the cached unit universe instead') which is a small usage hint, but gives no guidance on when to choose this tool over the many sibling analysis tools (check_duplication, similar_units). Tool-selection guidance is essentially absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deadcodeC
Liveness verdicts over the reference graph, plus the symbol-level advisory of declarations no other file spells — never a verdict (ce.deadcode-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that output is 'advisory ... never a verdict' and references the ce.deadcode-report schema, which usefully frames the result as non-definitive, but it does not state read-only safety, side effects, or analysis scope.
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 sentence, so it is compact, but the dense jargon and the trailing 'never a verdict' clause make it less front-loaded and less immediately parseable than it could be.
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 annotations and no output schema, the description should carry more weight. It gives a bare conceptual hint about the return (liveness verdicts plus advisory) but leaves the agent without a clear sense of what the report contains or when to prefer this tool over related analysis siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single path parameter is fully documented in the schema as 'subpath (default: project root).' The description adds no parameter meaning beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes output as 'liveness verdicts over the reference graph' and 'advisory of declarations no other file spells,' which conveys dead-code analysis. However, it uses noun phrases rather than a clear verb and the parenthetical 'never a verdict' muddies the action, so it falls short of a crisp, sibling-differentiating purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. Alternatives like scan, check, or structure are not mentioned, leaving the agent to infer that this is the dead-code option from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docdupC
Documentation-duplication judgment (ce.docdup-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: not whether this is a read-only analysis, not whether it mutates state, not cost or scope behavior. The only signal is the 'ce.docdup-report schema' hint, which weakly implies the shape of the result but not the operation's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler or redundancy. However, its brevity comes from under-specification rather than disciplined editing, which caps it below 5.
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-annotation, no-output-schema tool, the description is too thin: an agent cannot tell whether it analyzes docs, code comments, or markdown, what duplication criteria apply, or how to interpret results. Naming the report schema partially compensates but is not enough.
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?
Single optional 'path' parameter with 100% schema description coverage ('subpath (default: project root)'), so the schema already does the work. The description adds no meaning about path semantics (relative vs absolute, file vs directory scope), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'documentation-duplication judgment' identifies the resource (documentation duplication) but uses a vague nominalization ('judgment') rather than a clear verb like detect/report/compare. It gives no differentiation from close siblings such as check_duplication, clone, similar_units, or scan. The parenthetical schema name hints that output is a report, but the core purpose remains inferred.
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?
There is no statement of when to use this tool, when not to, or which sibling to prefer — significant given check_duplication and similar_units sit adjacent. No prerequisites, no inputs assumed, no workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorB
This machine's state (ce.doctor-report schema): ce-core handshake, the tier of every guard class the hooks read (the write guard, flow, tombstone), index freshness, daemon, degraded-run counter. The daemon is asked without being started.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose one valuable trait — 'The daemon is asked without being started' — implying a non-invasive probe, which is real behavioral information. However, it never states that the tool is read-only, whether the report reflects cached versus live state, or what happens when components are unreachable, leaving significant gaps for an unannotated tool.
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 body is a single dense sentence that front-loads the subject ('This machine's state') before enumerating report contents, with no filler. The inline schema-name parenthetical slightly interrupts the flow, and the jargon load is heavy, but nothing is wasted.
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 must convey what comes back, and enumerating the reported components is a reasonable attempt. But the terms are internal jargon (tier of every guard class, degraded-run counter) that do not tell an agent how to interpret the values, so it is adequate rather than complete for an unannotated diagnostic 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?
One optional parameter with 100% schema description coverage ('subpath (default: project root)'), so the schema already does the work and the baseline is 3. The description adds nothing about the path argument, its scope, or what happens if it points outside the project.
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 verb is implied rather than stated, but the resource is highly specific: a diagnostic report of this machine's state, enumerated as ce-core handshake, guard-class tiers, index freshness, daemon, and degraded-run counter. That enumeration lets an agent distinguish it from siblings like check, update_check, and flow, which are not described but clearly belong to different concerns.
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?
There is no statement of when to run this versus alternatives such as check, update_check, or scan. The narrow behavioral note about the daemon is a caveat, not usage guidance, so the agent must infer the trigger condition entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eraseA
The deterministic erase PLAN (ce.erase-plan schema) — dry-run by construction: this surface reaches the plan and nothing else, and applying it is a human act at the CLI or the GUI.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose the critical traits: deterministic, dry-run by construction, reaches the plan and nothing else, no mutation side effects. It stops short of noting auth requirements or rate/perf 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?
A single sentence, front-loaded with the key noun phrase 'deterministic erase PLAN'. Every clause (dry-run, reaches nothing else, human applies) earns its place, though the em-dash density is slightly heavy.
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?
No annotations or output schema exist, so the description must orient the agent, and it succeeds in conveying that the return is a plan that must be applied manually. It could say more about what the plan contains, leaving a small gap.
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% and the single optional 'path' param is documented in the schema, so a baseline of 3 applies. The description adds nothing about the path parameter's meaning or default beyond what the schema already states.
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?
Names a specific artifact ('the deterministic erase PLAN', 'ce.erase-plan schema') and explicitly scopes it as plan-only versus applying. An agent can tell it does not perform the destructive erasure itself. However, it never names a sibling (e.g. erase_log) to differentiate against, keeping it short of a 5.
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?
Gives clear context: reach for this to obtain the plan, while applying is a manual step at CLI/GUI. This tells the agent when its output is the deliverable, though it names no alternative tool and offers no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
erase_logA
The applied-erase audit trail (ce.erase-trail-report schema): every record ce erase --apply or the GUI appended to .ce/erase-log.ndjson, with the lines the reader could not parse named by number. Read-only — nothing here can apply or append.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it declares the read-only guarantee, identifies the backing file, the schema of the report, and discloses a partial-failure behavior (unparseable lines are named by number). It omits pagination or output-shape details, but the core behavioral profile is well covered.
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 resource identity and followed by the scope/read-only caveats. Dense but no filler; the parenthetical schema name is the only slightly heavy element.
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 single-parameter read tool with no output schema and no annotations, the description is nearly self-sufficient: it explains the source file, the schema name, the record provenance, and the malformed-line handling. An agent could call this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema coverage, so the schema already documents `path` as a subpath defaulting to the project root. The description adds no further param meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the applied-erase audit trail at .ce/erase-log.ndjson) and what it contains (records appended by `ce erase --apply` or the GUI, plus unparseable lines). The read-only framing distinguishes it from the sibling `erase`, which implies the opposite operation. It is clear without explicitly stating the verb 'read'.
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 'Read-only — nothing here can apply or append' line implicitly tells the agent to use this for inspection rather than mutation, and contrasts with the `erase` sibling. However, there is no explicit when-to-use guidance, no statement of when NOT to use it, and no named alternative for inspecting erase history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowB
Dead code inside functions (ce.flow-report schema): unreachable statements, dead stores, unused locals and parameters, judged by the core over flow/1 and placed by path, unit, kind, lines and variable; each finding says whether it is judged or advisory (unused parameters always are). Report-only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | comma-separated kinds to show | |
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it names the emitted schema (ce.flow-report), states the tool is report-only, and discloses a real semantic trait — each finding is labeled judged or advisory, with unused parameters always advisory. It omits auth/permission requirements and execution cost, which are minor for a read-only analyzer.
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 dense, semicolon-chained sentence that is front-loaded with the core purpose but heavy with internal jargon ('judged by the core over flow/1', 'ce.flow-report schema') that costs reading effort. Information-dense and mostly earning its place, but readability suffers.
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 steps in by naming the report schema and the fields findings are placed by (path, unit, kind, lines, variable) plus the judged/advisory flag. Together with 100%-covered parameters, an agent has enough to call it correctly, though not enough to know exact output shape.
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 two parameters (kind, path) are already documented and the baseline is 3. The description references placement by 'kind' and 'path' but adds no syntax, accepted values, or default semantics 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?
States a specific verb+resource: detects dead code inside functions, then enumerates the exact classes (unreachable statements, dead stores, unused locals and parameters). The 'inside functions' scope implicitly separates it from the sibling deadcode tool, though the sibling is never named.
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?
There is no explicit when-to-use guidance, no prerequisites, and no routing to alternatives. 'Report-only' hints that it does not mutate, but the agent is left to infer when to pick flow over deadcode, scan, or structure on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_sitesC
Reference sites, resolution-free (the ce graph --sites rows).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'resolution-free' as a trait but says nothing about read-only behavior, side effects, return format, pagination, or performance characteristics, leaving the agent with little operational 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 a single short sentence, so it is not verbose. However, the cryptic parenthetical CLI reference does not fully earn its place for an AI agent and leaves the core purpose unclear.
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 and no annotations, so the description should explain what 'reference sites' means and what the tool returns. It fails to do so, offering only an internal shorthand that does not help an external agent 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?
Schema description coverage is 100%, with the only parameter ('path') already documented as a subpath defaulting to project root. The description adds no additional parameter meaning, so the baseline of 3 is appropriate when 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 gives only a noun phrase ('Reference sites') and an internal CLI reference ('the ce graph --sites rows'), without a clear verb or output description. It does not distinguish this tool from siblings like similar_units, clone, or structure, leaving the agent to guess what operation is performed.
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?
There is no guidance on when to use this tool versus alternatives. The phrase 'resolution-free' hints at a condition but does not explain when or why an agent should choose graph_sites over the many other code-analysis siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
joinC
Three-signal join: similarity, graph position, churn (ce.join-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | git history window in days (default 14) | |
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it largely fails: it does not say whether the tool is read-only, what permissions it needs, how expensive it is, or how the 'ce.join-report schema' output is shaped (and no output schema actually exists). The parenthetical schema reference is the only behavioral hint.
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?
One short line with no wasted words and the key content front-loaded, which is good; but the brevity is achieved through unexplained jargon rather than precision, so it reads as under-specification rather than effective conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a completely opaque one-liner, an agent cannot confidently determine what the tool returns or when it should be invoked. For a tool embedded among 20+ analysis siblings, this is insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both optional parameters ('days' with its default of 14, and 'path' defaulting to project root) are fully documented in the schema. The description adds no parameter meaning beyond that, making the baseline 3 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 names a specific verb ('join') and enumerates three signals (similarity, graph position, churn), which hints at what is combined. However, it never states what resources are being joined or what the result represents, and it offers no differentiation from siblings like 'churn', 'similar_units', or 'graph_sites'; it borders on jargon shorthand.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many siblings (churn, similar_units, check_duplication). The agent is left to guess the scenario that warrants a combined three-signal join rather than one of the single-signal tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_suggestionsB
Clone-merge suggestions (ce.merge-report schema): every clone group — T1/T2 families, T3 pairs — anti-unified by the core's merge/1: the parameters a merged function takes with each member's text at them, the member kept, the lines saved, feasible or why not. Advisory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Advisory' usefully implies the output is non-mutating, and it enumerates what the report contains, but it says nothing about required permissions, cost/runtime, or how feasibility is computed.
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?
It is a single sentence plus a one-word trailer, so there is no padding, and it front-loads the resource. However, the heavy domain jargon (anti-unified, merge/1, ce.merge-report) makes it dense to the point of obscuring the point for a reader without prior context.
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 single-parameter, read-only analysis tool with no output schema, the description compensates reasonably by enumerating the report's fields. It still omits usage context (when this beats clone/check_duplication) and any behavioral constraints, leaving it only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'path' parameter is fully documented in the schema as 'subpath (default: project root)'. The description adds nothing about the path parameter, so the schema does all the work — 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 resource (clone-merge suggestions) and details the report contents — clone groups, T1/T2 families, T3 pairs, anti-unification by merge/1, parameters, kept member, lines saved, feasibility. This is far more specific than a restatement, though it never names related siblings like clone, check_duplication, or similar_units to disambiguate.
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?
Only guidance is the trailing word 'Advisory.' There is no explicit when-to-use, no statement of when NOT to use it, and no routing to alternatives such as clone or similar_units, which an agent would plausibly confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryB
One question in CE Datalog over the index's facts (ce.query-report schema): files, references, units, clones, mentions, path classes, with the built-in prelude (dead, reach, depends, same_dir, dir_ref) and the project's rules file; every answer labelled, its derivation under why; prelude answers the text a question builds on instead (ce.query-prelude schema: the prelude and the [rules.pack] program). Report-only.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | carry every answer's derivation | |
| body | No | the question (`dead(F)`; `?-` and the final `.` optional); required unless `prelude` | |
| file | No | a rules file (path relative to the root; default `[rules] file`, else ce.rules) | |
| path | No | subpath (default: project root) | |
| prelude | No | answer the prelude and the `[rules.pack]` program instead of a question |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses 'Report-only' (implying no mutation) and that every answer is labelled with its derivation under `why`. However, it omits any account of permissions, rate limits, failure behavior, or what happens to `path`/`file` defaults beyond what the schema already states.
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 purpose is front-loaded, but the single semicolon-and-parenthesis-laden sentence is dense and hard to parse, and it partially restates parameter behavior already in the schema. Structure is functional but overloaded rather than economical.
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 must cover returns; it names the ce.query-report and ce.query-prelude schemas and the labelled-answer format, which is helpful but refers to external schemas an agent cannot see. Combined with missing usage guidance and error behavior, the coverage is adequate but not complete for a 5-parameter 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 description coverage is 100%, so the schema already documents all five parameters, making 3 the baseline. The description reinforces the `why` and `prelude` parameters and their semantics (prelude answers the prelude and `[rules.pack]` program instead of a question), adding marginal value but no syntax 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 states a specific verb and resource: answering one CE Datalog question over the index's enumerated fact types (files, references, units, clones, mentions, path classes). It is clear what the tool does, but it never distinguishes itself from siblings like rules, deadcode, graph_sites, or structure, which an agent could easily confuse with a generic 'query' tool.
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?
There is no explicit when-to-use guidance and no alternatives are named, despite many plausible siblings (deadcode, clone, graph_sites, rules). The description explains modes (`prelude` vs a question) and the rules file, but not the context that should select this tool over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rulesB
The project's architecture rules judged (ce.rules-report schema): every assert in the rules file with its violations, each carrying its witness and derivation. The CLI exits on counts.violations; here it is a report.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | carry every answer's derivation | |
| file | No | a rules file (path relative to the root; default `[rules] file`, else ce.rules) | |
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It usefully discloses that this variant does NOT exit/fail on violations (unlike the CLI) and that output includes witnesses and derivations, but it never states permissions, read-only nature, or whether the rules file is modified.
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 compact sentences with no filler, and the behavioral contrast with the CLI is front-loaded. It is dense with internal terminology, which slightly reduces readability, but nothing is wasted.
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, and the description compensates by describing the report's contents (asserts, violations, witnesses, derivations). For a low-complexity, all-optional-parameter read tool this is largely sufficient, with only usage/alternative guidance 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%, so the schema already documents why, file, and path, making 3 the baseline. The description touches the rules-file concept and the derivation output that corresponds to the `why` flag, but adds no format or syntax detail 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 states a specific resource (the project's architecture rules) and what it returns (every assert with its violations, witness, and derivation), which lets an agent infer this is a static-analysis/report tool. It is understandable but phrased in dense internal jargon ("judged", "ce.rules-report schema") and never names or contrasts any sibling like check, architecture, or doctor.
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 only usage hint is the CLI contrast ("The CLI exits on counts.violations; here it is a report"), implying this is the non-failing reporting variant. It gives no explicit when-to-use, when-not-to-use, or alternative tool to prefer, leaving the agent to infer placement relative to the many sibling analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scanC
Size/complexity/readability metrics report (ce.scan-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers almost none: it does not say whether the operation is read-only, what scope it scans, how costly it is on a large project, or how results are returned. The only hint is a dangling schema name (ce.scan-report) that the agent cannot resolve.
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?
One front-loaded sentence with no filler or repetition. It is efficient, though the terseness edges toward under-specification rather than tight structure.
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 no annotations and no output schema, the description should explain scope, read-only nature, and roughly what the report contains; instead it points at an external schema name the agent cannot inspect. The reference is a dangling pointer, leaving key behavior undocumented.
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 single path parameter (default: project root) is already documented in the schema. The description adds no meaning beyond that, which matches the baseline 3 when the schema does the work.
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 the resource it produces (a size/complexity/readability metrics report) but supplies no verb, so it is unclear whether the tool scans, computes, or merely retrieves. It also does nothing to separate itself from adjacent siblings such as structure, churn, or check, leaving the agent to guess which reporting tool applies.
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?
There is no statement of when to use this tool, when not to, or which sibling to prefer for adjacent analysis tasks. The agent receives no routing guidance whatsoever.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
similar_unitsC
The same-role advisor (ce.similar-report schema): the units most like one unit or a text, in the core's order with its role bit and a six-channel evidence row; widen adds the PPMI associative view. Advisory — never a verdict.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | the unit holding `file:line` (path relative to the root) | |
| path | No | subpath (default: project root) | |
| text | No | free text as name and doc evidence | |
| unit | No | a unit by key (`name/arity`) | |
| widen | No | add the associative view, tagged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add one valuable behavioral fact: the output is advisory and 'never a verdict', plus that `widen` layers on a 'PPMI associative view'. It also sketches the return shape ('role bit and a six-channel evidence row'). However, it discloses nothing about permissions, performance, or read-only nature.
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?
It is compact at two sentences and front-loads the purpose, which is good. But the density of unexplained jargon ('ce.similar-report schema', 'role bit') means the brevity comes at the cost of comprehensibility rather than earning every word's 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?
For a five-parameter, zero-required, no-output-schema, no-annotation tool, the description should clarify how the mutually exclusive target inputs (at/unit/text) are used and what the 'six-channel evidence row' contains. It gestures at the output format but leaves an agent uncertain how to actually 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?
Schema description coverage is 100%, so the schema already documents all five parameters, giving a baseline of 3. The description adds marginal value by clarifying that the target can be 'one unit or a text' (implying at/unit/text) and by explaining that `widen` adds an associative view, but it leaves `at`, `path`, and the mutual exclusivity of the target parameters unexplained.
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 phrase 'the units most like one unit or a text' does communicate a similarity-lookup action, so the core purpose is inferable. But it is buried in domain jargon ('same-role advisor', 'six-channel evidence row', 'the core's order') that obscures what the tool actually returns. It never explicitly distinguishes itself from close siblings like clone, docdup, or check_duplication.
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 only usage signal is 'Advisory — never a verdict', which hints at how to treat the output but not when to call the tool. There is no guidance on choosing this over clone/docdup/check_duplication, and no stated prerequisites or context for when similarity lookup is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
structureC
Tree-scale structure judgment, eight axes (ce.structure-report schema).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | judge the S5 doc-staleness axis over this window | |
| deep | No | also judge the S6 redundancy axis | |
| path | No | subpath (default: project root) | |
| split | No | price the split-ROI advisory for files past the soft line |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it says nothing about whether this is a read-only analysis, whether it mutates anything, cost/latency of a tree-scale run, or what the eight axes evaluate. Only the referenced schema name hints at output shape.
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 compact sentence with no filler and the schema reference up front. However it is under-specified rather than genuinely concise, and the jargon 'tree-scale structure judgment' costs clarity for the space it saves.
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?
No output schema exists, no annotations, four optional parameters, and an analysis tool whose axes are named only obliquely ('eight axes', 'ce.structure-report schema'). An agent cannot tell what the report contains or what each axis flags, so the definition is incomplete for the tool's complexity.
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 all four parameters (days, deep, path, split) are already documented in the schema, including which axis each toggles. The description adds no syntax, defaults, or interaction details beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a resource (structure) and a scope (tree-scale, eight axes) plus a report schema, so it is more than a tautology. But the operative verb is fuzzy ('judgment'), and nothing distinguishes it from siblings like architecture or scan that also analyze project structure.
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?
There is no when-to-use guidance at all: no prerequisites, no conditions, and no pointer to an alternative sibling such as architecture or scan. The agent must infer invocation context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trendB
Score trajectory over mainline git history (ce.trend-report schema; points cache in the index, rebuildable from history).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) | |
| batch | No | max uncached commits measured per call | |
| commits | No | mainline window size (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does usefully disclose caching behavior ('points cache in the index, rebuildable from history'), which tells the agent a write side effect exists but is recoverable. It omits permissions, cost/rate concerns, and what the scoring actually measures.
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 with an efficient parenthetical. No redundant filler, though the parenthetical packs two distinct ideas (output schema reference and cache behavior) which slightly compresses readability.
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 and no annotations, the description references an external 'ce.trend-report schema' but never explains the return shape. It is minimally sufficient for an all-optional 3-param tool, but leaves output interpretation and usage context to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents path, batch, and commits. The description adds no syntax, format, or intent detail beyond the schema, so the 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?
States a specific verb and resource ('Score trajectory over mainline git history'), which is enough to distinguish it from most siblings like churn or scan. However it does not explicitly differentiate itself from the closest sibling (churn), leaving the agent to infer the boundary from the term 'trajectory' alone.
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?
There is no when-to-use, when-not-to-use, or alternative-tool guidance. The description never mentions churn or any other sibling, so the agent has no routing signal despite 'trajectory' being ambiguous next to 'churn'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_checkA
Whether a newer CodeEraser release exists (ce.update-report schema): the latest tag, that tag's committed SHA256 pins, and the one action for this install. Reads the release index over the network; places nothing — applying is a human act at the CLI or the GUI.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | subpath (default: project root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses network access ('reads the release index over the network'), explicitly states it mutates nothing ('places nothing'), and draws the boundary that applying updates is a human action. It omits auth requirements, rate limiting, and caching behavior, which keeps it short of a 5.
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 tightly packed sentences: the first front-loads what the tool returns, the second front-loads the behavioral constraint. No filler. The parenthetical schema reference and em-dash clause make it denser than ideal, but every clause carries 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?
There is no output schema, so the description must describe the return payload, and it does (latest tag, SHA256 pins, action for this install). With no annotations it also covers the safety profile. What remains uncovered is auth/network failure behavior and how the path parameter scopes the check.
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?
One optional parameter at 100% schema coverage, so the baseline is 3. The schema already documents 'subpath (default: project root)' via its own description, and the tool description adds nothing about how path alters the scope of the update check, which is a genuinely ambiguous point here.
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 check (does a newer CodeEraser release exist) and enumerates what comes back: the latest tag, its SHA256 pins, and one recommended action. That is concrete and specific. It does not, however, distinguish itself from siblings like doctor, check, or scan, which an agent scanning the tool list might reasonably confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the name and the phrase 'the one action for this install' suggest this is the update-status probe. It never states when to prefer it over doctor/check/scan, nor any prerequisite or trigger condition. The note that applying is a human act at the CLI or GUI is useful context but is not a when-to-use rule.
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.
21 tool updates
- First observed
architecture - First observed
check - First observed
check_duplication - First observed
churn - First observed
clone - First observed
deadcode - First observed
docdup - First observed
doctor - First observed
erase - First observed
erase_log - First observed
flow - First observed
graph_sites - First observed
join - First observed
merge_suggestions - First observed
query - First observed
rules - First observed
scan - First observed
similar_units - First observed
structure - First observed
trend - First observed
update_check
TDQS
Scored across 21 tools
The set clusters into overlapping families: clone/check_duplication/docdup/join/merge_suggestions all concern duplication, and deadcode/flow/graph_sites all concern liveness, while scan/structure/architecture/trend/check all emit report-style metrics. The dense descriptions do differentiate them (T1/T2 vs T3, liveness verdicts vs in-function flow), but an agent could easily misselect within these families.
Names are uniformly lowercase, using snake_case for compounds (check_duplication, graph_sites, erase_log, merge_suggestions) and single words elsewhere (scan, erase, churn, flow, query). No camelCase or mixed verb styles, though the single-word vs compound mix means the pattern is readable rather than strictly uniform.
21 tools is at the heavy end but the domain (multi-faceted static analysis: duplication, dead code, structure, rules, query, diagnostics, updates) genuinely spans that many distinct reports. Each tool appears to earn its place rather than being redundant filler.
The surface covers the full analysis lifecycle: scanning, dedup, dead code, flow, structure, architecture, rules, Datalog query, trend, doctor, update_check, and erase audit. Applying an erase is deliberately a human act, and query/prelude fill the ad-hoc retrieval gap, so only minor workflow conveniences seem absent.
Maintenance
Related MCP Connectors
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
AI-powered codebase analysis — call graphs, security, dead code, complexity. 150+ tools.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Read-only, deterministic AI triage and readiness tools implementing Sophon's published rubrics.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceLive codebase intelligence for AI agents. Import graph PageRank for file importance, git forensics for co-change coupling and fragile code, convention detection across 16 domains, and blast radius analysis.49 npm3Business Source 1.1

codedeltaofficial
AlicenseNot gradedqualityBmaintenanceDeterministic code-churn measurement and AI-agent detection from the CodeDelta engine: measure churn between two directories or git refs, scan for code that runs AI agents, and get AI-authorship pointers. Runs fully locally.MIT- AlicenseNot gradedqualityBmaintenanceLocal code-graph engine for AI coding workflows: static analysis of Rust, Cangjie, ArkTS, TypeScript/JavaScript, C/C++, Python, and Shell projects into symbols, imports, call graphs, and quality gates, with pre-commit change review and impact analysis. Read-only by design — never executes build scripts or uploads code.61MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding assistants to scan a repository for code that cannot prove its usefulness, attribute it to AI-assisted or human commits, prove candidate deletions against the project's own tests, and pull a payoff report or run history, all without ever writing to the repository. The test command and any model judging stay under a person's control through environment configuration.1MIT