Skip to main content
Glama

cross-review

MCP server orchestrating API-first cross-review between Claude, ChatGPT Codex, Gemini, DeepSeek, Grok, and Perplexity with unanimous convergence gates.

status: stable release npm CI Publish runtime: API-only license: Apache 2.0

Upgrade from the published registry.

npm upgrade -g @lcv-ideas-software/cross-review --ignore-scripts --allow-git=none --allow-remote=none
# or using the GitHub Packages mirror:
npm upgrade -g @lcv-ideas-software/cross-review --@lcv-ideas-software:registry=https://npm.pkg.github.com --ignore-scripts --allow-git=none --allow-remote=none

npm 12 global operations evaluate the whole global dependency tree, not this package's project policy in isolation. The command therefore disables every install-time script and keeps Git and remote-URL dependencies blocked. The published package has no install lifecycle and is tested in this mode. Never add --dangerously-allow-all-scripts, and do not install a locally built source tree or tarball as a substitute for the published registry release.

Status. Stable. The current source/release target is v09.02.02 (package 9.2.2). Use the npm badge or npm view @lcv-ideas-software/cross-review version for registry state and server_info for the version actually loaded by an MCP window. See CHANGELOG.md for the full release history.

Project renamed 15/05/2026. This project was previously published as @lcv-ideas-software/cross-review-v2 (versions 0.x through 3.7.5). v4.0.0 is the first release under the shorter canonical name @lcv-ideas-software/cross-review after the companion cross-review-v1 project was discontinued and archived. Historical CHANGELOG entries below v4.0.0 reference the prior name verbatim.

The version history at a glance:

v09.02.02 (23/09/2026): The xAI peer now defaults to Grok 4.7 and reads assistant text from typed Responses output, ignoring encrypted reasoning items.

Release

Scope

v09.02.01

