Skip to main content
Glama

Verify the claim. Know the context.

AI agent reliability toolkit

CI Python License buddie on Glama buddie on MCPRush Listed on mcpservers.org

Why buddie?

An agent finishes a task and tells you that CI passed, that a source supports its summary, or that your laptop has CUDA and Python 3.12. It sounds certain, and often it is right. When it is wrong, the mistake hides inside a confident sentence.

buddie separates what can be checked from what is only claimed. It checks supported claims against the evidence itself, gives the agent real observations of your machine instead of guesses, and marks what it could not check as unchecked. In 929 checkable quotations from published deep-research reports, 212 were altered or absent from the page they cited; buddie flagged 207 of them (research).

Related MCP server: evidence-lint

What buddie does

Verify. buddie checks supported claims against their evidence: a quotation against the page it links to, a file or commit against your repository, a merged PR or a green CI run against GitHub, a test result against the session's record of the command. No language model takes part in the check, so the agent cannot argue its way to a different verdict.

Catch mismatches. In Claude Code and Codex, buddie's hook checks supported claims at Stop and returns failures with the reason. In Claude Code the answer is already visible at that point; buddie asks for corrected lines instead of another copy of the whole answer. Supported message checks before delivery retain their existing behavior. Other clients call the checks through MCP or the command line and decide what to do with the result.

Observe. Before it suggests a command, an agent can ask buddie for the parts of your machine the task needs: the operating system, CPU, memory, GPU, Python, runtimes, tools. buddie reads only the categories you have granted, changes nothing, and records how each value was observed.

Discover. The compact Claude plugin includes a Discovery skill for evidence triage with the tools available in the current session. It uses real Core verification when connected, performs independent checks otherwise, and marks unavailable checks as not checked. Local hooks and MCP capabilities vary by surface; Cowork, Chat and mobile require separate live verification. Projects/Context remains a future design.

See it in action

Verify an agent's claim

An agent reports that it fixed a date parser and that the test suite is green. It marks the claim with a small anchor, ⚓ run:pytest -q => 41 passed, that buddie can check. The session transcript records what the test command actually printed:

Run it yourself from a clone; the report and transcript are in examples/work:

cd buddie/examples/work
buddie verify report.md --transcript session.jsonl --no-github
BLOCK anchor line 3 ⚓ run:pytest -q => 41 passed: output has no '41 passed'; it ends: ….......................................... 1 failed, 40 passed in 3.1s
note  pr:/ci:/run: anchors show what happened (PR state, checks on a commit, a command and its output), not that the code is correct
buddie FAIL: effects 0/1 hold, 1 broken

The files are a teaching fixture: buddie reads the recorded output rather than rerunning pytest. --json receipt.json also writes a receipt naming the evidence behind the verdict. Quotation, PR and CI examples, and which integration checks what: verification guide.

Know the environment

An agent is asked to set up a local development environment. Instead of guessing the operating system, GPU or Python version, it asks buddie for three categories, which the person has granted:

buddie snapshot --category system.os --category hardware.gpu --category software.python \
  --task "configure local development environment" --json diagnostics.json
buddie snapshot: diagnostics of 3 categories (grants active, policy absent; these govern the categories only)
  system.os: collected
    name: Windows 11  [os_interface]
  hardware.gpu: collected
    adapters: [model NVIDIA GeForce GTX 1650, source nvidia_smi_gpus, vendor NVIDIA, vram_bytes 4294967296]  [fixed_program]
  software.python: collected
    buddie_runtime: implementation cpython, pip True, venv True, version 3.14.6  [buddie]

Abridged from a run of buddie 2.0.0: the lines shown are unedited, and the machine's other observed values are left out. diagnostics.json holds the full document, with the method and time of each value.

A category you have not granted is reported as denied, and its collector never runs. A value buddie cannot read is marked unavailable, with the reason. Diagnostics is read-only and installs nothing; it gives the agent better facts, not a guarantee that its next command is right. Categories, grants and the document.

Get started

buddie needs Python 3.11 or newer and has no dependencies.

Claude Code

The recommended start. The plugin adds the answer check, the MCP tools including environment diagnostics, and run: checks against the session transcript:

/plugin marketplace add tsyyan/buddie
/plugin install buddie@buddie

It installs the latest released plugin (the plugin-stable branch), not unreleased work on main. To allow diagnostics, save the categories you choose as environment.toml in ~/.config/buddie/ (%APPDATA%\buddie\ on Windows). For the demo above:

version = 1
allow = ["system.os", "hardware.gpu", "software.python"]
roots = []

Levels, the intro mode and what the hook reads: Claude Code guide.

Other integrations

  • Codex: codex plugin marketplace add tsyyan/buddie, then codex plugin add buddie@buddie, and enable its hook in /hooks. The check runs at Stop; run: claims stay unchecked. Codex guide

  • Any MCP client: uvx buddie serve starts the stdio server. There is no gate: the agent calls the tools. Integrations

  • Command line and CI: pip install buddie, then buddie verify REPORT.md --json receipt.json. It exits 1 on FAIL; GAPS and EMPTY exit 0, so a CI step that requires PASS should read the receipt's outcome.

  • Claude Desktop: the .mcpb bundle from Releases, without a gate. Desktop guide

Every surface in detail: getting started.

Release status

Version

Release described here: PyPI, GitHub Releases, the Desktop bundle, the MCP Registry

2.0.5

Upgrading from 2.0.4 changes nothing you have to do: 2.0.5 gives every listing one name, buddie, a smaller icon, and makes Claude Code's marketplace install only released plugins (from plugin-stable); Codex keeps installing from the repository.

Upgrading from 2.0.2: 2.0.4 includes canonical Discovery, the README-style dog icon and Toolkit positioning, Linux worker guard hardening, and Stop-hook guidance that asks for corrections without repeating the already displayed answer. No new permissions are required; on Linux a failed parent-death guard now prevents the regex worker from running. Discovery leaves unavailable checks unverified. The 2.0.3 candidate was superseded before publication.

Upgrading from 2.0.1 changes nothing you have to do: 2.0.2 adds the local feedback tools (feedback_start, feedback_resolve, feedback_accept), GitHub citation checks and versioned public release notes. Upgrading from 2.0.0 changes nothing; 2.0.1 fixed how the MCP server reads its input on Windows systems whose code page is not UTF-8. Upgrading from 1.1.1 changes nothing for a 1.x setup. What can differ, and why, is in the changelog.

Documentation

Topic

Read

Install on every surface

Getting started

What each integration does

Integrations

Checks, outcomes and receipts

Verification, receipts

Environment diagnostics

Environment

Security and privacy

Limitations, security, privacy

Contributing

CONTRIBUTING.md

Everything else

Documentation index

Limitations

buddie is not a truth detector. It checks claims in the forms it recognises, such as quotations with links and anchored claims about files, PRs, CI and commands, against the evidence it can read. Paraphrases and unanchored claims stay unchecked. PASS covers only what was checked, and GAPS and EMPTY are not passes.

The answer check exists only in Claude Code and Codex, and it returns an answer rather than locking it: the agent fixes the claim or discloses it as unverified. An agent running as your user can edit local evidence, settings and the diagnostics grants file; only an administrator's protected policy sets limits it cannot raise.

buddie runs locally, with no model calls and no telemetry. It fetches the pages a report cites and calls GitHub for PR and CI claims. All limitations · Security boundaries · Privacy


Apache-2.0 · Changelog · Citation · Issues

Available Tools

8 tools
environment_snapshotA
Read-onlyIdempotent

Before giving system-specific instructions (install commands, drivers, setup), observe the parts of this machine the task needs instead of guessing: ask only for those categories (list: true names them). buddie collects what the person granted in their local grants file and the administrator's protected policy allows; anything else comes back denied, unsupported or unavailable with the reason. A request cannot grant: there is no consent argument, and an approval of this call is not a grant. The grants file states the person's intent; an agent with their file access could edit it, so only the protected policy is a ceiling it cannot change. This tool collects diagnostics categories only, never files or reports. Each observation says what it rests on (basis); unavailable means not observed, not absent. Nothing is installed or changed.

NameRequiredDescriptionDefault
listNoonly describe the categories and what is granted; collect nothing
pathNohardware.storage, development.project, development.repository: a directory the person granted
taskNowhat the observation is for; kept as the caller's word, grants nothing
toolsNosoftware.tools: names from the catalog (list: true shows it)
categoriesNocategory ids, e.g. system.os, hardware.gpu, hardware.memory, software.python, software.gpu_stack (list: true for all)

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly and non-destructive annotations, it discloses the grant model, that requests cannot grant consent, that approval of this call is not a grant, that denied/unsupported/unavailable results include reasons, and that each observation records its basis. This is unusually rich behavioral context for a read-only diagnostics tool.

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

Conciseness3/5

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

The description is dense and front-loads usage guidance before a crisp statement of purpose. The grant-threat-model details are relevant, but several sentences repeat or expand on concepts already covered by annotations and schema, making it longer than necessary.

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

Completeness4/5

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

It covers the important behavioral boundaries: grants, protected policy, denial reasons, basis, and read-only operation. With no output schema, it does not fully specify the return shape beyond basis and unavailable observations, but it gives enough context for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents list, path, task, tools, and categories. The description's parameter-related statements mostly restate the schema, such as list: true naming categories and task granting nothing, rather than adding substantial new parameter-level semantics.

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

Purpose4/5

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

The description uses a specific verb and resource: observe parts of this machine, collecting diagnostics categories only and never files or reports. It is clear about the tool's purpose, but it does not differentiate it from the sibling tools snap, source_text, summary, or verify_report.

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

Usage Guidelines4/5

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

It explicitly says to use this before giving system-specific instructions such as install commands, drivers, or setup, and to ask only for the categories the task needs instead of guessing. It does not state when to choose a sibling tool or when not to use this one.

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

feedback_acceptA
Read-onlyIdempotent

Before accepting a final report from a feedback chain: whether it is the text the chain verified. accepted is true only when the chain's disposition is verified and the report is byte for byte the chain's last accepted text; a report edited afterwards, a refused repair handed in anyway, or any report of a chain that is not verified is refused (reason). Reads the chain, checks nothing, changes nothing.

NameRequiredDescriptionDefault
chainYesthe chain feedback_start returned (sha256:...)
final_textYesthe final report as it is handed in

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so 'reads the chain, checks nothing, changes nothing' is largely redundant reinforcement. The real value added is the acceptance contract: verified disposition plus byte-for-byte identity, with three named refusal cases (post-edit, refused repair, unverified chain) — context annotations cannot express.

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

Conciseness3/5

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

Every clause carries information, but the structure is poor: the opening is a dangling fragment and the primary outcome (accepted boolean plus reason) is buried mid-sentence inside a semicolon chain. Front-loading 'Returns whether a final report is acceptable' would have made it far easier to parse.

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

Completeness4/5

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

For a two-parameter tool with no output schema, the description covers the decision criteria, the failure reasons, and the side-effect profile, which is nearly everything an agent needs. It leaves 'disposition is verified' undefined, depending on the agent's knowledge of the sibling feedback tools.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: 'final_text' must be byte-for-byte the chain's last accepted text, which tells the agent not to normalize or edit the string before passing it. The 'chain' parameter's provenance is only restated from the schema.

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

Purpose4/5

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

The description makes clear this is a validation predicate over a feedback chain's final report, with the accepted/reason outcome implied by the enumerated refusal cases. It is specific about the resource (a chain's final text) but is written as a sentence fragment ('Before accepting...: whether it is...') rather than a verb+resource statement, and it never names the sibling it differs from (e.g. verify_report).

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

Usage Guidelines4/5

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

'Before accepting a final report from a feedback chain' establishes the exact moment this check belongs in a workflow, and the refusal cases imply it should be run prior to handing in a report. It does not mention alternatives such as verify_report or feedback_resolve, so the agent must infer the routing itself.

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

feedback_resolveA

Answer a chain's open feedback with one corrected text: buddie checks the corrected text itself with the chain's own check options, judges the correction (scope, no added lines but 'buddie:' disclosures, verified claims kept) and appends the decision to the chain. Returns the decision and the next feedback. A refused submission (code) changes nothing.

NameRequiredDescriptionDefault
chainYesthe chain feedback_start returned (sha256:...)
feedbackYesthe chain's open feedback-v1, as it was returned
submissionYesrepair-submission-v1: schema_version, feedback_id, iteration, artifact_before, artifact_after (sha256 hex of the texts), execution, optional action_ref
original_textYesthe text the feedback was made for
corrected_textYesthe corrected text

TDQS

A3.7/5.0
Behavior4/5

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

Goes well beyond the annotations: it discloses that buddie re-runs the chain's own check options, names the judging criteria (scope, no added lines except 'buddie:' disclosures, verified claims kept), states the decision is appended to the chain, and specifies atomicity ('a refused submission changes nothing'). Minor gap: idempotencyHint=false is not explained, and openWorld behavior isn't elaborated.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, then validation detail, then return/refusal behavior. Dense but each clause carries information; slightly clunky phrasing but no filler.

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

Completeness4/5

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

No output schema, but the description explains what is returned (the decision and next feedback) and the refusal case. For a mutation tool with full schema coverage and annotations, this is largely complete; only the shape of the 'decision' and handling of specific refusal codes remain implicit.

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

Parameters3/5

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

Schema coverage is 100%, so chain/feedback/submission/original_text/corrected_text are already documented. The description adds a little meaning ('one corrected text' being checked against chain's check options) but does not clarify the submission object fields or how original_text/corrected_text relate to the artifact hashes.

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

Purpose4/5

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

States a specific verb+resource ('answer a chain's open feedback with one corrected text') and describes the internal validation and append step. It's clearly distinguishable from siblings like feedback_start/feedback_accept by its resolve-and-append role, though it never names those alternatives.

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

Usage Guidelines3/5

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

Usage is implied: you call this to answer an open feedback-v1 returned by feedback_start. There is no explicit when-to-use statement, no contrast with feedback_accept, and no prerequisites (e.g. that an accepted/started chain must exist) spelled out.

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

feedback_startA

Check a report and open a verification feedback chain (docs/feedback.md): buddie runs the check itself, keeps the chain and its check options in files of its own, and returns a feedback-v1 with at most one bounded action per finding. To answer it, correct only what an action names and call feedback_resolve. Feedback is advice: a verified report is not a finished task unless the requirements you state are met (state.task).

NameRequiredDescriptionDefault
pathNoa Markdown file to check instead of text
textNothe report itself (Markdown); or give path
fetchNosnapshot cited URLs not in the store yet
reposNorepo checkouts for anchors (default: the git repo at or under the server's cwd; in Codex none, so pass the workspace path)
storeNosnapshot store (default $VERBATIM_STORE or ./.verbatim)
accessNoverbatim --access for unreadable pages, e.g. 'default'
checksNocustom: these checks (quote, number, file_anchor, commit_anchor, fact_anchor, pr_anchor, ci_anchor, run_anchor, choice_anchor, work_claim, other_anchor)
githubNoask GitHub for pr:/ci: anchors and strict GitHub citation sources
modulesNocustom: these verification modules: sources (quotes, numbers), github (repo anchors, pr:, ci:), execution (run:, choice:, work claims)
numbersNoa number of a cited sentence not in its source: gap, fail or offgap
profileNowhat to check (default: everything): developer (repo, PR, CI, run: and work claims), research (quotes and numbers), complete, or custom with modules and/or checks. What a profile leaves out is not checked, and the result says so
transcriptNoClaude Code session jsonl for run: anchors
requirementsNowhat the task needs verified: a claim of this check whose subject starts with subject_prefix must be supported
iteration_limitNohow many corrected texts the chain takes before it ends

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the mutation and open-world profile is known. The description adds real value beyond them: it says the chain and its check options are persisted 'in files of its own', that the return is a feedback-v1 with at most one bounded action per finding, and that verifying is only 'advice' relative to state.task. It stops short of saying where those files live or how the chain terminates.

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

Conciseness4/5

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

Roughly 70 words with the action front-loaded in the first clause, and every sentence carries information rather than filler. The multipurpose phrasing ('buddie runs the check itself, keeps the chain and its check options in files of its own') is packed tight and takes a second read, which costs some clarity but no length.

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

Completeness3/5

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

This is a complex, high-parameter, stateful workflow tool with no output schema, so the description must carry the return-value burden. It gestures at the feedback-v1 shape ('at most one bounded action per finding') but never explains what a finding or an action looks like, and it leaves the boundary with verify_report unstated. Adequate orientation, insufficient for a 14-parameter chain-starter.

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

Parameters3/5

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

Schema coverage is 100% across all 14 parameters, including enums and defaults for profile, checks, modules and numbers, so the schema does the heavy lifting and a baseline 3 applies. The description contributes one genuinely extra semantic link, tying the requirements parameter to what counts as a 'finished task' (state.task). The remaining 13 parameters, including fetch, repos, store, access and iteration_limit, get no added meaning in prose.

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

Purpose4/5

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

States a specific verb+resource combination: 'Check a report and open a verification feedback chain'. It also pre-names the follow-up sibling (feedback_resolve), so the agent knows this is the entry point of a two-step flow. What it does not clarify is how 'Check a report' differs from the sibling verify_report, which reads as an overlapping purpose.

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

Usage Guidelines3/5

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

The description gives downstream guidance ('correct only what an action names and call feedback_resolve') and a completion caveat ('a verified report is not a finished task unless the requirements you state are met'), but it never states when this tool should be chosen over verify_report or feedback_accept. The usage path is implied rather than spelled out.

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

snapA
Read-onlyIdempotent

Snapshot URLs (bytes by sha256) so quotes can be taken from and checked against them. Call it before quoting a page, then copy the words from source_text and link the same URL.

NameRequiredDescriptionDefault
urlsYesthe pages to fetch (http or https), one snapshot each; a failure is recorded too
storeNosnapshot store (default $VERBATIM_STORE or ./.verbatim)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds useful behavioral context by saying snapshots store bytes keyed by sha256 for later checking, though it omits return format, error handling, and authentication/rate-limit details.

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

Conciseness5/5

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

Two short sentences with the core action front-loaded, followed by the workflow instruction. There is no filler or redundancy.

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

Completeness4/5

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

For a simple two-parameter tool with rich annotations and complete schema coverage, the description gives enough context to invoke it correctly in the quoting workflow. Since there is no output schema, it could say more about what a snapshot returns or how to reference it later, so it is not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both the urls array and store parameter are already documented in the schema. The description reinforces linking the same URL but adds no new meaning for the store parameter or array behavior, so the baseline 3 applies.

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

Purpose5/5

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

Starts with a specific verb and resource: 'Snapshot URLs', and explains the purpose via 'bytes by sha256' and quote verification. It also distinguishes itself from the source_text sibling by saying to call snap first, then copy words from source_text.

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

Usage Guidelines4/5

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

Explicitly says to call it before quoting a page and then use source_text, giving clear workflow context. It does not state when not to use it or name an alternative snapshot route, so it falls short of full when/when-not guidance.

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

source_textA
Read-onlyIdempotent

Visible text of a snapshot (URL or sha256 prefix). With grep, only the matches with context. Copy quotes from here character for character, put them in quotation marks “…” or «…», and link the snapshot's URL right after the quote in the same sentence.

NameRequiredDescriptionDefault
refYesthe snapshot: its URL, or a prefix of its sha256
grepNoa regular expression: only the matches, each with context
storeNosnapshot store (default $VERBATIM_STORE or ./.verbatim)
contextNowith grep, characters of text kept on each side of a match

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower; the description adds that grep mode truncates output to matches plus context, which materially changes what the agent sees. It omits any mention of output size limits or behavior when the ref matches nothing.

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

Conciseness4/5

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

Front-loaded with what the tool returns, followed by the grep caveat and citation rules; no filler. The citation-formatting sentence is arguably workflow advice rather than tool description, but it is compact and actionable.

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

Completeness4/5

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

For a read-only tool with full schema coverage and no output schema, this covers what is returned, the grep variant, and the quote/citation convention. The main remaining gap is failure/empty-match behavior and any truncation of large snapshots.

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

Parameters3/5

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

Schema coverage is 100% and every parameter is already described in the schema, so the baseline is 3. The description's grep note restates what the schema's grep/context entries already say, adding no syntax or format detail beyond them.

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

Purpose4/5

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

Names the concrete resource and result: the visible text of a snapshot, with the accepted reference forms (URL or sha256 prefix). An agent can distinguish it from summary/verify_report/snap, though the verb is implicit rather than stated ('visible text of a snapshot' rather than 'reads').

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

Usage Guidelines3/5

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

The description implies usage ('With grep, only the matches with context') and prescribes how to cite results, but never states when to choose this over siblings like summary or verify_report. The selection logic is left to inference from the sibling names.

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

summaryC
Read-onlyIdempotent

When no subagent is left: the summary built by code from the hook's records (what each subagent did with its receipt outcome, who was lost, the next steps with auto/ask verdicts, open PRs and red CI) and card, a ready AskUserQuestion input with at most three steps and «Ничего не запускать». Show text as is and ask with card unchanged; launch auto steps yourself and the picked ones with the anchor ⚓ choice:<summary_id>=.

NameRequiredDescriptionDefault
queueNoadd the queue's proposed rows
reposNorepo checkouts with buddie.toml for the queue (default: around the cwd)
staleNominutes before a silent subagent is lost
sessionNothe session id (default: the one whose state changed last)

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: the summary is built from the hook's records and returns both `text` and a ready `card`, and it clarifies that launching auto/ask steps is the agent's downstream action, not a mutation by this tool. It stops short of describing filtering behavior or failure modes.

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

Conciseness2/5

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

The description is a single dense run-on containing parentheticals, Russian text, and an emoji anchor marker. The purpose is buried behind the trigger condition rather than front-loaded, and the instruction payload would be clearer as separate sentences; it is over-packed rather than economical.

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

Completeness3/5

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

With no output schema, the description partially compensates by naming the returned `text` and `card` and their contents (verdicts, lost agents, PRs, CI). But parameters are left entirely to the schema and the behavior of the queue/repos/stale inputs is never tied back to the output, leaving the picture incomplete for a tool whose returns are undocumented.

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

Parameters3/5

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

Schema description coverage is 100% with all four parameters (queue, repos, stale, session) documented in the schema itself. The description adds nothing about those parameters, so baseline 3 applies.

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

Purpose3/5

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

The description does reveal that the tool produces a summary assembled by code from hook records plus a `card` (AskUserQuestion input), but it opens with a trigger condition ('When no subagent is left') rather than a clean verb+resource statement. It is distinguishable from siblings only indirectly, and the mix of purpose with post-call instructions makes the core function fuzzy.

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

Usage Guidelines3/5

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

The condition 'When no subagent is left' gives an implied trigger for calling the tool, which is useful. However, it never names or contrasts with the sibling tools (source_text, verify_report, snap), and the rest of the sentence is guidance about what to do with the output rather than when to choose this tool.

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

verify_reportA
Read-onlyIdempotent

Check a report before accepting or passing it on: every quote must be in the bytes of the source it links to (verbatim), every ⚓ anchor must hold in the repos, on GitHub (pr:, ci:) or in the session transcript (run:). Returns a receipt with outcome FAIL / GAPS / PASS / EMPTY, the blocking items and a one-line summary. Only quotations in quotation marks with a link to their page in the same sentence, and ⚓ anchors in backticks, are checked: write e.g. Article 2.10 says «Юридическое лицо, присоединившее другое юридическое лицо, подлежит ответственности» (КоАП РФ, ст. 2.10). EMPTY means nothing was checkable, not that the text is right.

NameRequiredDescriptionDefault
pathNoa Markdown file to check instead of text
textNothe report itself (Markdown); or give path
fetchNosnapshot cited URLs not in the store yet
reposNorepo checkouts for anchors (default: the git repo at or under the server's cwd; in Codex none, so pass the workspace path)
storeNosnapshot store (default $VERBATIM_STORE or ./.verbatim)
accessNoverbatim --access for unreadable pages, e.g. 'default'
checksNocustom: these checks (quote, number, file_anchor, commit_anchor, fact_anchor, pr_anchor, ci_anchor, run_anchor, choice_anchor, work_claim, other_anchor)
githubNoask GitHub for pr:/ci: anchors and strict GitHub citation sources
modulesNocustom: these verification modules: sources (quotes, numbers), github (repo anchors, pr:, ci:), execution (run:, choice:, work claims)
numbersNoa number of a cited sentence not in its source: gap, fail or offgap
profileNowhat to check (default: everything): developer (repo, PR, CI, run: and work claims), research (quotes and numbers), complete, or custom with modules and/or checks. What a profile leaves out is not checked, and the result says so
receiptNoreceipt contract of the result: v0 (default) or v1, which also says what was checked, what was not and why (scope, coverage)v0
transcriptNoClaude Code session jsonl for run: anchors

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, and the description adds substantial behavioral detail beyond that: receipt outcomes of FAIL/GAPS/PASS/EMPTY, blocking items, a summary line, and the important caveat that EMPTY means nothing was checkable rather than that the text is correct.

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

Conciseness4/5

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

The description is front-loaded with the purpose and stays dense with useful information, including the example of a valid quotation and anchor. It is somewhat long, but the length is justified by the tool's complexity and the density of checkable formats.

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

Completeness5/5

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

For a 13-parameter tool with no output schema, the description is complete enough: it explains what is checked, how quotations and anchors must be written, the possible receipt outcomes, and the meaning of EMPTY. Missing details such as auth or rate limits are less critical here because annotations cover the safety profile and the schema covers parameter behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 13 parameters in detail. The description adds useful checking examples and semantics such as quote/anchor syntax, but it does not add much parameter-specific meaning beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb-resource pair: it checks a report, verifying quotes against linked source bytes and anchors against repos, GitHub, or session transcripts. It also explains the receipt outcomes, making the tool's scope immediately clear and distinguishable from unrelated siblings such as snap or summary.

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

Usage Guidelines4/5

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

It gives a clear usage context: 'Check a report before accepting or passing it on.' It further explains what is checkable and what EMPTY means, but it does not explicitly name alternatives or describe when not to use this tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv2.0.4
    • Addedfeedback_accept
    • Addedfeedback_resolve
    • Addedfeedback_start
    • Changedverify_report1 field changed
      • changedInput schema / properties / github / description
        Previous value: -"ask GitHub for pr:/ci: anchors"New value: +"ask GitHub for pr:/ci: anchors and strict GitHub citation sources"
  2. 3 tool updatesv2.0.0
    • Addedenvironment_snapshot
    • Changedsnap2 fields changed
      • addedInput schema / properties / store / description
        Added value: +"snapshot store (default $VERBATIM_STORE or ./.verbatim)"
      • addedInput schema / properties / urls / description
        Added value: +"the pages to fetch (http or https), one snapshot each; a failure is recorded too"
    • Changedsource_text4 fields changed
      • addedInput schema / properties / context / description
        Added value: +"with grep, characters of text kept on each side of a match"
      • addedInput schema / properties / grep / description
        Added value: +"a regular expression: only the matches, each with context"
      • addedInput schema / properties / ref / description
        Added value: +"the snapshot: its URL, or a prefix of its sha256"
      • addedInput schema / properties / store / description
        Added value: +"snapshot store (default $VERBATIM_STORE or ./.verbatim)"
  3. 1 tool updatev1.1.1
    • Changedverify_report4 fields changed
      • addedInput schema / properties / checks
        Added value: +{
        +  "description": "custom: these checks (quote, number, file_anchor, commit_anchor, fact_anchor, pr_anchor, ci_anchor, run_anchor, choice_anchor, work_claim, other_anchor)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / modules
        Added value: +{
        +  "description": "custom: these verification modules: sources (quotes, numbers), github (repo anchors, pr:, ci:), execution (run:, choice:, work claims)",
        +  "items": {
        +    "enum": [
        +      "sources",
        +      "github",
        +      "execution"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / profile
        Added value: +{
        +  "description": "what to check (default: everything): developer (repo, PR, CI, run: and work claims), research (quotes and numbers), complete, or custom with modules and/or checks. What a profile leaves out is not checked, and the result says so",
        +  "enum": [
        +    "developer",
        +    "research",
        +    "complete",
        +    "custom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": "v0",
        +  "description": "receipt contract of the result: v0 (default) or v1, which also says what was checked, what was not and why (scope, coverage)",
        +  "enum": [
        +    "v0",
        +    "v1"
        +  ],
        +  "type": "string"
        +}
  4. 4 tool updatesv1.0.0
    • First observedsnap
    • First observedsource_text
    • First observedsummary
    • First observedverify_report

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation4/5

The tools mostly target distinct lifecycle stages: standalone verification, feedback-chain start/resolve/accept, evidence snapshotting/reading, environment observation, and summary. The only mild overlap is that verify_report and feedback_start both check a report, though their descriptions clarify that one returns a receipt while the other opens a correction chain.

Naming Consistency3/5

All names use snake_case, which is readable, but the conventions are mixed: verify_report is verb_noun, feedback_start/feedback_resolve/feedback_accept use a noun-first pattern, environment_snapshot and source_text are noun phrases, and snap/summary are bare. This is understandable but not a single predictable pattern.

Tool Count5/5

Eight tools is well within a reasonable range and each tool maps to a clear part of the workflow: verification, feedback lifecycle, evidence capture/read, environment observation, and summary. No tool appears redundant enough to remove.

Completeness4/5

The report-verification and feedback-chain lifecycle is well covered with start, resolve, accept, and standalone verification. Minor gaps exist around inspecting or listing existing chains/snapshots directly, but the core workflows have no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for verifying AI agent claims vs reality — single-transcript inline grounding-check that flags when an agent's response states facts not in the input context, when its code silently swallows exceptions and substitutes mock data, or when its multi-turn transcript contains contradictions or unverified completion claims. Sub-second, local, free, no API calls.
    4
    52 PyPI
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Open-source verification for evidence-grounded AI. Runs deterministic grounding checks of AI outputs against source evidence, with no LLM judge.
    1
    39 npm
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables Claude to independently check an AI agent's work in a local git repository by recording a baseline, running only the checks relevant to the changed files, and cross-checking what the agent claimed. Returns a compact, evidence-labelled report with a verdict and a ready-to-paste next prompt, so unverified success claims can't slip through.
    8
    MIT