Perplexity requests no longer ask perplexity/kimi-k3 for a reasoning effort it rejects. Every bare invalid request failure of the peer since 14/09/2026 had one mechanism: the adapter sent reasoning.effort: "max" and the pinned model rejects xhigh and max — HTTP 400 synchronously, a failed background run at the first retrieval — while `minimal

v09.02.00

One re-creation after a bare asynchronous Perplexity failure: a background run the provider accepted and then reported failed at the first retrieval with the bare invalid request body — no param, no HTTP status, no usage, within PERPLEXITY_BARE_FAILURE_RECREATE_WINDOW_MS of the create — is created once more through withRetry; every other failure keeps its verdict, and a second bare failure persists. Also: the Windows token-file ACL probe in scripts/smoke.ts runs Windows PowerShell 5.1 with its own PSModulePath so the suite passes under a pwsh 7 ancestor, and three pre-existing biome useOptionalChain warnings are cleared (CROSREV-48, #324).

v09.01.00

A provider failure preserves the provider's own error object instead of discarding it: the optional provider_error_detail keeps the HTTP status, type, code, param and the body — redacted as structure, capped at a declared ceiling and flagged when truncated — so a 400 rejecting our request body and an asynchronous failure of an already-created background job can be told apart afterwards; an empty serialization is not recorded (CROSREV-50, #322).

v09.00.00

Major: a circular session is refused when the output-ceiling screen would drop ANY rotator, instead of quietly continuing with the rest. The initial screen ran once and a dropped peer never returned, so a session could finalize converged while a peer that would fit the final artifact never saw it. The refusal costs zero provider calls and names the excluded peers with their ceilings and what continuing would have narrowed the rotation to; the two levers stay the same — shrink the artifact or raise the ceilings in the central configuration (CROSREV-49, #319).

v08.00.00

Major: review mode evaluates a fixed artifact, and the lead never revises it. Three surfaces disagreed about the relator's role in mode: "review", a seat died on max_output_tokens after the round's votes had been paid, and a short lead verdict silently replaced draft. In review the lead now generates only in round zero, when the caller brought no artifact; from there the peers vote on a fixed artifact, and the output-ceiling screen applies to ship and circular only. Callers that relied on the lead re-emitting the artifact in review no longer get that behaviour. Also updates the CodeQL SARIF upload Action to v4.38.0 and zizmor-action to v0.6.4, SHA-pinned (CROSREV-46, #318).

v07.00.00

Major: the operator identity is retired from the protocol. caller is now REQUIRED on every tool that accepts it and "operator" is no longer an admissible value, so a host that omitted it and relied on the old default fails schema validation — set it explicitly before upgrading. The nine read-only tools that never accepted caller (session_list, session_read, session_poll, session_metrics, session_peer_reliability_report, session_events, session_report, session_check_convergence, session_judgment_precision_report) are unaffected. escalate_to_operator, session_evidence_checklist_update and regenerate_caller_tokens are removed; session_finalize accepts only outcome=aborted and is petitioner-scoped; server_info drops operator_capability_loaded and operator_capability_required; the operator_verified provenance tier is no longer produced, and host-tokens.json holds six capabilities instead of seven. The pins move to gpt-6-astra and claude-fable-5-1, with no second supported model per provider — re-key any model_cost_rates card accordingly or the financial preflight blocks. The relator draw now screens the seat's output ceiling against the draft before dispatching a round. Every cross-review-authored surface is English. Also: a Perplexity poll failure no longer re-creates the run it just abandoned — the rethrow carries safe_to_repeat: false, read only by the retry loop (issue #298).

v06.00.00

Major: the five legacy Sonar rate-card keys (request_fee_low_per_1000, request_fee_medium_per_1000, request_fee_high_per_1000, citation_tokens_per_million, deep_research_reasoning_tokens_per_million) are rejected by the strict central-config schema again — remove any Sonar card or key from config.json before upgrading, or the whole file is ignored and paid calls stay blocked with CROSS_REVIEW_CONFIG_FILE_INVALID. TokenUsage.citation_tokens, the three CostEstimate line items and the five legacy CostRateConfig keys leave the shipped declarations, so a consumer referencing them stops compiling; server_info.config_load.deprecated_keys_ignored and the citation_tokens clause of the provider-work predicate are gone with them. Also: the Perplexity reviewer and relator run in Agent API background mode (background: true plus GET /v1/agent/{id}) because the provider severs a synchronous request at ~300 s; those two long requests now send store: true, so Perplexity retains them (issue #296).

v05.00.00

Major: legacy Sonar dimensions removed. estimateCost no longer prices them; the five Sonar-only rate-card keys stay accepted by the schema as deprecated no-ops named at boot; a central config the schema rejects is now announced at boot.

v04.06.08

Evidence custody fixes. A provider-escaped GitHub URL quoted from the attachment no longer downgrades a READY vote; a relator may name a file the admitted unified diff materializes.

v04.06.07

No manual gesture. A push to main that changes the version publishes to npmjs.com and GitHub Packages and then records the Release with the run's own token.

v04.06.06

Native release path. The repository-owned tagging, dispatch and policy machinery leaves; publishing runs on a published GitHub Release with npm Trusted Publishing and provenance.

v04.06.05

Native organization governance. Actions lockfile, advanced CodeQL workflow, merge-queue triggers and the v04.05.26 recovery workflow leave; the canonical Dependabot auto-merge and the organization workflows enter; the release gates read the CodeQL default-setup analyses.

v04.06.04

Makes evidence conflict correlation linear and argv-exact, and makes future/current model parsing clause-aware through finite English/Portuguese frames, including replace … with, update … to, Portuguese present qualifiers, and semicolon isolation.

v04.06.03

Restores fail-closed anti-deception semantics for conflicting executions of the same command, additive not only/não só model claims, and current-state claims beside planning language, while preserving independent RED/GREEN records and genuine future targets.

v04.06.02

Republish of v04.06.01 with a self-contained pin-validator action (bundled parser, clean-runner proven), reference-resolved local action manifests and a location-scoped Scorecard allowance.

v04.06.01

Republish of v04.06.00 with the supply-chain gate fix: minimal per-job GITHUB_TOKEN permissions across all workflows, TokenPermissionsID back under Scorecard watch, and a real pinning revalidation in the Publish gate covering the immutable $/ same-repo references.

v04.06.00

Migrates the Perplexity peer to the Agent API (perplexity/kimi-k3) before the Sonar sunset of 27/09/2026, moves Grok to grok-4.6 with xhigh effort, refreshes provider rate documentation, and makes the relator lottery smoke deterministic with an explicit chi-square bound.

v04.05.39

Prevents repeated caller-token permission recovery in one boot, regenerates only after a confirmed disappearance, and makes the trusted-console Windows recipe replace only a protected-empty DACL before verifying the exact result.

v04.05.38

Locks the T2#10 source-regex debt at its current smoke=129, source-contract=29, total 158 baseline so a new broad source-style regex pin cannot consume the two-pin allowance left by the older v4.4.6 budget.

v04.05.37

Makes Windows caller-token ACL hardening interruption-tolerant, repairs one protected-empty-DACL denial without looping or rotating tokens, binds path/SID data outside the PowerShell command parser, and adds a dedicated Windows regression gate.

v04.05.36

Repairs byte-exact JSON citation grounding, preserves active caller evidence during full decision retry, accepts documented terminal Perplexity aggregate content, and refreshes the signed immutable central automation pins.

v04.05.35

Hardens the public-package boundary, moves administrative release checks into the protected non-deployment environment, updates TypeScript ESLint to 8.66.0, and makes Windows parent-process forensics tests deterministic without changing the 500 ms best-effort runtime cap.

v04.05.34

Removes two redundant control-flow expressions reported by GitHub Code Quality while preserving the budget-preflight behavior and the lazy evidence-attachment fallback used when truthfulness preflight is disabled.

v04.05.33

Supersedes the unpublished 4.5.32 tag by recognizing npm's documented 404 identity concealment only in the negative OIDC probe, matching npm's scoped-package escaping, retaining an exact-201 positive gate, and resolving OpenAI 7.3.0.

v04.05.32

Bootstraps checksum-verified npm 12.0.2, proves both npm OIDC environment boundaries before source execution, splits privileged publication from verification, and remediates the current Hono, brace-expansion, fast-uri and ip-address advisories.

v04.05.31

Supersedes the unpublished 4.5.30 tag by making the clean-consumer license gate follow the exact bundled MCP SDK version instead of a stale hard-coded version.

v04.05.30

Updates the OpenAI runtime to 7.0.0 and bundled MCP SDK to 1.30.0; completely removes Socket Security and StepSecurity; prevents redundant immutable-tag publication; fails closed on ambiguous GitHub API status; and runs direct Zizmor through checksum-verified uv.

v04.05.29

Supersedes the unpublished 4.5.28 tag and locks brace-expansion 5.0.8 after its newly disclosed high-severity DoS advisory blocked publication; also retains the descriptor-based caller-token TOCTOU fix verified by CodeQL.

v04.05.28

Adds opt-in Claude Opus 5 support; bounds Evidence Broker amplification without weakening blockers; repairs interrupted-session lifecycle, checklist provenance and truthfulness diagnostics; hardens caller-token ACLs; and makes event polling compact.

v04.05.27

Updates the Anthropic and OpenAI SDKs, makes manifests and lockfiles the dependency source of truth, and ships hardened dependency automation with verified release recovery.

v04.05.26

Bundles the MCP runtime and hardens exact-SHA automation, immutable releases, and current provider dependencies.

v04.05.25

Resolves the three registry advisories in the lockfile: body-parser 2.3.0, nested protobufjs 7.6.5, and brace-expansion 5.0.7; updates the one reviewed install-script approval to protobufjs@7.6.5. Scorecard and Auto-tag remain fail-closed; no alert was suppressed.

v04.05.23

Accepts npm 12's one-item npm view --json response only when it contains one metadata object; empty, multiple, and malformed responses fail closed before the integrity-bound audit lock and mandatory npm audit signatures gate.

v04.05.22

Decodes npm's Sigstore DSSE envelope before binding the SLSA provenance to the protected tag, publication workflow, and immutable source commit; the later cryptographic npm audit signatures gate remains mandatory.

v04.05.21

Aligns the durable effective-config regression with JSON semantics: unset optional properties are omitted consistently from persisted snapshots and their SHA-256 canonical form.

v04.05.20

Restores a deterministic CI fixture for the pre-publish budget/cache contract: Gemini has an explicit test rate and a manually known settlement cannot retain a stale unknown-spend marker. The production financial gate remains fail-closed.

v04.05.19

Hardens the npm publication gate without weakening artifact verification: an integrity-bound temporary lock drives npm ci and npm audit signatures, while visibility no longer pipes downloaded data into Node.

v04.05.18

Closes the 4.5.16–4.5.17 session-audit findings: symmetric grounding for blocking verdicts, per-peer write-through durability, terminal preflight audit trails, bounded evidence judges, complete cache/config telemetry and action-oriented compact reports.

v04.05.17

Publishes the accumulated provider/toolchain maintenance, raises the Anthropic SDK range and keeps npm 12 dependency scripts fail-closed with an exact, reviewed Google Gen AI 2.12.0 no-op lifecycle permission.

v04.05.16

Makes background observation compact and race-safe: summary polling by default, explicit forensic detail, real HTML-neutralized Markdown, durable cross-host job status and idempotent late-cancellation results with final state.

v04.05.15

Ships the Evidence Broker continuity fix with the complete Dependabot hardgate: supported npm resolver, npm 12 build/release pin, pip-compile source+hash lock, grouped Python updates and concurrent-base merge retry.

v04.05.14

Restores Evidence Broker continuity safely: clean grounded historical READY sources are replayed locally without stale prompt reuse, strict same-owner aliases collapse, git -C ... diff --check is recognized and final convergence is persisted consistently.

v04.05.13

Eliminates a repeated ReDoS class in Evidence Broker symbol extraction and makes publication wait for CodeQL on the exact SHA plus zero actual open code-scanning alerts.

v04.05.12

Fixes Evidence Broker convergence: direct rounds receive unresolved checklist IDs, grounded same-requester rechecks close the correct item, natural-language alternatives no longer deadlock, and irrelevant or partial evidence still fails closed.

v04.05.11

Makes autonomous evidence routing unambiguous in the MCP contract: AI evidence is persisted automatically through review starters, while the optional operator authority-promotion tool cannot be mistaken for a mandatory human upload step.

v04.05.10

Retries npm attestation propagation independently from package visibility and follows the registry-advertised pathname on the pinned npm registry origin, preventing false-negative post-publish failures without weakening SLSA provenance requirements.

v04.05.09

Keeps server-authored READY remediation out of peer caller_requests, preventing unresolvable evidence-checklist blockers while preserving real peer asks and the complete decision audit trail.

v04.05.08

Hash-pinned npm 12.0.1 bootstrap across CI/release jobs and trusted default-branch auto-tag checkout with exact successful-CI SHA gating; closes code-scanning alerts 32–38.

v04.05.07

Complete 4.5.6 provider remediation plus CI-before-tag release ordering, npm 12.0.1 alignment, strict dependency-script review and cache exclusion.

v04.05.06

Six-provider contract remediation — provider-specific wire schemas and output budgets, controlled OpenAI/Gemini truncation recovery, safe citation/diff correlation, runtime namespace fixes, corrected FinOps, and npm 12/OIDC release hardening.

v04.05.05

Clean-runner publish follow-up — make cancellation, health and accounting regression fixtures independent from private operator rate cards and reject false-green preflight coverage; production financial gates remain fail-closed.

v04.05.04

Runtime-hardgate remediation — fix grounding, truthfulness namespaces, consensus judging, multi-window cancellation, accounting, session ceilings, terminal reports and cross-provider ultra normalization.

v04.05.03

Security/hardgate patch — remove exponential regex backtracking, trust integrity-checked attachment path/digest metadata, accept correlated single-quoted artifact literals and stop treating source-version bumps as historical runtime claims.

v04.05.02

Patch release — publish the complete authenticated-evidence transport update with a hermetic clean-runner regression fixture; no operator central configuration is required by the test gate.

v04.05.01

Patch release — restore authenticated peer evidence transport with append-only active snapshots, combined preflight parity, strict operational records, independent relator/reviewer roles and immutable terminal outcomes; no manual operator attachment is required.

v04.05.00

Minor release — refresh all six provider contracts and add fail-closed provider terminals, runtime config fingerprints, operator evidence custody, peer self-attestation rejection, and grounded READY votes.

v04.04.08

Patch — raise the transitive hono override floor and clear the current advisory set.

v04.04.07

Patch — promote the patched protobufjs floor for downstream consumers.

v04.04.06

Patch — close the remaining Claude re-validation tail: orchestrator attached-evidence reads now fail closed, session_doctor defaults to action-oriented findings, and T2#10 source-regex debt drops to a locked total of 160.

v04.04.05

Patch — close the seven verified residual audit items: evidence fail-closed realpath handling, typed shadow-decision runtime events, derived release date, redaction-comment correction, retry/security gate verification, and a locked T2#10 smoke source-contract budget.

v04.04.04

Patch — central config can now carry model-specific rate cards, so Claude Opus 4.8 and Claude Fable 5 pricing are both stored and the active Anthropic rates follow the configured Claude model automatically.

v04.04.03

Patch — continue the T2#10 smoke-debt reduction by moving the lazy provider SDK import source contract into the dedicated source-contract smoke, preserving coverage while reducing broad smoke regex pins.

v04.04.02

Patch — support Claude Fable 5 as an explicit Anthropic production-model option, including verified model selection, refusal handling, refusal events, docs and cost guidance.

v04.04.01

Patch — complete residual audit sweep: full mutating-tool identity gate, evidence attachment cache/safety, async EventLog flush, Perplexity auth-only probe mode, cache-cost correctness, dashboard report method split, and dedicated source-contract smoke isolation.

v04.04.00

Minor — consolidated audit close-out: log-level validation, realpath containment, initial-draft fabrication guard, Perplexity probe minimization, identity audit events, derived tool list, docs and metadata guards.

v04.03.09

Patch — move truthfulness_preflight coverage into a focused smoke script and tighten evidence-artifact matching for path-qualified refs and .md/.diff/.patch/.csv files.

v04.03.08

Patch — move evidence_preflight behavior coverage into a focused smoke script and run it explicitly before the broader smoke suite.

v04.03.07

Patch — evidence preflight now blocks paid review when the submission references an external evidence/log artifact that was not attached to the session.

v04.03.06

Patch — isolate runtime-smoke in a temporary data directory so harness runs do not write open sessions into the operator's real runtime corpus.

v04.03.05

Patch — filter Perplexity streaming <think> token events, expand ~ in central config paths, escape dashboard runtime paths, and harden smoke scripts.

v04.03.04

Patch — harden cross-process event sequencing, exact-match fabrication checks, Gemini missing-text handling, and streaming provider error retry classification.

v04.03.03

Patch — add forensic diagnostics for append/event and identity failures, flush pending events on shutdown signals, retry structured provider 5xx errors, and refresh official AI provider SDKs.

v04.03.02

Patch — harden persistence redaction, finalized-session mutation guards, side-effect identity gates, caller-token rotation output, and Windows registry config fallback.

v04.03.01

Patch — tighten skip-peer classification so non-retryable provider errors block, while Anthropic overload events remain retryable and better surfaced in skip diagnostics.

v04.03.00

Minor — P1/P2/P3 follow-up with unresolved-evidence close-out visibility, an offline fixture eval harness, and a read-only peer reliability report.

v04.02.05

Patch — harden session auditability with terminal events, cost split reporting, not_resurfaced visibility, and relator provenance checks for session IDs/GitHub URLs.

v04.02.04

Patch — harden truthfulness preflight auditability, add a read-only preflight retest tool, and reduce false parser warnings for attached/log evidence.

v04.02.03

Patch — promote the Gemini canonical default to gemini-3.1-pro-preview and refresh the active local Gemini rate card.

v04.02.02

Patch — provider-doc refresh, Perplexity probe repair, current model pins, and rate-card guidance.

v04.02.01

Patch — publish the workspace hard-gate cleanup as a package release.

v04.02.00

Minor — bounded MCP session listing and cancellation semantics cleanup.

v04.01.01

Patch — release the hard-gate cleanup as a published package.

v04.01.00

Minor — security hardening of session-store concurrency, write-path DoS surface, and credential redaction.

v04.00.08

Patch — eliminate the recurring js/file-access-to-http CodeQL false positive at the source.

v04.00.07

Patch — bounded npm registry fetch in the post-publish verifier.

v04.00.06

Patch — Windows-safe registry verifier.

v04.00.05

Patch — hard-gate close-out for the Codex v4.0.4 audit.

v04.00.04

Patch — restore prettier coverage of src/ and scripts/ (close audit on v4.0.3 hard-gate gap).

v04.00.03

Patch — biome/check gate wiring after the v4 rename.

v04.00.02

Patch — Codex second-pass audit close-out (6 findings).

v04.00.01

Patch — close-out of post-v4.0.0 audit (eight surfaces left stale by the rename bulk-replace).

v04.00.00

Major — project renamed to cross-review

v03.07.05

Patch — logs+sessions study 15/05/2026 close-out (4 surgical fixes from 244-session/429-round corpus).

v03.07.03

Patch — the directive quoted verbatim in pt-BR, "sem fallback é sem fallback", + Codex v3.7.2 review residuals.

v03.07.02

Patch — Codex 3rd super-audit close-out of v3.7.1

v03.07.01

Patch — Codex super-audit close-out of v3.7.0

v03.07.00

Minor — Codex super-audit close-out 14/05/2026

v03.06.00

Minor — observability + caller-discipline close-out 14/05/2026

v03.05.00

Minor — Codex operational-report close-out 14/05/2026: 5 findings from sessions f0db3970 + df052926.

v03.04.00

Minor — Perplexity multi-failure-mode close-out 13/05/2026: 3 coordinated fixes covering 7 production sessions Codex flagged (51973fac, f72e597a, f9a19401, 99d46a2b, 00d92cce, 59776026, 0003b2fe).

v03.03.00

Minor — Caller peer-selection lock (operator directive 12/05/2026, quoted verbatim in pt-BR: "TODOS OS AGENTES/PEERS SEMPRE PARTICIPAM, INDEPENDENTE DA ESCOLHA OU VONTADE DO CALLER").

v03.02.00

Patch — Codex bug-report close-out 12/05/2026: three surgical fixes (Perplexity <think> parser + session-state invariant + orchestrator strict peers).

v03.01.00

Minor — Central config file (config.json). Eliminates ~700 redundant env-var declarations across the 7 MCP host configs.

v03.00.00

Major — Perplexity joins the sexteto. Quinteto (5 peers) → sexteto (6).

v02.28.00

Minor — Cold-start hardening Part 3: Windows registry env-var lookup bulk-cached (3-7 s → ~100 ms).

v02.27.01

Patch — Cold-start hardening Part 2: lazy-load 5 provider SDKs + defer 6 startup sweeps to setTimeout(30s).

v02.27.00

Minor — Cold-start hardening Part 1: corrupted meta.json auto-quarantine + finalized-session auto-prune.

v02.26.01

Patch — max_attached_evidence_chars default raised 80_000 → 200_000 to fix multi-file evidence truncation.

v02.26.00

Minor — Full pricing-model schema: base + extended-tier + cache (read/write) + promo (limited-time discount), all env-configurable, graceful fallback when fields are absent or promo expires.

v02.25.01

Patch — meta.json corruption hotfix: redact() env-style pattern was crossing JSON-escape boundaries.

v02.25.00

Third deliberation mode circular joins ship and review.

v02.24.00

Evidence-provenance lock for the ship-mode relator (Codex bug report 10/05/2026).

v02.23.00

Anthropic empty-revision degenerate path detection.

v02.22.00

session_doctor drill-down + per-round cost telemetry + budget warning event.

v02.21.00

Cross-provider prompt caching across all 5 peers (OpenAI, Anthropic, Gemini, DeepSeek, Grok).

v02.18.08

Site sponsor card iteration.

v02.18.07

Patch — site/index.html visual identity refresh.

v02.18.06

Patch — Gemini API function-declaration compatibility for MCP tool inputSchemas.

v02.18.05

Patch — anti-drift smoke drivers for v2.18.4 audit closure (operator directive 07/05/2026).

v02.18.04

Patch — Codex external audit 07/05/2026 outcome: 6 surgical fixes (P1.1, P1.2, P1.3, P1.4, P2.1, P2.4).

v02.18.03

Patch — Gemini default pin bump gemini-3.1-pro-preview → gemini-2.5-pro (operator preference 07/05/2026; coordinated with cross-review-v1 v1.12.4).

v02.18.02

Tier 5 — Windows process-tree introspection (coordinated with cross-review-v1 v1.12.2).

v02.18.01

Hotfix: closes Dependabot security advisory GHSA-v2v4-37r5-5v8g (medium severity) — ip-address XSS in Address6 HTML-emitting methods.

v02.18.00

F1 caller capability tokens (coordinated with cross-review-v1 v1.11.0).

v02.17.00

HARD GATE — identity forgery rejection (operator directive 05/05/2026).

v02.16.00

Tribunal protocol repair plus operational doctor.

v02.15.01

server_info consensus visibility hotfix.

v02.15.00

Backlog bundle for operational judge controls.

v02.14.01

Grok reasoning model hotfix.

v02.14.00

Grok joins the tribunal.

v02.13.00

Lead meta-review drift fix.

v02.12.00

Shadow judge observability.

v02.11.00

Relator lottery plus shadow auto-wire.

v02.09.00

LLM evidence-judge pass.

v02.08.00

Per-peer health and Evidence Broker lifecycle.

v02.07.00

Evidence Broker.

v02.06.01

Fallback/recovery budget hard gate.

v02.06.00

Token-delta compaction plus v2.5 format hotfix bundle.

v02.05.00

Evidence and budget hardening pass.

v02.04.01

CI stub fail-fast hotfix.

v02.04.00

Audit-closure hardening pass.

v02.03.03

Prompt shielding and financial safety.

v02.03.02

CI-green README/docs cleanup.

v02.03.01

README organizational standardization.

v02.03.00

Provider-neutral review_focus.

v02.02.00

Provider token streaming.

v02.01.01

CodeQL and model-selection hardening.

v02.01.00

First stable cross-review release.

v02.00.04

Session event race hotfix.

v02.00.03

Background sessions and durable reports.

v02.00.02

Publishing and dashboard sanitization.

v02.00.01

Public npm/package metadata alignment.

v02.00.00

Development package line hardening.

v2.0.0-alpha.2

Durable session recovery alpha.

v2.0.0-alpha.1

Model attestation and store hardening alpha.

v2.0.0-alpha.0

Initial API/SDK-only MCP server.

What It Does

cross-review is the stable API-first implementation of the cross-review pattern. It orchestrates provider API clients (OpenAI/Codex, Anthropic/Claude, Google Gemini, DeepSeek, xAI/Grok, and Perplexity) and provides an MCP-compatible server surface.

Runtime calls are real provider calls by default. Stubs exist only for smoke tests and CI when CROSS_REVIEW_STUB=1.

  • OpenAI client library (openai) for the Codex/OpenAI peer.

  • Anthropic TypeScript client library (@anthropic-ai/sdk) for Claude.

  • Google Gen AI client library (@google/genai) for Gemini.

  • OpenAI-compatible DeepSeek API through the OpenAI client library.

  • OpenAI-compatible xAI Grok API through the OpenAI client library.

  • OpenAI-Responses-compatible Perplexity Agent API through the OpenAI client library.

  • The MCP SDK (@modelcontextprotocol/sdk) is declared as a development dependency and bundled into the stdio artifact; its audited scope is therefore bundled/dev, not an undeclared consumer dependency.

package.json is the source of truth for declared dependency ranges. package-lock.json records the exact resolution for this repository checkout; consumers resolve those ranges through their own lockfiles.

Related MCP server: Multi-MCP

Quick Start

# Set API keys (PowerShell example)
[Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "<OPENAI_API_KEY>", "User")
[Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "<ANTHROPIC_API_KEY>", "User")
[Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "<GEMINI_API_KEY>", "User")
[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "<DEEPSEEK_API_KEY>", "User")
[Environment]::SetEnvironmentVariable("GROK_API_KEY", "<GROK_API_KEY>", "User")
[Environment]::SetEnvironmentVariable("PERPLEXITY_API_KEY", "<PERPLEXITY_API_KEY>", "User")

Restart your terminal after changing environment variables.

Run the MCP host only from the package published by the registry; do not point a production host at this checkout:

npm upgrade -g @lcv-ideas-software/cross-review --ignore-scripts --allow-git=none --allow-remote=none

For local smoke tests (no-cost):

$env:CROSS_REVIEW_STUB = "1"
npm test

Configuration

Model selection and runtime behaviour can be controlled with environment variables. Example overrides (PowerShell):

[Environment]::SetEnvironmentVariable("CROSS_REVIEW_OPENAI_MODEL", "gpt-6-astra", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_OPENAI_REASONING_EFFORT", "max", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_ANTHROPIC_MODEL", "claude-fable-5-1", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_ANTHROPIC_REASONING_EFFORT", "max", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GEMINI_MODEL", "gemini-3.1-pro-preview", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_MODEL", "deepseek-v4-pro", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_MODEL", "grok-4.7", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_REASONING_EFFORT", "xhigh", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_MODEL", "perplexity/kimi-k3", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_REASONING_EFFORT", "high", "User")

ultra is a Codex product/CLI execution mode, not a literal OpenAI Responses API reasoning.effort. Cross-review nevertheless accepts it in central config, environment variables and per-call overrides as a compatibility alias, then normalizes it inside each provider adapter. For gpt-6-astra, the wire value is the official max; ultra is never sent to the Responses API. Using max directly remains equivalent and makes the API value explicit. The shared legacy value minimal is likewise translated to Astra's lowest active API effort, low — Astra documents low|medium|high|xhigh|max and does NOT list none, so none is raised to low rather than sent and rejected. Explicit older-model overrides use a family-aware compatibility matrix: GPT-5.5/5.4/5.2 map minimal to low and max/ultra to xhigh; GPT-5.1 maps minimal to low and xhigh/max/ultra to high; original GPT-5 maps none to minimal and xhigh/max/ultra to high. Supported native values pass through unchanged.

Claude Fable 5 is the canonical Anthropic pin. Its request deliberately omits the explicit thinking field: Fable applies adaptive thinking automatically, while output_config.effort controls depth. Anthropic documents a 30-day data retention posture and no zero-data-retention option for this model. A response with stop_reason="refusal" is recorded as provider_refusal, and partial refusal output is not accepted as a review.

There is no second supported Claude model. cross-review runs the top model of each provider, so the canonical pin is the whole admissible set. 128,000 output tokens is the model's synchronous API ceiling — the most the provider will accept, not the budget this package ships with. Unconfigured, maxOutputTokensForPeer() falls through max_output_tokens_by_peer to the global CROSS_REVIEW_MAX_OUTPUT_TOKENS, whose default is 20,000. Raising it to the provider ceiling is part of setup, documented with the other per-peer ceilings in docs/api-keys.md; the relator output-ceiling screen measures the configured value, so a draft sized against 128,000 is refused until it is.

For Grok, GROK_API_KEY is canonical. The default pin is grok-4.7; xAI accepts low, medium, high, or xhigh reasoning effort for it, so the adapter normalizes max/ultra to xhigh before sending the request.

For Perplexity, PERPLEXITY_API_KEY is canonical. The default pin is perplexity/kimi-k3 on the Perplexity Agent API (OpenAI-Responses-compatible /v1/responses). Sonar Chat Completions retires on 27/09/2026, so legacy unprefixed Sonar ids are rejected with a migration diagnostic. The reviewer role declares the web_search tool (billed per invocation); the relator role never does. Both of those long roles run in Agent API background mode (background: true, retrieved with GET /v1/agent/{id}) because Perplexity severs a synchronous request at about 300 seconds; a background response has to be retrievable, so those two requests send store: true and Perplexity retains them. The probe stays synchronous and keeps store: false. See docs/architecture.md for the retention consequence.

Central configuration is loaded once when the MCP server process starts. Use server_info.config_load to inspect the loaded path, parse result, loaded and current SHA-256/mtime, and reload_required. live_reload_supported is false: after editing config.json or host environment variables, restart or reload the MCP host/window. A stale or invalid central config blocks paid calls instead of silently spending under fallback defaults.

Evidence judges have independent compact controls: evidence_judge_autowire.max_output_tokens defaults to 2048 and evidence_judge_autowire.reasoning_effort defaults to medium. Unknown in-flight provider cost blocks judge dispatch rather than being treated as zero. Their environment-variable equivalents are CROSS_REVIEW_EVIDENCE_JUDGE_MAX_OUTPUT_TOKENS and CROSS_REVIEW_EVIDENCE_JUDGE_REASONING_EFFORT; as with the other central settings, an explicit host environment value takes precedence over config.json.

Evidence Broker admission is fail-closed and atomic. Its configurable defaults are 8 requests per peer per round, 24 requests per round, 64 durable items and 64,000 total request characters per session:

{
  "evidence_broker": {
    "max_requests_per_peer_round": 8,
    "max_requests_per_round": 24,
    "max_items_per_session": 64,
    "max_chars_per_session": 64000
  }
}

Crossing a limit never truncates, discards or auto-satisfies a blocker. The complete peer response remains durable, the checklist batch is rejected as a unit, automatic judging is skipped and the session stops with evidence_checklist_contract_violation before another paid round. Existing oversized sessions stop before provider dispatch.

Financial and budget controls are required for paid provider calls. Configure these environment variables before running real sessions (example):

[Environment]::SetEnvironmentVariable("CROSS_REVIEW_MAX_SESSION_COST_USD", "20", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PREFLIGHT_MAX_ROUND_COST_USD", "20", "User")
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_UNTIL_STOPPED_MAX_COST_USD", "20", "User")

MCP Tools

  • server_info

  • runtime_capabilities

  • probe_peers

  • session_init

  • session_list

  • session_read

  • ask_peers

  • session_start_round

  • run_until_unanimous

  • session_start_unanimous

  • session_cancel_job

  • session_recover_interrupted

  • session_poll

  • session_events

  • session_metrics

  • session_doctor

  • session_report

  • session_peer_reliability_report

  • session_check_convergence

  • session_preflight_check

  • session_truthfulness_preflight_check

  • session_attach_evidence — optional durable attachment channel; AI callers normally use the automatic evidence field on review starters

  • session_evidence_judge_pass

  • session_evidence_judge_consensus_pass

  • session_judgment_precision_report

  • contest_verdict

  • session_sweep

  • session_finalize

session_events returns at most 200 events by default, excludes peer.token.delta telemetry unless include_token_deltas=true, and returns next_seq plus has_more for bounded pagination. Set limit explicitly up to 1,000 when a larger forensic page is needed.

session_poll uses detail="summary" by default. The compact response keeps operational progress, verdicts, bounded peer summaries and convergence data, but omits complete prior-round peer text, raw and structured payloads. Use detail="full" or session_read only for deliberate forensic inspection. active_round_number names the round executing now, whereas latest_completed_round_number names the newest round already appended to durable history; during a live round these values can differ.

Every tool that accepts response_format="markdown" returns actual Markdown, not a JSON object serialized inside a text block. Strings from callers, peers and persisted sessions are HTML-neutralized before rendering.

session_cancel_job is idempotent around settlement races. A late request for a known completed, failed or cancelled job returns requested=false, reason="job_already_terminal", terminal_job and final_state. When the session itself is already terminal, the reason is session_already_terminal. Compact job status is persisted per session so a sibling MCP host or a restarted runtime can return the same answer without requiring process-local memory.

session_doctor separates real and stub sessions, flags terminal outcomes that lack terminal events, and reports peer-call cost separately from generation artifact cost. Terminal max-rounds and terminal not_resurfaced history stay in totals but are omitted from default operational findings; pass include_terminal_findings=true to enumerate that historical inventory. session_report uses the same cost split and calls out not_resurfaced evidence checklist items as inference-only, not proof that the requested evidence was satisfied. If a session otherwise reaches unanimity with open or not_resurfaced checklist items, finalization records an *_with_unresolved_evidence outcome reason and emits a durable unresolved evidence event. session_peer_reliability_report is read-only and aggregates per-peer parser warnings, evidence ask status, provider failures, cost and latency.

Anti-deception and evidence custody

The runtime does not treat a peer's claim that work was completed as proof. Before paid calls and again during convergence, it checks runtime/model claims, workflow and authorization assertions, test/build/hash claims, concrete source correspondence, unresolved evidence asks, model attestation, and structured status completeness. Authenticated caller evidence supplied inline or through the evidence field is persisted with an integrity digest and transported to every reviewer as CALLER-SUBMITTED / UNVERIFIED, which is the only provenance an attachment can carry. Each external submission atomically supersedes the active caller snapshot while preserving prior manifests for audit, so retries cannot inherit old failures or replay old successes. Every READY vote must cite sources traceable to the reviewed artifact or admitted evidence. When operational claims depend only on peer-submitted material, at least two independent non-author reviewers must use confidence="verified" and cite the attachment path, SHA-256 and correlated raw lines; one voter, inferred confidence or narrative repetition cannot converge. Relator output that invents operational evidence is rejected rather than propagated; a source that quotes an admitted attachment literally — a GitHub URL the provider escaped included — is not treated as invented, and a file whose post-image an admitted unified diff carries is not treated as unattached.

READY is intentionally not free-form. Its summary must be exactly No blocking objections remain., caller_requests and follow_ups must be empty, and no narrative may appear outside the JSON/status envelope. Detail belongs in evidence_sources. This removes synonym/negation ambiguity: any noncanonical READY becomes NEEDS_EVIDENCE and cannot converge.

Each attachment-backed evidence_sources item has one canonical string format:

Attachment: evidence/review.txt
sha256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Artifact quote: "Tests 74 passed (74)"

This block shows the decoded string; a raw JSON response encodes its two line breaks as \n.

The path and full 64-character lowercase digest identify the same persisted attachment, and Artifact quote is a literal from that attachment. The quote must be at least 12 characters and must end the item. Cite the smallest sufficient literal (normally no more than 500 characters); the hard limits are 2,500 characters per whole item and 30 items. Multiple sources belong in separate array items—never join attachments or append rationale after a quote. The wire type deliberately remains string[], so existing string-producing clients remain compatible; the runtime does not require citation objects.

These limits are both anti-verbosity and anti-shortcut controls. A peer must inspect the artifact and cite the decisive raw value, but must not replace a review with a full-file, full-log, or provider-output dump. A bare filename, digest, generic assurance, or empty code fence cannot sustain READY.

session_attach_evidence is an optional durable attachment channel, open to the session's own petitioner. It is never required for an ordinary review: the runtime directs callers to the automatically persisted evidence field, and the attachment carries exactly the same provenance either way. Each new attachment records the verified caller, origin, timestamp, byte count and SHA-256, emits a durable custody event, and is re-hashed on every read. Tampering fails closed. There is no tier above caller-submitted, so no attachment promotes itself: a generic attachment does not by itself prove an unrelated claim.

Terminal closure is different. The runtime alone seals converged; the persisted session petitioner closes its own non-terminal session as aborted through session_finalize; max-rounds is written only by the runtime or the idle sweep; and sessions left open by a dead petitioner are aborted by the boot-time stale sweep after 24 hours. No tool escalates to a human: the MCP surface has no such actor.

An evidence requester may automatically withdraw only its own earlier ask after a strictly grounded READY/verified recheck. That transition is recorded as requester_reverified; silence remains not_resurfaced, and no peer can close another peer's ask or a terminal item.

On an existing session, review starters require the persisted petitioner token. Evidence is attributed to the authenticated invoker rather than inherited from the session owner, so a peer cannot inherit another caller's provenance by continuing its session.

Caller identity uses six distinct local capabilities, one per peer. A seventh existed for an operator identity whose token was meant to live in a separate human console; that host does not exist, because the whole surface is MCP and is exercised by agents, so the capability bound a secret to nobody and is gone. host-tokens.json contains secrets and assumes the local OS account/data directory is trusted. The runtime now removes inherited NTFS ACLs from this file on Windows and grants only the current user, SYSTEM and Administrators; on POSIX it verifies owner-only mode 0600. This blocks direct read access inherited by model-sandbox groups, but it is not isolation from another process running as the same unrestricted OS user.

session_cancel_job, contest_verdict and session_finalize accept only the explicitly persisted session petitioner with its peer token. A legacy session without an explicit petitioner yields no derivable owner and is refused; the idle sweep closes it after 24 hours.

Repository conventions

License

Apache-2.0. See LICENSE, NOTICE, and THIRDPARTY.


Available Tools

28 tools
ask_peersAsk PeersA

Run a real API review round against selected peers. AI evidence supplied in evidence is persisted durably and transported automatically; no separate attachment step is required. Runtime default uses real provider APIs; stubs run only when CROSS_REVIEW_STUB=1. When session_id names an existing session, requires the verified capability token of that session's persisted petitioner; opening a new session does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
draftYes
peersNo
callerYes
evidenceNoRaw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance.
session_idNo
review_focusNoOptional provider-neutral review scope anchor. This is not Claude Code's /focus UI command; it is injected as a front-loaded Review Focus prompt block for every selected peer, including OUT OF SCOPE handling for unrelated findings.
caller_statusNoREADY
response_formatNojson
reasoning_effort_overridesNoOptional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings).

TDQS

A4.1/5.0
Behavior4/5

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

Beyond annotations (which mark non-read-only, non-idempotent, open-world), the description adds evidence durability and automatic transport, provider-API runtime behavior, stub gating, and a capability-token requirement for existing sessions. This is meaningful context not inferable from annotations, though it leaves out cost and blocking behavior.

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

Conciseness5/5

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

Three sentences, each introducing a distinct facet: core action, evidence handling, and runtime/auth conditions. No filler; the most decision-relevant facts are front-loaded.

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

Completeness3/5

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

For a 10-parameter tool with no output schema, the description gives the operational essentials (real vs stub, auth, evidence handling) but omits what the call returns, whether it blocks, and the semantics of required inputs like `task` and `draft`. The rich sibling set partially compensates, but an agent would still be guessing about the outcome and required content.

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?

Only 30% of parameters carry schema descriptions, so the description must compensate. It does clarify `evidence` (durable, SHA-256-addressed, auto-transported) and `session_id` (verified capability token needed), but leaves required `task`, `draft`, and `caller` without additional explanation; the coverage gap is only partially filled.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('Run a real API review round against selected peers'), names the exact input vector ('evidence') and how it is transported, and distinguishes the real-provider path from stubbed mode. This clearly separates it from session-management siblings.

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 states when the real API path is used vs stubs ('stubs run only when CROSS_REVIEW_STUB=1') and explains the session auth condition, plus the implicit alternative to session_attach_evidence in the evidence parameter description ('attaches the same material out of band'). It does not explicitly name competing siblings like session_start_round or when to prefer them.

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

contest_verdictContest VerdictA

v2.14.0 — formally contest a final verdict and open a new deliberation cycle. The reason accepts at most 4,000 characters. Requires the verified capability token of the persisted session petitioner (pass caller explicitly as that peer identity). Petitioner READY → nothing to do: the runtime already sealed converged; petitioner NOT_READY → contest_verdict. Stamps the original session's meta with a contestation record (timestamp + reason + original_outcome + new_session_id) and initializes a NEW session whose contests_session_id points back to the contested session, preserving the chain of custody append-only across sessions. The original session must be in a final state (converged/aborted/max-rounds); contesting an in-flight session throws cannot_contest_in_flight_session. Once contested, a session cannot be contested again (chain-of-custody invariant) — contest the LATEST session in the chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
reasonYes
new_taskYes
new_callerNo
session_idYes
response_formatNojson
new_initial_draftNo

TDQS

A4.1/5.0
Behavior5/5

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

The description richly discloses side effects and invariants beyond the write-only annotation: it stamps a contestation record on the original session, initializes a new session with a back-link, preserves chain of custody, and throws specific errors for in-flight sessions. It also notes the authentication requirement (capability token). This fully covers the behavioral profile even though annotations are minimal.

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 dense and verbose, but it is front-loaded with the core purpose and then provides necessary details. The sentence structure is logical (purpose, constraints, preconditions, side effects, invariants). While it could be trimmed, the complexity of the operation justifies most of the length. Every sentence contributes to understanding the tool.

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 complex tool with no output schema, the description covers preconditions, postconditions, side effects, error conditions, and invariants. It does not describe the return value or what the new session's response looks like, which could be important, but the absence of an output schema makes it acceptable. Overall, it is reasonably complete for an agent to invoke correctly.

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

Parameters2/5

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

Schema coverage is 0%, so the description must explain all parameters. It only mentions `caller` and `reason` (with the 4000-character limit), but leaves `session_id`, `new_task`, `new_caller`, `response_format`, and `new_initial_draft` undocumented. For a 7-parameter tool, this is a significant gap. The description adds some value for two parameters but doesn't compensate for the rest.

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

Purpose5/5

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

The description clearly states the tool's purpose: to contest a final verdict and open a new deliberation cycle. It uses specific verbs and resource nouns ('contest', 'final verdict', 'new deliberation cycle'), and the context clearly differentiates it from sibling tools like session_init or session_finalize. The chain-of-custody detail further clarifies its unique role.

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

Usage Guidelines4/5

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

The description provides explicit conditional guidance: use it when petitioner is NOT_READY, not when READY, and only against a final-state session. It also warns about contesting the latest session and that a session cannot be contested twice. While it doesn't name specific alternative tools, these conditions are sufficient to guide selection. The precondition about the capability token is also clearly stated.

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

probe_peersProbe PeersA
Read-onlyIdempotent

Query official provider APIs to discover available models for the current API keys, select the highest-capability documented model, and verify provider reachability.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
response_formatNojson

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety. The description adds useful behavioral context beyond annotations: it performs outbound calls to provider APIs, relies on current API keys, applies a selection heuristic, and checks reachability.

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

Conciseness5/5

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

The description is a single dense sentence with no filler and a front-loaded verb, making it easy to scan. Every phrase contributes meaning.

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

Completeness3/5

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

For two simple enum parameters, the description adequately conveys the tool's function and side-effect profile. However, there is no output schema and the description does not explicitly state what the tool returns, which is a notable gap given that return values must be inferred from the described actions.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter meaning, but it does not mention either parameter by name. The enum values are self-explanatory, and the phrase 'provider APIs' hints at the caller parameter, but response_format is never addressed.

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

Purpose5/5

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

The description uses specific verbs and a clear resource: it queries official provider APIs, discovers available models for the current API keys, selects the highest-capability documented model, and verifies provider reachability. This clearly distinguishes it from sibling session/peer tools, even without naming them.

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 the use case: when an agent needs to know what models are available/authorized under current API keys and whether providers are reachable. However, it provides no explicit comparison to alternatives like ask_peers and no exclusion criteria.

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

runtime_capabilitiesRuntime CapabilitiesB
Read-onlyIdempotent

Return the stable cross-review runtime capability contract and active tool list.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
response_formatNojson

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds 'stable' which aligns with idempotency, and mentions 'active tool list' giving some context on output. However, it does not elaborate on what the contract contains or any operational nuances, so it only partially supplements the annotations.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the verb and object. There is no filler or redundancy; every word earns its place.

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 only two simple parameters and no output schema, the description provides a basic idea of what is returned (contract and tool list) but lacks detail on the structure or content of the contract. Given that the tool likely serves as a discovery mechanism, more detail on output format would be helpful. However, the annotations cover safety and the tool is low-complexity, so the description is minimally adequate but not complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It does not mention 'caller' or 'response_format' at all. The parameter names and enums are somewhat self-explanatory (caller identifies the runtime, response_format chooses format), but the description offers no additional meaning, leaving the agent to rely solely on naming conventions. This is a notable gap.

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

Purpose5/5

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

The description clearly states the tool returns a 'stable cross-review runtime capability contract and active tool list'. The verb 'return' with the specific resource distinguishes it from session_* and other sibling tools that focus on session operations or server info. This is a specific and unambiguous purpose.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like server_info or probe_peers. The description simply states what it does without explaining context, prerequisites, or exclusions. An agent would have to infer usage from the name alone, which is insufficient given many sibling tools.

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

run_until_unanimousRun Until UnanimousA

Generate or revise a draft and continue real API peer-review rounds until unanimous READY or the configured max_rounds is reached. AI evidence supplied in evidence is persisted durably and transported automatically; no separate attachment step is required. v2.11.0: when caller is set to a peer id (claude|codex|gemini|deepseek|grok|perplexity), the relator lottery activates: omit lead_peer to have the server randomly select a non-caller peer as relator (modeled on judicial panels), or supply an explicit lead_peer that is NOT the caller. An explicit lead_peer === caller is rejected at the server with caller_cannot_be_lead_peer — an agent never reviews itself (workspace HARD GATE).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoship
taskYes
peersNo
callerYes
evidenceNoRaw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance.
lead_peerNo
max_roundsNoHard review-round ceiling unless allow_auto_extension is explicitly true.
max_cost_usdNo
review_focusNoOptional provider-neutral review scope anchor. This is not Claude Code's /focus UI command; it is injected as a front-loaded Review Focus prompt block for every selected peer, including OUT OF SCOPE handling for unrelated findings.
initial_draftNo
until_stoppedNo
response_formatNojson
allow_auto_extensionNoOpt in to at most two evidence-only auto-extensions. False keeps max_rounds rigid.
reasoning_effort_overridesNoOptional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings).

TDQS

A4/5.0
Behavior4/5

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

Annotations only flag readOnly=false, idempotent=false, and openWorld=true. The description adds valuable behavioral context: evidence is 'persisted durably and transported automatically,' review rounds hit 'real API' peers, and an explicit lead_peer === caller is rejected server-side via 'caller_cannot_be_lead_peer' as a 'workspace HARD GATE.' This goes beyond the annotations, though it does not cover side effects like session creation or response behavior.

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 dense but not bloated. The core purpose is front-loaded in the first sentence, followed by evidence-transport behavior and the relator-lottery rules. The 'judicial panels' metaphor is mild color but supports understanding. The version marker and hard-gate detail are useful, though the description is longer than strictly necessary for the tool's most common invocation.

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, open-world, mutating tool with 14 parameters and no output schema. The description explains the main loop, evidence flow, and relator constraint, but it does not describe return values, output format, session-related side effects, cost behavior, or how to set up peers and initial drafts. An agent could call it correctly with task and caller, but many behavioral expectations remain underspecified.

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

Parameters3/5

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

Schema description coverage is only 36%, so the description must compensate. It does add meaningful semantics for key parameters: evidence (durable, SHA-256-addressed, no attachment needed), caller and lead_peer (relator lottery, non-caller constraint, server rejection), and max_rounds (termination ceiling). However, most other parameters — mode, peers, initial_draft, response_format, until_stopped, and reasoning_effort_overrides — are left to the schema or omitted entirely, leaving a partial compensation gap.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Generate or revise a draft and continue real API peer-review rounds until unanimous READY or the configured max_rounds is reached.' This clearly states the tool's core behavior and terminal condition, making it distinguishable from sibling session-control tools like session_start_round or session_poll.

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

Usage Guidelines4/5

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

The description provides clear operational guidance: evidence is automatically persisted and transported, so 'no separate attachment step is required' — a direct hint about when not to use the sibling session_attach_evidence. It also explains how to use the relator lottery via caller and lead_peer, including the rejection rule. It stops short of explicitly naming when to prefer run_until_unanimous over session_start_unanimous or ask_peers, so no exclusions are given.

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

server_infoServer InfoB
Read-onlyIdempotent

Return runtime information for the API-only Cross Review MCP server, including version, data directory and active security mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
response_formatNojson

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful context about the server being API-only and the specific runtime fields returned, but it does not disclose additional behavioral traits such as response behavior or potential errors. It is consistent with the annotations, so no contradiction exists.

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

Conciseness5/5

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

The description is a single, compact sentence that front-loads the core action and then lists the specific data returned. There is no filler or redundant phrasing, and every part of the sentence adds meaningful information.

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 read-only informational tool with strong annotations and a self-explanatory schema, the description covers the essential purpose and output contents. It is slightly incomplete in that it does not clarify how response_format changes the response, but no output schema exists and the description names the key fields, which is sufficient for basic invocation.

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

Parameters2/5

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

The description provides no information about the 'caller' or 'response_format' parameters, and schema description coverage is 0%. The input schema's enums and default value are self-documenting, which mitigates the gap, but the description itself makes no attempt to compensate for the low coverage.

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 states a specific verb ('Return runtime information') and resource ('API-only Cross Review MCP server'), and enumerates the returned items: version, data directory, and active security mode. It is clear on its own, but it does not explicitly distinguish itself from sibling tools like runtime_capabilities, which could plausibly overlap.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as runtime_capabilities or session_*. The description implies a general informational purpose but does not state use cases, exclusions, or conditions under which a sibling tool would be more appropriate.

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

session_attach_evidenceAttach Session Evidence (Optional)A

Attach one durable evidence artifact to an existing session, out of band from a review round. Only the session's own petitioner may call it, and the artifact carries the same caller_submitted_unverified provenance as material passed through the evidence field of a review starter — this tool promotes nothing. Prefer the evidence field for the routine path; this one exists for material that does not belong to a specific round. Requires the verified capability token of the persisted session petitioner; a peer cannot attach evidence to someone else's session.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes
callerYes
contentYes
extensionNotxt
session_idYes
content_typeNotext/plain
response_formatNojson

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only indicate a non-read-only mutation, so the description carries the burden of behavior. It adds valuable context: the artifact is durable, carries `caller_submitted_unverified` provenance, promotes nothing, and requires the petitioner's verified capability token. No contradiction with annotations, though it stops short of describing removal or overwrite behavior.

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 deliver the core action, scope, provenance, and usage guidance without obvious padding. It is dense but well front-loaded, though the long middle sentence about provenance could be slightly streamlined.

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

Completeness3/5

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

With 7 parameters and no output schema, this description covers the why, when, and who well, but leaves parameter semantics and return behavior unaddressed. An agent can understand the tool's role, but may still struggle to craft a fully correct call without additional schema descriptions.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description never explains session_id, label, content, extension, content_type, or response_format. It only gestures at 'artifact' and provenance, leaving the agent to infer parameter meaning from names alone. The enums and defaults in the schema help, but the description does not compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource: attach one durable evidence artifact to an existing session, out of band from a review round. It explicitly contrasts itself with the routine `evidence` field and clarifies that this tool 'promotes nothing', distinguishing it from review-round evidence tooling.

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

Usage Guidelines5/5

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

Explicitly instructs when to use it: for material that does not belong to a specific round, and to prefer the `evidence` field for the routine path. It also states the auth constraint that only the session's own petitioner may call it, so an agent knows when not to attempt it.

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

session_cancel_jobCancel Session JobA
Idempotent

Request cancellation for running background jobs in a durable session. The reason accepts at most 300 characters. Requires the verified capability token of the persisted session petitioner; another peer cannot cancel the job. Provider calls receive AbortSignal where the provider client supports it.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
job_idNo
reasonNorequester_requested
session_idYes
response_formatNojson

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-destructive, and idempotent behavior. The description adds meaningful behavioral detail: cancellation is a request, the reason is capped at 300 characters, only the original petitioner can cancel, and providers receive an AbortSignal when supported. No contradiction with the annotations.

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

Conciseness5/5

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

Three concise sentences with no filler: the first states the purpose, the second covers constraints and authorization, and the third describes provider-side behavior. The structure is front-loaded and each sentence earns its place.

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

Completeness2/5

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

With no output schema and zero parameter descriptions, the tool lacks critical context such as what a successful cancellation returns, how the optional job_id affects scope, and what errors may occur. The auth and AbortSignal details are useful, but an agent still cannot fully predict the outcome of an invocation.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must carry the parameter-documentation burden, but it only restates the reason max length that is already in the schema. It does not explain session_id, job_id, caller, or response_format, and leaves the optional job_id behavior ambiguous. This provides almost no added meaning beyond the raw schema.

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

Purpose5/5

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

The description uses a specific verb ('cancel') and a specific resource ('running background jobs in a durable session'), making the tool's purpose immediately clear and distinguishable from siblings like session_poll or session_sweep. The phrase 'Request cancellation' is slightly indirect, but the intent is unambiguous.

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

Usage Guidelines4/5

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

The description gives clear usage context: it targets running background jobs in a durable session and explicitly states that another peer cannot cancel the job, which acts as a when-not for non-petitioners. It does not name an alternative tool, but the condition is strong enough for the common case.

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

session_check_convergenceCheck ConvergenceA
Read-onlyIdempotent

Return the latest durable convergence state, health and scope for a saved session without calling providers.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
response_formatNojson

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, and the description adds behavioral context about not calling providers, which aligns with and supplements the annotations without contradiction.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the key information (return value and behavior) with no unnecessary words.

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

Completeness2/5

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

Despite having only two parameters and no output schema, the description lacks parameter details, expected return format, and error states, and does not address how this tool fits among many sibling session tools.

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

Parameters1/5

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

Schema description coverage is 0% and the tool description provides no information about the parameters (session_id pattern or response_format enum), leaving the agent with only the schema names and types.

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

Purpose5/5

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

The description clearly states the tool returns 'the latest durable convergence state, health and scope for a saved session' and specifies it does so 'without calling providers,' distinguishing it from sibling tools like session_read that likely involve provider calls.

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 a lightweight check ('without calling providers') but does not explicitly state when to use this tool versus alternatives like session_read or probe_peers, nor does it provide exclusions or prerequisites.

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

session_doctorSession DoctorA
Idempotent

Operational audit across durable sessions: open/stale/blocked cases, legacy self-lead metadata, open evidence asks (with per-peer item type drill-down + chronic blockers since v2.22), Grok provider errors, and token-event noise. Read-only by default (does not modify sessions). Terminal max-rounds and terminal not_resurfaced history stay in totals but are not default operational findings; pass include_terminal_findings=true to enumerate that historical inventory. Pass include_legacy=true to enumerate per-session self_lead_metadata entries (hidden by default since v2.22 because pre-v2.16 sessions carry the legacy artifact at ~38% rate; totals.self_lead_metadata count is always visible). v3.6.0: pass repair=true (opt-in) to recompute convergence_health for sessions stuck in the contradictory outcome="converged"+health="blocked" state left by pre-v3.2.0 corruption — only that specific contradiction is touched, only when explicitly requested; the repaired array lists what was fixed. The read-only pass needs no token; repair requires your own verified capability token and touches only the sessions you own.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
callerYes
repairNo
include_legacyNo
response_formatNojson
include_terminal_findingsNo

TDQS

A4.5/5.0
Behavior5/5

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

It discloses default read-only behavior, the opt-in write path, a token requirement for repair, scope to the caller's own sessions, and a precise constraint on what repair changes. This adds substantial context beyond the annotations, which only signal idempotent/non-destructive and not-readonly.

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 text is a single dense paragraph and somewhat long, but every clause adds operational detail and the main purpose is front-loaded. It could benefit from bullets, but nothing is 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?

For a complex tool with no output schema, it covers the key behaviors, scope, security, version caveats, and flag-driven variants, and even names response elements like totals.self_lead_metadata and the repaired array. It does not sketch the full response shape, but the essentials for correct invocation are present.

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?

With 0% schema description coverage, the description carries the burden and does explain the meaningful flags: include_terminal_findings, include_legacy, and repair. It does not explain limit, caller, or response_format, though their schema types/enum values are largely self-explanatory.

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

Purpose5/5

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

The description opens with a specific verb ('audit') and a precise resource ('durable sessions'), then enumerates the distinct categories it covers (open/stale/blocked cases, legacy metadata, evidence asks, Grok errors, token-event noise). This semantically separates it from sibling list/read/metrics tools even without naming them.

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 clear context for when to invoke the tool and how to adjust scope via include_terminal_findings, include_legacy, and repair. It does not explicitly name sibling alternatives or state when not to use this tool, so it stops short of full exclusion guidance.

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

session_eventsRead Session EventsA
Read-onlyIdempotent

Read a bounded page of durable session events. Token-delta telemetry is excluded by default; opt in only for streaming forensics. Continue with next_seq while has_more is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
since_seqNo
session_idYes
response_formatNojson
include_token_deltasNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds valuable context: that events are 'durable' (persisted), pagination is via 'next_seq' and 'has_more', and token-delta telemetry is excluded by default. This goes beyond annotations without contradicting them, providing practical behavioral expectations for the agent.

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

Conciseness5/5

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

The description is comprised of three concise sentences, each adding distinct value: the first defines the operation, the second clarifies a special parameter, and the third provides pagination guidance. It is front-loaded with the core purpose and has zero fluff. This is exemplary conciseness with high information density.

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

Completeness4/5

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

Given the tool's moderate complexity (5 parameters, pagination) and no output schema, the description covers the essential points: what events are read, the main optional parameter, and how to paginate. It does not explain the output format or the meaning of response_format, but the schema's enum and default handle that. The description is almost complete for effective usage, with only minor gaps in return value documentation.

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 0%, so the description must compensate for the undocumented parameters. The description mentions 'bounded page' (implying limit), 'next_seq' (since_seq parameter), and 'token-delta telemetry' (include_token_deltas). It also states the default exclusion of token deltas, which aligns with the default false. However, it does not describe response_format or the meaning of since_seq beyond pagination, but given the schema has defaults and clear types, this is a solid compensation.

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

Purpose5/5

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

The description clearly states 'Read a bounded page of durable session events' which specifies the verb (Read), resource (session events), and key characteristic (bounded, durable). It distinguishes itself from siblings like session_list (list sessions) and session_metrics (aggregate metrics) by focusing on raw event logs. The mention of token-delta telemetry exclusion further clarifies its scope.

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

Usage Guidelines4/5

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

The description provides strong context: 'Continue with next_seq while has_more is true' gives explicit pagination guidance, and 'Token-delta telemetry is excluded by default; opt in only for streaming forensics' tells when to use the include_token_deltas parameter. However, it does not explicitly mention alternative tools for other event-related operations (e.g., session_metrics for aggregated data), which would strengthen the usage guidance.

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

session_evidence_judge_consensus_passRun Evidence Judge Consensus PassA

Multi-peer evidence judgment. Requires at least two distinct enabled judge peers. A peer is forbidden from ruling on its own evidence ask; any self-judge member makes that item's consensus fail closed. Active mode promotes only unanimous verified-satisfied judgments with non-empty rationales and zero parser warnings; shadow mode never mutates state. Requires the verified capability token of the persisted session petitioner, because the pass spends that petitioner's budget on paid provider calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftYes
roundNo
callerYes
item_idsNo
session_idYes
judge_peersYes
shadow_modeNo
review_focusNo
response_formatNojson

TDQS

A3.8/5.0
Behavior5/5

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

Despite annotations already setting readOnlyHint=false, the description adds substantial non-obvious behavior: self-judge causes fail-closed consensus, promotion requires unanimous verified-satisfied judgments with non-empty rationales and zero parser warnings, shadow mode never mutates state (implying active mode does), and the pass spends the petitioner's budget on paid provider calls. No contradiction with the annotations; this is exactly the kind of context annotations can't express.

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?

Four dense sentences, front-loaded with the core purpose and requirements; every sentence earns its place. The opening 'Multi-peer evidence judgment' is a fragment rather than a true verb-phrase, and 'multi-peer' slightly overlaps with 'at least two distinct enabled judge peers,' but overall it is tight and well-ordered.

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

Completeness3/5

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

For a 9-parameter, mutating, budget-spending tool with no output schema, the description covers the critical constraints well (peer minimums, fail-closed self-judge rule, promotion criteria, mode semantics, billing). Gaps remain: what 'draft' and 'item_ids' refer to, what review_focus does, how the output is returned, and how the verified capability token is supplied given it is not a parameter.

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

Parameters2/5

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

With schema description coverage at 0%, the description carries the full burden—yet it only partially clarifies judge_peers (requires at least two distinct) and shadow_mode (non-mutating). The remaining seven parameters—draft, round, caller, item_ids, session_id, review_focus, response_format—receive no semantic guidance, and the 'verified capability token' mentioned has no corresponding parameter at all.

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 opening phrase 'Multi-peer evidence judgment' plus the title 'Run Evidence Judge Consensus Pass' conveys a specific action—running a consensus pass over evidence across multiple judge peers—and the active-mode sentence clarifies that unanimous satisfied judgments get promoted. However, it never names or contrasts its nearest sibling 'session_evidence_judge_pass', so an agent must infer the differentiation rather than having it stated.

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

Usage Guidelines4/5

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

The description gives clear operational context: it requires at least two distinct enabled judge peers, a verified capability token of the session petitioner, and it explains when to use active vs shadow mode. It stops short of naming alternatives like run_until_unanimous or session_evidence_judge_pass, so there are no explicit exclusions—just clear context.

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

session_evidence_judge_passRun Evidence Judge PassA

LLM satisfied-detection for the Evidence Broker. The configured judge peer reads each currently-open checklist item against the supplied draft and returns a structured judgment; a peer can never judge its own evidence ask. The runtime promotes only items where satisfied=true AND confidence='verified'; everything else stays open. Terminal statuses and already-addressed items are never touched. Optional shadow_mode records non-mutating decisions. Requires the verified capability token of the persisted session petitioner, because the pass spends that petitioner's budget on paid provider calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftYes
roundNo
callerYes
item_idsNo
judge_peerYes
session_idYes
shadow_modeNo
review_focusNo
response_formatNojson

TDQS

A3.6/5.0
Behavior5/5

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

Annotations provide only hints, so the description carries the full burden. It discloses that the tool mutates state (promotes items), explains the promotion rule (satisfied=true AND confidence='verified'), states that terminal/already-addressed items are untouched, notes the self-judging prohibition, mentions shadow_mode for non-mutating runs, and requires a verified capability token because it spends the petitioner's budget. This is comprehensive and adds significant value beyond the annotations.

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 dense but efficient, with no filler. It front-loads the purpose and then covers key behaviors and constraints. The length is justified by the complexity of the operation, though a slightly tighter organization could improve readability.

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

Completeness3/5

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

For a complex tool with 9 parameters, no output schema, and mutating behavior, the description covers the most critical aspects: promotion logic, auth requirements, and non-mutating mode. However, it lacks details on the return format (only 'structured judgment') and does not explain several parameters or the relationship to the consensus variant, leaving some gaps for the agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explicitly references 'draft', 'judge_peer', and 'shadow_mode', but it does not explain other parameters like item_ids, round, review_focus, response_format, or caller. Many parameters remain undocumented in both schema and description, leaving the agent to infer their meaning.

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 states a specific action: running a judge pass for evidence checklist items against a draft. It explains the promotion criteria and scope. However, it does not explicitly contrast with the sibling tool session_evidence_judge_consensus_pass, so it lacks direct sibling differentiation.

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

Usage Guidelines3/5

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

The description implies when to use it (for judging evidence items against a draft) and mentions shadow_mode for non-mutating runs, but it does not explicitly state when to prefer this over the consensus pass variant or other session tools. No exclusions are given.

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

session_finalizeFinalize SessionA
Idempotent

Close a non-terminal durable session as aborted with an optional reason of at most 200 characters. Requires the verified capability token of the persisted session petitioner: the peer host must pass caller explicitly as its own identity, and a caller that contradicts that host's own token or clientInfo is refused as identity forgery. converged is sealed only by the runtime, when the petitioner and every required peer are READY and every evidence gate passes; max-rounds is written only by the runtime or the idle sweep.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
reasonNo
outcomeYes
session_idYes
response_formatNojson

TDQS

A3.9/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing the identity forgery check, requiring the caller to match the peer host's token/clientInfo, and stating that the 'converged' outcome is only sealed by the runtime. It also notes the max characters for reason and that 'max-rounds' is only written by runtime/sweep. These are significant behavioral traits not present in the annotations (which only provide idempotentHint/destructiveHint). There is no contradiction with annotations.

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

Conciseness4/5

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

The description is dense but appropriately sized for the complexity, covering the core purpose first, then auth requirements, then runtime constraints. The sentences are structured logically, front-loading the primary action. It could be slightly more concise by cutting the last clause about 'max-rounds-sweep', which is tangential, but it's acceptable.

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

Completeness4/5

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

Given the tool's complexity (auth checks, runtime-only outcomes, limited outcomes), the description covers the essential use case and constraints. It lacks explicit mention of return values (no output schema, so description could mention what is returned, e.g., confirmation or error details), and it doesn't explain what happens if the session is already terminal. However, most critical decision-making info is present.

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 0%, so the description must explain parameters, and it does partially. It explains 'reason' (optional, max 200 chars) and 'caller' (must be host's own identity, forgery check), but does not explain 'session_id' format (though schema has pattern) or 'response_format' (schema has default). It doesn't add much beyond the schema for session_id, but for caller it adds crucial semantics. With 0% coverage, description should carry more, but it covers the most important behavioral parameter.

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

Purpose4/5

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

The description clearly states that the tool closes a non-terminal durable session as 'aborted' with an optional reason, which is a specific action on a specific resource. It does not explicitly differentiate from siblings, but the outcome enum (only 'aborted') and the mention of 'non-terminal' make its purpose distinct, though not explicitly naming 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?

The description provides some context on when to use it: it's for aborted sessions, and it explains that 'converged' is only sealed by the runtime, not by this tool. However, it doesn't explicitly say 'use this instead of session_cancel_job' or similar, and doesn't mention when-not-to-use it (e.g., if the session is already terminal). The guidance is implied through the outcome constraint but not explicit.

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

session_initInitialize SessionA

Create a durable cross-review session after probing provider availability and model selection. This does not call reviewer models yet. AI callers should submit raw proof through the evidence field of the subsequent review starter; the runtime will persist it automatically without session_attach_evidence or human intervention.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesOriginal task or artifact being reviewed.
callerYes
review_focusNoOptional provider-neutral review scope anchor. This is not Claude Code's /focus UI command; it is injected as a front-loaded Review Focus prompt block for every selected peer, including OUT OF SCOPE handling for unrelated findings.
response_formatNojson

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only provide flags (readOnlyHint false, openWorldHint true, idempotentHint false, destructiveHint false), so the description carries the burden of behavioral disclosure. It adds meaningful context: the session is durable, the tool does not invoke reviewer models, and the runtime persists evidence automatically. This goes beyond the annotations, though it does not cover duplicate-call behavior or return details.

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 compact and front-loaded with the core purpose in the first sentence. The remaining two sentences add behavioral and workflow context without excessive fluff. The third sentence is slightly tangential to the tool itself but still earns its place by preventing misuse of session_attach_evidence.

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

Completeness2/5

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

There is no output schema, and the description does not state what the tool returns (e.g., a session ID needed by session_read, session_poll, or session_start_round). It also leaves the relationship to 'probing provider availability and model selection' ambiguous. For an initialization tool that subsequent siblings depend on, this is a significant completeness gap.

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

Parameters3/5

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

Schema description coverage is 50%; task and review_focus have descriptions, while caller and response_format are only represented by enums/defaults. The description does not elaborate on any current parameters, only mentions the evidence field of a subsequent step. The parameters are reasonably inferable from the schema, so this is adequate but not enhanced by the description.

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 states a specific verb and resource: 'Create a durable cross-review session'. It adds useful scope by noting it does not call reviewer models yet, which distinguishes it from round-starting siblings like session_start_round. However, it does not explicitly name sibling alternatives, so it falls short of full differentiation.

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?

There is implied sequencing: 'after probing provider availability and model selection' and a workflow note about submitting evidence without session_attach_evidence. But the description never explicitly says when to choose this tool over session_preflight_check, session_start_round, or session_start_unanimous. Usage context is present but not explicit.

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

session_judgment_precision_reportJudgment Precision ReportA
Read-onlyIdempotent

v2.14.0 — compute precision/recall/F1 of the shadow judge against the empirical ground truth (whether peers raised the same ask in a subsequent round). Walks session.evidence_judge_pass.shadow_decision events across all sessions (or a single session via session_id, or filtered by judge peer / since timestamp), correlates each decision with the subsequent evidence_checklist resurfacing behavior, and returns per-peer TP/FP/TN/FN counts plus precision/recall/F1. Decisions whose item.last_round equals the judge round AND no later round exists are excluded as 'no ground truth' (we cannot tell if the ask would have come back). Operator uses this to decide whether to flip a peer from shadow to active mode (item 2 / v2.13).

ParametersJSON Schema
NameRequiredDescriptionDefault
peerNo
sinceNo
session_idNo
response_formatNojson

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the provided annotations (readOnlyHint, idempotentHint, destructiveHint) by disclosing a genuinely subtle behavioral trait: decisions whose item.last_round equals the judge round AND no later round exists are excluded as 'no ground truth,' with an explanation of why ('we cannot tell if the ask would have come back'). This is exactly the kind of non-obvious scoping an agent needs to interpret results. Also adds version context and result shape. No contradiction with annotations.

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

Conciseness5/5

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

Substantial but every sentence earns its place: version marker, function, inputs, algorithm, output, exclusion rule, and consumer decision. The most important behavioral detail (the no-ground-truth exclusion) is front-staged where it can't be missed, and the dangling operational references ('v2.14.0', 'item 2 / v2.13') add provenance without bloat.

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 complex analytical tool doing multi-session aggregation with a non-trivial ground-truth determination rule, this description is remarkably self-sufficient: it covers inputs, mechanism, output contract, edge-case exclusion, and the downstream decision it serves. The only marginal gap is the lack of a defined return schema, but no output schema exists and the prose already enumerates the return shape (per-peer TP/FP/TN/FN plus precision/recall/F1).

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?

With 0% schema description coverage, the description carries full weight, and it largely delivers: it adds meaning to three of the four parameters by embedding them in the algorithm ('via session_id, or filtered by judge peer / since timestamp'), clarifying that 'peer' means the judging peer and 'since' is a timestamp filter. response_format is left undiscussed, though its name and default make it self-explanatory. Strong compensation for the schema's silence, though not exhaustive.

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?

Opens with a specific verb+resource: 'compute precision/recall/F1 of the shadow judge against the empirical ground truth,' then details the exact event stream, correlation mechanism, and output shape. The extreme specificity of the resource ('session.evidence_judge_pass.shadow_decision' events vs. 'evidence_checklist resurfacing behavior') makes confusion with siblings like session_metrics or session_peer_reliability_report implausible, even without naming them explicitly.

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

Usage Guidelines4/5

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

Provides a concrete 'when to use' statement: 'Operator uses this to decide whether to flip a peer from shadow to active mode (item 2 / v2.13),' which ties the tool to a real decision gate. However, it never names the overlapping alternatives (session_peer_reliability_report, session_metrics, session_doctor) nor states when NOT to use it, leaving the exclusion side implicit.

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

session_listList SessionsA
Read-onlyIdempotent

List durable sessions saved under the local data directory. The default response is paginated and summary-only to keep stdio transports bounded; use session_read for one full session or detail='full' for a bounded page of full metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
detailNosummary
offsetNo
outcome_filterNoall
response_formatNojson

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, freeing the description from safety disclaimers. The description adds valuable behavioral context by explaining WHY the default is summary ('to keep stdio transports bounded') and that detail='full' returns a 'bounded page of full metadata.' This reveals the tool's internal rate-limiting rationale, which is genuinely useful behavior not evident from annotations alone.

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

Conciseness5/5

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

Two sentences, zero fluff. The first sentence states the core purpose, the second explains behavior, rationale, and points to the alternative. Every clause contributes to the user's decision-making: what, why, and when-not. The most important information is front-loaded immediately.

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

Completeness4/5

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

Given the tool has 5 parameters and no output schema, the description adequately covers the main usage decision (how to get full vs summary, and where to go for a single session). It could mention `outcome_filter` since that's a domain-specific filter, but the defaults and self-explanatory names reduce the ambiguity. The presence of annotations for read-only/idempotence fills the safety gap. Minor omissions prevent a 5, but the description is complete enough for an agent to use the tool correctly in most intended scenarios.

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

Parameters3/5

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

The schema description coverage is 0%, so the description carries the burden of explaining parameters. It does explain the `detail` parameter's effect (summary vs full) and implies pagination via 'paginated,' which covers `limit` and `offset` conceptually. However, it leaves `outcome_filter` and `response_format` unexplained, and doesn't explicitly map the pagination wording to the parameter names. The description adds meaning for the most crucial parameters but still leaves the agent to infer the rest from names alone.

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

Purpose5/5

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

The description opens with a clear verb-resource-scope triplet: 'List durable sessions saved under the local data directory.' This precisely distinguishes it from siblings like session_metrics or session_read, and the contrast with session_read is explicitly stated. The purpose is immediately understandable and differentiates from other session_* tools.

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

Usage Guidelines5/5

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

The description explicitly routes the agent: 'use session_read for one full session or detail='full' for a bounded page of full metadata.' This names the alternative tool (session_read) and provides the selection condition, leaving no ambiguity about when to choose this tool versus the alternative.

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

session_metricsSession MetricsA
Read-onlyIdempotent

Return aggregate observability metrics across all sessions, or only one session when session_id is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNo
response_formatNojson

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that the tool returns metrics for all or one session, but does not disclose further behavioral traits (e.g., data freshness, pagination, or performance). With annotations covering safety, the description provides some context.

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?

A single sentence that efficiently conveys the purpose and optional scoping. No wasted words.

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

Completeness3/5

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

For a tool with 2 parameters and no output schema, the description is brief. It does not explain the structure of the returned metrics or any usage constraints. While adequate for a simple read-only tool, more detail would improve completeness.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must add meaning. It does: explains that session_id is optional and scopes results to one session. However, it does not describe what 'aggregate observability metrics' includes or the meaning of response_format beyond the enum.

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

Purpose5/5

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

The description clearly states the verb 'Return' and the resource 'aggregate observability metrics', and specifies scope (all sessions or one with session_id). This distinguishes it from sibling tools which focus on session actions like cancel, attach evidence, etc.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description does not mention prerequisites, exclusions, or when not to use it.

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

session_peer_reliability_reportPeer Reliability ReportA
Read-onlyIdempotent

Read-only per-peer reliability telemetry: READY/NEEDS_EVIDENCE/NOT_READY counts, parser warnings, provider errors, unresolved evidence asks, fabrication events, latency and cost. Observational only; does not change peer selection or mutate sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNo
response_formatNojson

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it is 'Observational only' and enumerates the telemetry fields, providing useful context beyond annotations.

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

Conciseness4/5

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

The description is three sentences, front-loaded with the purpose, and lists data fields efficiently. Minor redundancy could be removed, but overall well-structured.

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 read-only tool with two optional parameters and good annotations, the description provides sufficient behavioral context. It explains what data is returned, though it lacks output format details.

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

Parameters1/5

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

Schema description coverage is 0%. The description does not explain the two input parameters (session_id and response_format) at all, leaving the agent without guidance on how to invoke the tool.

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 specifies 'Read-only per-peer reliability telemetry' and lists the exact data fields, clearly defining the tool's function. It distinguishes from siblings as no other tool in the list explicitly provides similar reliability metrics.

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?

States 'Observational only; does not change peer selection or mutate sessions,' giving clear context on when to use. However, it does not mention when not to use this tool compared to alternatives like session_report.

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

session_pollPoll SessionA
Read-onlyIdempotent

Return durable session state and background job status without waiting for provider calls to finish. Default detail=summary keeps prior-round peer text/raw payloads out of polling responses; use detail=full or session_read only when full forensic data is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary
session_idYes
response_formatNojson

TDQS

A4.7/5.0
Behavior5/5

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

Discloses non-blocking behavior, default detail filtering, and persistence of state beyond annotations; no contradiction with readOnly, idempotent, destructive hints.

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

Conciseness5/5

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

Two sentences efficiently covering purpose, behavior, and parameter guidance with no redundant content.

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

Completeness5/5

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

Given annotations, schema, and sibling tools, the description provides sufficient context for an agent to correctly invoke the tool in a polling workflow.

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

Parameters3/5

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

Schema coverage is 0%, but description adds meaning for 'detail' parameter; however, does not explain 'response_format' parameter, leaving some semantic gap.

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

Purpose5/5

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

The description clearly states the tool returns 'durable session state and background job status' and distinguishes from blocking operations and sibling session_read by mentioning polling behavior and when to use alternative.

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

Usage Guidelines5/5

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

Explicitly states when to use default detail=summary vs detail=full and recommends session_read for full forensic data, providing clear context for tool selection.

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

session_preflight_checkCheck Submission PreflightsA
Read-onlyIdempotent

Run the same enabled evidence and truthfulness gates used by a real review round, without calling providers. Peer-submitted inline/structured evidence is checked as review material and requires no separate attachment step.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
draftNo
callerYes
evidenceNo
session_idYes
response_formatNojson

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond annotations: providers are not called, and inline/structured evidence is treated as review material without an attachment step. No contradiction with the annotations exists.

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

Conciseness5/5

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

The description is two concise sentences with the central behavior front-loaded: 'Run the same enabled evidence and truthfulness gates used by a real review round, without calling providers.' Every clause earns its place, and there is no filler or repetition of schema/annotation details.

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

Completeness3/5

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

For a six-parameter tool with no output schema and no parameter descriptions, the description does not specify what the preflight result contains or how task/draft/evidence relate to the gates. However, the concise behavioral statement plus annotations make it minimally viable for an agent to choose and invoke the tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only hints at evidence as 'inline/structured' and gives no semantics for task, draft, caller, session_id, or response_format. This leaves most parameters underspecified for an agent trying to construct a correct call.

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 states a concrete action: 'Run the same enabled evidence and truthfulness gates used by a real review round, without calling providers.' It clearly identifies the resource as submission preflights and distinguishes itself from a real review round. However, it does not explicitly differentiate from the sibling 'session_truthfulness_preflight_check', so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

The description implies use before a real review round to validate gates without provider calls, and it explicitly notes that peer-submitted inline/structured evidence requires no separate attachment step, steering agents away from session_attach_evidence. It lacks explicit when-not-to-use guidance or named alternatives, but the context is clear enough for an agent to select it appropriately.

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

session_readRead SessionA
Read-onlyIdempotent

Read a durable session meta.json by session_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
response_formatNojson

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds the 'durable' aspect, suggesting persistent storage, but does not disclose error behavior, auth requirements, or rate limits. Given annotations cover the main behavioral aspects, a 3 is appropriate.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. It efficiently communicates the core action and resource, earning its place with minimal verbosity.

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 read operation with annotations covering safety and a self-explanatory schema, the description is nearly complete. It lacks explicit mention of return structure, but the response_format parameter implies output formatting. The absence of an output schema means the description could state that the response contains the meta.json content, but this is minor given the tool's simplicity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameter meaning, but it does not mention either parameter. The schema itself provides clear semantics via the UUID pattern for session_id and enum for response_format, but the description adds no value for parameter understanding.

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 ('Read') and resource ('durable session meta.json') keyed by session_id. This is distinct from sibling tools like session_list (for listing) or session_events (for event data), and the term 'meta.json' clarifies the exact artifact being read.

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 when you need the raw meta.json content of a durable session, but it does not explicitly contrast with alternatives or state when not to use it. With many session-related siblings, explicit routing would be helpful, but the specificity provides some implied guidance.

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

session_recover_interruptedRecover Interrupted SessionsA
Idempotent

Mark unfinished sessions with stale in-flight rounds as recovered after a MCP host restart so they can be resumed explicitly. Requires your own verified capability token, and recovers only the sessions you own.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
response_formatNojson

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare idempotent=true and destructive=false, and the description does not contradict them. It adds useful behavioral context: only stale in-flight rounds are affected, only the caller's own sessions are recovered, and a verified capability token is required.

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 focused sentences: the first front-loads the core action and context, the second adds necessary constraints. No filler or redundancy.

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

Completeness3/5

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

The description covers what, when, and preconditions, which is largely sufficient for a simple two-parameter tool. However, it does not define what qualifies as 'stale,' explain the return/output behavior, or clarify how response_format affects the result, and there is no output schema to fill that gap.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not mention the caller or response_format parameters at all. The enum values are somewhat self-explanatory, but the description adds no guidance on how these parameters affect recovery or the output.

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 action with a concrete resource: marking unfinished sessions with stale in-flight rounds as recovered after an MCP host restart. This clearly distinguishes the tool from sibling list/read/poll/finalize tools.

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

Usage Guidelines4/5

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

It gives clear context for when to use the tool (after a host restart, before explicit resumption) and adds restrictive conditions (owned sessions only, verified capability token required). It does not name alternative tools or explicitly state when not to use it, but the context is sufficient.

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

session_reportSession ReportC
Read-onlyIdempotent

Generate and save a Markdown report with convergence, peer decisions, failures, costs and latest events.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
response_formatNojson

TDQS

C2.4/5.0
Behavior1/5

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

The description says 'save a Markdown report,' implying a write operation, but annotations set readOnlyHint=true, indicating it should not modify state. This is a direct contradiction.

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 a single sentence, concise and front-loaded with the main purpose. However, it sacrifices clarity for brevity, leading to ambiguity.

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

Completeness2/5

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

With no output schema and two parameters, the description is incomplete. It does not describe the return value or parameter details, and the contradiction with annotations undermines completeness.

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

Parameters1/5

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

The description does not explain any of the two parameters (session_id, response_format). Schema description coverage is 0%, so the description should compensate but fails to do so. Additionally, the description mentions Markdown but response_format defaults to json, causing further confusion.

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

Purpose4/5

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

The description clearly states it generates and saves a Markdown report listing specific contents (convergence, peer decisions, etc.), which provides a clear verb and resource. However, it does not distinguish from sibling tools like session_events or session_check_convergence, which might overlap.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. No context about prerequisites or typical use cases is provided.

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

session_start_roundStart Review RoundA

Start a real peer-review round in the background and return immediately with a session_id/job_id for polling. AI evidence supplied in evidence is persisted durably and transported automatically; no separate attachment step is required. When session_id names an existing session, requires the verified capability token of that session's persisted petitioner; opening a new session does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
draftYes
peersNo
callerYes
evidenceNoRaw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance.
session_idNo
review_focusNoOptional provider-neutral review scope anchor. This is not Claude Code's /focus UI command; it is injected as a front-loaded Review Focus prompt block for every selected peer, including OUT OF SCOPE handling for unrelated findings.
caller_statusNoREADY
response_formatNojson
reasoning_effort_overridesNoOptional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings).

TDQS

A4.2/5.0
Behavior4/5

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

The description adds meaningful behavior beyond annotations: the operation is asynchronous, returns immediately, persists evidence durably, transports it automatically, and imposes capability-token requirements when resuming an existing session. Annotations only convey readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false; the description enriches that with execution and authentication context.

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

Conciseness5/5

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

The description is three dense, front-loaded sentences with no filler. The core action and return behavior appear first, followed by evidence handling and the session capability caveat. Every sentence earns its place and no information is repeated from the schema.

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 complex async tool with 10 parameters and no output schema, the description covers the key operational essentials: it starts a background round, returns a pollable ID, persists evidence, and clarifies auth requirements. It does not explain the polling lifecycle or the meaning of task/draft/caller beyond their names, and without an output schema some return-format detail is left unspecified, but the description is still reasonably complete for selecting and invoking the tool correctly.

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 low at 30%, so the description must compensate for many parameters. It does add meaning for `evidence` (durable persistence, automatic transport) and `session_id` (capability-token requirement), which are genuinely helpful. However, the other seven parameters — task, draft, caller, peers, caller_status, response_format, and reasoning_effort_overrides — receive no additional semantic clarification in the main description, leaving gaps for a low-coverage schema.

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

Purpose5/5

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

The description states a specific verb and resource: "Start a real peer-review round in the background and return immediately with a session_id/job_id for polling." This clearly distinguishes the tool from read-oriented siblings like session_read or session_poll, and from the related start_unanimous tool by emphasizing a background, pollable round.

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

Usage Guidelines4/5

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

The description gives concrete usage context: it positions itself as the routine path by saying evidence is "transported automatically; no separate attachment step is required," implicitly routing away from session_attach_evidence. It also clarifies the existing-session condition: opening a new session does not require the petitioner's capability token, while resuming does. It does not explicitly compare against alternatives like ask_peers or session_start_unanimous, so it falls just short of a 5.

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

session_start_unanimousStart Until UnanimousA

Start real API generation/revision rounds in the background until unanimity, max_rounds or budget limit. AI evidence supplied in evidence is persisted durably and transported automatically; no separate attachment step is required. v2.11.0: same caller + relator-lottery semantics as run_until_unanimous — see that tool for details. When session_id names an existing session, requires the verified capability token of that session's persisted petitioner; opening a new session does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoship
taskYes
peersNo
callerYes
evidenceNoRaw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance.
lead_peerNo
max_roundsNoHard review-round ceiling unless allow_auto_extension is explicitly true.
session_idNo
max_cost_usdNo
review_focusNoOptional provider-neutral review scope anchor. This is not Claude Code's /focus UI command; it is injected as a front-loaded Review Focus prompt block for every selected peer, including OUT OF SCOPE handling for unrelated findings.
initial_draftNo
until_stoppedNo
response_formatNojson
allow_auto_extensionNoOpt in to at most two evidence-only auto-extensions. False keeps max_rounds rigid.
reasoning_effort_overridesNoOptional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings).

TDQS

A4/5.0
Behavior4/5

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

The description adds meaningful behavioral detail beyond the annotations: background/asynchronous execution, durable persistence of evidence, automatic transport to reviewers, and a token requirement for existing sessions. This is consistent with annotations declaring readOnly=false and idempotent=false, and it gives the agent a clearer picture of side effects and prerequisites.

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

Conciseness5/5

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

The description is dense but well-organized: the first sentence states the core purpose, the second covers evidence behavior, the third points to sibling semantics, and the fourth addresses session security. There is little wasted text, and important information is front-loaded.

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

Completeness2/5

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

This is a complex 15-parameter background job with no output schema, yet the description does not explain the return value, how to monitor progress, or how parameters such as task, mode, peers, and lead_peer interact. Delegating key semantics to run_until_unanimous helps, but the definition is not self-sufficient for an agent trying to invoke it correctly in diverse situations.

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

Parameters3/5

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

The description adds semantics for key parameters: evidence is persisted durably, session_id has a token requirement, caller semantics are delegated to run_until_unanimous, and termination depends on max_rounds or budget. However, schema description coverage is only 33%, and the description still leaves many parameters — such as task, mode, peers, lead_peer, initial_draft, and response_format — without meaningful explanation.

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

Purpose5/5

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

The description opens with a specific action and resource: starting real API generation/revision rounds in the background. It states termination conditions (unanimity, max_rounds, or budget limit) and distinguishes itself from siblings by emphasizing background execution and referencing run_until_unanimous. This is sufficient for an agent to identify what the tool does and how it differs from session_start_round.

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

Usage Guidelines4/5

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

The description provides clear context: uses background rounds, persists evidence automatically so no separate attachment step is needed, and explains the capability-token requirement when resuming an existing session. It does not fully articulate when not to use this tool versus other siblings, but the context is clear enough for most selection decisions.

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

session_sweepSweep Idle SessionsA
DestructiveIdempotent

Finalize unfinished sessions whose metadata has been idle for at least 24 hours. The terminal reason accepts at most 200 characters. v3.7.5 (B1): opt-in prune_corrupt also removes stale entries from the corrupt_sessions/ quarantine directory. Requires a verified capability token. Sweep is the one mutation that acts ACROSS owners, so the token is not the affected petitioner's — but a self-declared identity is refused, and it is therefore no way out of a token-file failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
callerYes
reasonNostale
outcomeNoaborted
idle_minutesNo
prune_corruptNo
response_formatNojson
corrupt_min_age_daysNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare destructiveHint and idempotentHint, but the description adds significant behavioral detail: it removes stale quarantine entries only when prune_corrupt is opted in, requires a verified capability token, and clarifies that the token belongs to a different identity than the affected petitioner. This goes well beyond what the annotations convey.

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 dense but compact: three sentences front-load the core purpose and then add auth and version-specific behavior. The token-file warning is slightly elaborate but relevant to safe invocation, so no sentence is pure filler.

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

Completeness3/5

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

The description covers purpose, auth requirements, and destructive scope, which are critical safety aspects. However, there is no output schema, yet the description does not mention return values or response_format behavior, and most parameters remain semantically unexplained. It is adequate for safety but incomplete for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only clarifies reason's 200-character limit and prune_corrupt's quarantine behavior. The other five parameters—caller, outcome, idle_minutes, response_format, and corrupt_min_age_days—are left undocumented, which is insufficient for a 7-parameter tool.

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

Purpose5/5

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

The description states a specific verb and resource: 'Finalize unfinished sessions whose metadata has been idle for at least 24 hours.' It also distinguishes the tool from siblings by noting it is 'the one mutation that acts ACROSS owners,' which prevents confusion with per-owner session mutations.

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

Usage Guidelines4/5

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

The description gives clear usage context: sweep is for idle unfinished sessions and is uniquely cross-owner, which helps an agent select it over owner-scoped alternatives. It also provides an exclusion by warning that a self-declared identity is refused and this is 'no way out of a token-file failure.' It does not explicitly name alternate tools, so it stops short of a 5.

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

session_truthfulness_preflight_checkCheck Submission Preflights (Legacy Alias)C
Read-onlyIdempotent

Backward-compatible alias for session_preflight_check. Its top-level pass now reflects both enabled runtime gates, eliminating truthfulness-only false positives.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
draftNo
callerYes
evidenceNo
session_idYes
response_formatNojson

TDQS

C2.4/5.0
Behavior3/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. Description adds that the top-level pass reflects both enabled runtime gates and no longer emits truthfulness-only false positives, but does not define 'runtime gates' or the pass semantics, so the added value is real but incomplete.

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

Conciseness4/5

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

Two short sentences, no filler; the alias fact and the behavior delta are front-loaded. However, it is concise at the expense of content, so this is efficiency rather than fully informative structure.

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

Completeness1/5

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

For a tool with 6 params, no output schema, and many preflight-related siblings, the description does not cover what the check returns, what inputs mean, when to use it, or how the two gates interrelate. An agent has no basis to invoke it correctly beyond guessing compatibility with session_preflight_check.

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

Parameters1/5

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

All six parameters are undocumented in the schema (0% coverage), and the description names none of task, draft, evidence, caller, session_id, or response_format. The schema only gives structural constraints like enums/pattern, so an agent cannot know what values mean.

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?

Description identifies this as a backward-compatible alias for session_preflight_check, so an agent can map it to a known sibling, but it never states the underlying operation independently. The title adds 'Check Submission Preflights,' yet the actual checks, inputs, and decision criteria are left to inference.

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

Usage Guidelines2/5

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

No advice on when to call this vs session_preflight_check or any sibling. 'Backward-compatible alias' and 'Legacy Alias' imply the canonical sibling is preferred, but this is implicit, not an explicit routing 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.

  1. 22 tool updatesv4.4.18
    • Changedask_peers5 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / evidence / description
        Previous value: -"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."New value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
      • changedInput schema / required
        Previous value: -[
        -  "task",
        -  "draft"
        -]New value: +[
        +  "task",
        +  "draft",
        +  "caller"
        +]
    • Changedcontest_verdict4 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / new_caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "reason",
        -  "new_task"
        -]New value: +[
        +  "session_id",
        +  "reason",
        +  "new_task",
        +  "caller"
        +]
    • Removedescalate_to_operator
    • Changedprobe_peers3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Removedregenerate_caller_tokens
    • Changedrun_until_unanimous5 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / evidence / description
        Previous value: -"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."New value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
      • changedInput schema / required
        Previous value: -[
        -  "task"
        -]New value: +[
        +  "task",
        +  "caller"
        +]
    • Changedruntime_capabilities3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Changedserver_info3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Changedsession_attach_evidence3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "label",
        -  "content"
        -]New value: +[
        +  "session_id",
        +  "label",
        +  "content",
        +  "caller"
        +]
    • Changedsession_cancel_job3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id"
        -]New value: +[
        +  "session_id",
        +  "caller"
        +]
    • Changedsession_doctor3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Removedsession_evidence_checklist_update
    • Changedsession_evidence_judge_consensus_pass3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "judge_peers",
        -  "draft"
        -]New value: +[
        +  "session_id",
        +  "judge_peers",
        +  "draft",
        +  "caller"
        +]
    • Changedsession_evidence_judge_pass3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "judge_peer",
        -  "draft"
        -]New value: +[
        +  "session_id",
        +  "judge_peer",
        +  "draft",
        +  "caller"
        +]
    • Changedsession_finalize4 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / outcome / enum
        Previous value: -[
        -  "converged",
        -  "aborted",
        -  "max-rounds"
        -]New value: +[
        +  "aborted"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "outcome"
        -]New value: +[
        +  "session_id",
        +  "outcome",
        +  "caller"
        +]
    • Changedsession_init3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "task"
        -]New value: +[
        +  "task",
        +  "caller"
        +]
    • Changedsession_preflight_check3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id"
        -]New value: +[
        +  "session_id",
        +  "caller"
        +]
    • Changedsession_recover_interrupted3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Changedsession_start_round5 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / evidence / description
        Previous value: -"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."New value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
      • changedInput schema / required
        Previous value: -[
        -  "task",
        -  "draft"
        -]New value: +[
        +  "task",
        +  "draft",
        +  "caller"
        +]
    • Changedsession_start_unanimous5 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / properties / evidence / description
        Previous value: -"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."New value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers. This is the routine path; `session_attach_evidence` attaches the same material out of band and grants it no additional provenance."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-6 Astra, GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
      • changedInput schema / required
        Previous value: -[
        -  "task"
        -]New value: +[
        +  "task",
        +  "caller"
        +]
    • Changedsession_sweep3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • addedInput schema / required
        Added value: +[
        +  "caller"
        +]
    • Changedsession_truthfulness_preflight_check3 fields changed
      • removedInput schema / properties / caller / default
        Removed value: -"operator"
      • changedInput schema / properties / caller / enum
        Previous value: -[
        -  "codex",
        -  "claude",
        -  "gemini",
        -  "deepseek",
        -  "grok",
        -  "perplexity",
        -  "operator"
        -]New value: +[
        +  "codex",
        +  "claude",
        +  "gemini",
        +  "deepseek",
        +  "grok",
        +  "perplexity"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "session_id"
        -]New value: +[
        +  "session_id",
        +  "caller"
        +]
  2. 4 tool updatesv4.4.13
    • Changedask_peers1 field changed
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
    • Changedrun_until_unanimous1 field changed
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
    • Changedsession_start_round1 field changed
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
    • Changedsession_start_unanimous1 field changed
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6, Kimi K3 via Perplexity and DeepSeek, and xhigh on Grok 4.6; older GPT-5 families use their own ceilings)."
  3. 15 tool updatesv4.4.12
    • Addedask_peers
    • Addedcontest_verdict
    • Addedescalate_to_operator
    • Addedprobe_peers
    • Addedregenerate_caller_tokens
    • Changedsession_events2 fields changed
      • addedInput schema / properties / include_token_deltas
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 200,
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Addedsession_evidence_checklist_update
    • Addedsession_evidence_judge_consensus_pass
    • Addedsession_evidence_judge_pass
    • Addedsession_finalize
    • Addedsession_init
    • Addedsession_judgment_precision_report
    • Addedsession_list
    • Addedsession_read
    • Addedsession_sweep
  4. 14 tool updatesv4.4.11
    • Removedask_peers
    • Removedcontest_verdict
    • Removedescalate_to_operator
    • Removedprobe_peers
    • Removedregenerate_caller_tokens
    • Removedsession_evidence_checklist_update
    • Removedsession_evidence_judge_consensus_pass
    • Removedsession_evidence_judge_pass
    • Removedsession_finalize
    • Removedsession_init
    • Removedsession_judgment_precision_report
    • Removedsession_list
    • Removedsession_read
    • Removedsession_sweep
  5. 8 tool updatesv4.4.9
    • Changedask_peers8 fields changed
      • addedInput schema / properties / evidence
        Added value: +{
        +  "description": "Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path.",
        +  "maxLength": 200000,
        +  "type": "string"
        +}
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. Useful to dial down expensive peers (e.g. Grok grok-4.20-multi-agent xhigh = 16 agents, or Perplexity sonar-deep-research that bills citation + reasoning + search queries separately) for routine reviews without editing the host MCP configs."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."
      • changedInput schema / properties / reasoning_effort_overrides / properties / claude / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / codex / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / deepseek / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / gemini / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / grok / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / perplexity / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
    • Changedrun_until_unanimous10 fields changed
      • addedInput schema / properties / allow_auto_extension
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to at most two evidence-only auto-extensions. False keeps max_rounds rigid.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / evidence / description
        Added value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."
      • addedInput schema / properties / max_rounds / description
        Added value: +"Hard review-round ceiling unless allow_auto_extension is explicitly true."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. Useful to dial down expensive peers (e.g. Grok grok-4.20-multi-agent xhigh = 16 agents, or Perplexity sonar-deep-research that bills citation + reasoning + search queries separately) for routine reviews without editing the host MCP configs."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."
      • changedInput schema / properties / reasoning_effort_overrides / properties / claude / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / codex / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / deepseek / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / gemini / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / grok / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / perplexity / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
    • Changedsession_cancel_job1 field changed
      • changedInput schema / properties / reason / default
        Previous value: -"operator_requested"New value: +"requester_requested"
    • Changedsession_poll1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "summary",
        +  "enum": [
        +    "summary",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Addedsession_preflight_check
    • Changedsession_start_round8 fields changed
      • addedInput schema / properties / evidence
        Added value: +{
        +  "description": "Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path.",
        +  "maxLength": 200000,
        +  "type": "string"
        +}
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. Useful to dial down expensive peers (e.g. Grok grok-4.20-multi-agent xhigh = 16 agents, or Perplexity sonar-deep-research that bills citation + reasoning + search queries separately) for routine reviews without editing the host MCP configs."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."
      • changedInput schema / properties / reasoning_effort_overrides / properties / claude / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / codex / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / deepseek / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / gemini / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / grok / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / perplexity / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
    • Changedsession_start_unanimous10 fields changed
      • addedInput schema / properties / allow_auto_extension
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to at most two evidence-only auto-extensions. False keeps max_rounds rigid.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / evidence / description
        Added value: +"Raw evidence from the authenticated AI caller. It is persisted automatically as durable, SHA-256-addressed caller_submitted_unverified material and transported to reviewers; no manual operator attachment is required. Do not call session_attach_evidence for this routine path."
      • addedInput schema / properties / max_rounds / description
        Added value: +"Hard review-round ceiling unless allow_auto_extension is explicitly true."
      • changedInput schema / properties / reasoning_effort_overrides / description
        Previous value: -"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. Useful to dial down expensive peers (e.g. Grok grok-4.20-multi-agent xhigh = 16 agents, or Perplexity sonar-deep-research that bills citation + reasoning + search queries separately) for routine reviews without editing the host MCP configs."New value: +"Optional per-peer reasoning_effort overrides for this call. Keys are peer ids (codex|claude|gemini|deepseek|grok|perplexity); missing keys fall back to global config. This is a shared scale: adapters normalize unsupported literals to the selected model's documented enum (`ultra` becomes max on GPT-5.6 and high on Grok 4.5; older GPT-5 families use their own ceilings)."
      • changedInput schema / properties / reasoning_effort_overrides / properties / claude / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / codex / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / deepseek / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / gemini / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / grok / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
      • changedInput schema / properties / reasoning_effort_overrides / properties / perplexity / enum
        Previous value: -[
        -  "none",
        -  "minimal",
        -  "low",
        -  "medium",
        -  "high",
        -  "xhigh",
        -  "max"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh",
        +  "max",
        +  "ultra"
        +]
    • Changedsession_truthfulness_preflight_check1 field changed
      • addedInput schema / properties / caller
        Added value: +{
        +  "default": "operator",
        +  "enum": [
        +    "codex",
        +    "claude",
        +    "gemini",
        +    "deepseek",
        +    "grok",
        +    "perplexity",
        +    "operator"
        +  ],
        +  "type": "string"
        +}
  6. 30 tool updatesv4.4.8
    • First observedask_peers
    • First observedcontest_verdict
    • First observedescalate_to_operator
    • First observedprobe_peers
    • First observedregenerate_caller_tokens
    • First observedrun_until_unanimous
    • First observedruntime_capabilities
    • First observedserver_info
    • First observedsession_attach_evidence
    • First observedsession_cancel_job
    • First observedsession_check_convergence
    • First observedsession_doctor
    • First observedsession_events
    • First observedsession_evidence_checklist_update
    • First observedsession_evidence_judge_consensus_pass
    • First observedsession_evidence_judge_pass
    • First observedsession_finalize
    • First observedsession_init
    • First observedsession_judgment_precision_report
    • First observedsession_list
    • First observedsession_metrics
    • First observedsession_peer_reliability_report
    • First observedsession_poll
    • First observedsession_read
    • First observedsession_recover_interrupted
    • First observedsession_report
    • First observedsession_start_round
    • First observedsession_start_unanimous
    • First observedsession_sweep
    • First observedsession_truthfulness_preflight_check

TDQS

B3.2/5.0

Scored across 28 tools

Disambiguation3/5

Most tools have distinct roles, but there is meaningful overlap among state-inspection tools (session_read, session_poll, session_events, session_check_convergence) and between the synchronous/asynchronous round-starting variants. The deliberate alias session_truthfulness_preflight_check also adds avoidable ambiguity.

Naming Consistency4/5

The dominant session_* family is consistently snake_case and action-oriented, and even the non-session tools use clear lowercase_snake names. Minor deviations like server_info, runtime_capabilities, and run_until_unanimous break the strict pattern but are not seriously confusing.

Tool Count2/5

At 28 tools, the surface is above the comfortable range and feels bloated, with several maintenance, telemetry, and inspection variants that could plausibly be consolidated. While the domain is complex, the alias tool and overlapping read/state operations suggest the count is not fully justified.

Completeness4/5

The lifecycle is well covered: session creation, reading, polling, round execution, evidence handling, judgment, convergence checking, reporting, cancellation, recovery, finalization, and contestation are all present. Minor gaps like explicit session export or deletion exist, but the append-only session design makes those omissions reasonable.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers