Skip to main content
Glama

OrangePro maps every public function in your repository, links each one to the tests that actually call it, and ranks what's left by what it can break. For a test you care about, it breaks the function in an isolated copy and checks that the test fails. It runs on your machine, uses no AI model for scoring, and sends nothing to OrangePro. Mapping, gap ranking and proof work with no model key. Drafting a runnable test needs a provider. orangepro_generate_tests with provider set to deterministic runs with no key and returns placeholders only: the body is expect(true).toBe(true); // placeholder — replace with a concrete assertion, runnable is false, and there is no suggested_path, run_command or prove_run. That mode smoke-tests the pipeline.

npx -y @orangepro/mcp-server@latest start .

Contents


Related MCP server: mcp-codebase-oracle

What you get

Every run writes two reports and a spreadsheet of tests to .orangepro/:

File

For

What's in it

short_behavior-coverage.html

Leads, managers, anyone in a hurry

One page: what to do with the 20 highest-priority functions, the top five with the reason and the tests drafted for each, what changed since the last report, and how to reproduce the run.

behavior-coverage.html

Developers

Worklist: every ranked function with what to do, filters, and a side panel with the evidence, why it ranks, two drafted tests and the proof command. Map: where tests reach, by area. Run details: inputs, counts, proofs, fingerprints and settings.

tests.csv

QA, test managers

One row per test slot (preconditions, steps, test data, expected result, priority, folder), ready for Excel, Google Sheets, TestRail, Jira Xray or Zephyr Scale. Export tests (CSV) in the detailed report downloads it, and its Run details show how the columns map (Importing tests.csv).

Every function gets one of four things to do:

What it means

What to do

Done

A test fails when this code breaks.

Nothing. It moves back to Prove if the code changes.

Prove

A test runs it, or a coverage run executes it, but no test is proven to catch a break.

Run the proof command.

Check

A test file or test name points here, but no call was traced.

Read that test file first; prove it if it drives the function, otherwise write one.

Write

No test catches a break here yet.

Write a test (two are drafted for the top 20), then prove it.

The one-page summary

The detailed report

Both from OrangePro run on its own repository at commit 64a5213, without a model key, so no tests were drafted. With a key, each of the top 20 shows two drafted tests, and the side panel shows their steps and code.


Why developers use it

  • It tells you what a test actually checks, not just what it runs. A test that calls a function isn't necessarily checking it. opro prove replaces the function body with a fixed return value in an isolated copy and reruns your own test, unchanged. If the test still passes, it wasn't protecting that function.

  • It puts consequences first. One filter shows the code paths that reach a delete or purge (cache evictions don't count); others show code that changes often, has many callers or runs on a schedule.

  • It's honest about evidence. A function is "linked" only when a test calls that exact function. A test with a similar name is a lead, never coverage. Tests that only check mocks don't count.

  • It's repeatable. Same commit, full git history, same config and same version give the same ranking. Each report records fingerprints, so you can tell when a change in results came from the code and when it came from the tool.

  • Your coding agent can drive it. As an MCP server it gives Claude Code, Cursor, Copilot, Codex and others the ranked gaps, the suggested test location and the proof step in one loop.

  • It's free, local and open source (MIT). No account, no API key for analysis, and no upload.


Quick start

cd /path/to/your/repo
# install the repo's own dependencies first (npm ci, uv sync, go mod download, ...)
npx -y @orangepro/mcp-server@latest start .
open .orangepro/short_behavior-coverage.html

Mapping, gap ranking and proof work with no model key. Drafting a runnable test needs a provider (see Model setup). Deterministic mode returns placeholders only, as described above.

Tips for the most accurate run:

  • Use a full clone, not a shallow one. Change history drives part of the ranking, and the report says when history was partial.

  • Exclude what isn't product code with rank_exclude_paths (see Configuration).

  • Rerun after a change. Each report says what changed since the last one. When nothing changed (same commit, files, settings, coverage and proofs), start reuses the last reports at once and says so; --fresh runs in full anyway.

What's written:

.orangepro/
├── short_behavior-coverage.html   ← one-page summary
├── behavior-coverage.html         ← detailed report: worklist, map, run details
├── tests.csv                      ← drafted tests, one row per test
├── report-data.json               ← the data both reports show (used to compare and reuse runs)
├── run-key.json, last-start.json  ← what the last run saw, so an unchanged repo is not analysed again
├── graph.json                     ← the evidence graph (deterministic)
├── ledger.json                    ← proof certificates
├── rtm.md                         ← traceability matrix
└── config.json                    ← optional per-repo settings

orangepro_generated/               ← generated tests (a runnable draft needs a provider; deterministic mode returns placeholders only); your files are never edited

Evidence tiers

Every function gets exactly one evidence label. The four things to do above are read from it.

Evidence

What it means

To do

Proven

A test passed on the original code and failed at its own assertion when this function was broken in an isolated copy.

Done

Runs under tests

A coverage tool you ran executed this code.

Prove

Linked

A test calls this exact function. That's a structural link, not proof.

Prove

Unconfirmed

A test file or a test with a similar name points here, but no call was traced. That's a lead, not evidence.

Check

No test found

Nothing links a test to it.

Write

A proof that ran and did not catch the break turns the function into Write; a proof made before the code changed turns it back into Prove.

A successful orangepro_prove sets the oracle field proven to true and writes the ledger status reproven. That status is used the first time too. The report's Proven count is how many behaviors still match one of those certificates. The traceability row says Reproven (this run). That label does not mean the function was proved earlier.

What OrangePro doesn't count, so linked numbers are a floor, not a coverage percentage:

  • tests that only assert on mocks;

  • calls made over HTTP or from end-to-end suites;

  • in Python, objects that reach a test only through a fixture.

Check the tests before writing new ones for a flagged path.

"Proven 0" is normal on a first run. Proof runs your tests, so it happens only for the functions you choose, or within the attempt budget of opro start.


How the ranking works

Each unproven function gets an OrangePro Risk Score, ORS = P × I × D:

  • P: how likely it is to change. Change history, fan-out, new code and size.

  • I: what it can break. Incoming references, entry-point position, data sensitivity, and a floor for paths that reach a delete or purge within two calls.

  • D: how hard a break would be to notice. Evidence tier (a linked test or a coverage run makes a break easier to notice than a name match or nothing), and whether it runs unattended (jobs and schedulers).

The score sets the order of work. It is not a defect probability. The weights are fixed and no AI model is involved. The report shows the inputs behind every row.


Prove a test

# Python: the mutation value is derived from the function (return annotation or its observed result)
opro prove-loop --target-symbol 'sym:app/billing/invoices.py#void_invoice' \
  --test 'tests/test_invoices.py::test_void_marks_invoice_void' --replacement sentinel

# TypeScript / JavaScript: give the inert body to substitute
opro prove-loop --target-symbol 'sym:src/orders.service.ts#OrdersService.cancel' \
  --test src/orders.service.spec.ts --replacement 'return null;'
  • Proven: the test passes on the original code and fails at its own assertion on the broken copy. The oracle then says proven: true. The ledger stores that attempt as reproven, including the first time, and the traceability row says Reproven (this run).

  • Not proven: the test still passes on the broken copy, so it doesn't protect that function. That's a finding too.

  • Unrunnable: setup failed. This is never counted either way.

Arguments for orangepro_prove

For a JavaScript or TypeScript function the call needs:

  • target_symbol: sym:<file>#<Symbol>. A bare name is refused.

  • test_path: the test file, relative to the repo.

  • replacement: empty, or a single return of a literal, such as return null;. A throw, a call, or any other statement is refused.

  • replacement_mode: return-json for a normal function (the default). promise-json when the function is async, so the literal is returned as a resolved promise.

  • runner: jest, vitest, mocha, or auto. Use the runner the repo uses.

Worked example for an async run in index.js, tested with Jest:

{
  "target_symbol": "sym:index.js#run",
  "test_path": "index.test.js",
  "replacement": "return null;",
  "replacement_mode": "promise-json",
  "runner": "jest"
}

Go and Java do not take replacement. They take test_run (^TestName$ for Go, TestClass#testMethod for Java).

Find weak tests without a model key:

opro roast .   # passing tests whose targeted mutant still survives

Use with your coding agent

OrangePro runs as an MCP server. Add it to your client's config:

{
  "mcpServers": {
    "orangepro-local": {
      "command": "npx",
      "args": ["-y", "@orangepro/mcp-server@latest", "mcp"]
    }
  }
}

Client

Where to put it

Claude Code

.mcp.json or ~/.claude.json

Cursor

~/.cursor/mcp.json or Settings → MCP

VS Code / Copilot

MCP settings

Codex / OpenCode / Windsurf

npx -y @orangepro/mcp-server@latest agent --client codex prints the setup

A prompt that runs the whole loop:

"Use orangepro_start, then orangepro_find_test_gaps. For the top gap, write a test at the suggested path, run it, then call orangepro_prove_loop and tell me whether it was proven."


Configuration

Optional. Put it in .orangepro/config.json in the repository, or in ~/.orangepro/config.json for defaults across repositories. Every setting that changes the ranking is shown in the report.

{
  "classification": {
    "rank_exclude_paths": ["ui/**", "docs/**", "scripts/**"],
    "test_support_paths": ["internal/testutil/**"],
    "destructive_sinks": ["archive*"]
  },
  "tuning": { "churn_window_days": 180 },
  "proof": { "python_runner": "auto", "attempt_limit": 20 },
  "overrides": [
    { "symbol": "sym:src/legacy/shim.ts#shim", "action": "suppress", "reason": "generated shim, not product code" }
  ]
}
  • rank_exclude_paths removes paths from the ranking. They are still counted as behaviors.

  • destructive_sinks adds delete-like calls for your codebase.

  • Overrides (suppress, pin, reclassify) each require a reason, and the report lists them.

  • Weights and tiers can't be configured.


Language support

Language

Map functions

Link tests that call them

Draft tests

Mutation proof

TypeScript / JavaScript

✓

✓

✓ Jest, Vitest, Mocha

✓ Jest, Vitest, Mocha

Python

✓

✓

✓ pytest

✓ pytest

Go

✓

✓

✓ *_test.go

✓ go test

Java

✓

✓

✓ JUnit 4 and 5

✓ Maven with JUnit 5 only

Kotlin, Rust, PHP, C#, Ruby, Swift, C, C++

✓

name match only

not yet

not yet

  • "Name match only" means a test file or test name that looks like the function makes it Unconfirmed (Check). No call is traced, so these languages never reach Linked or Proven today.

  • TypeScript and JavaScript are parsed with the TypeScript compiler; the other languages with tree-sitter.

  • Python proof runs pytest through the repository's own environment: an existing .venv or venv, then uv or poetry when their lock files are present, else python -m pytest. Set proof.python_runner to use your own command.

  • Java proof needs Maven (Surefire) and JUnit 5. Gradle and JUnit 4 projects are mapped and linked, but not proven yet.

  • Not traced yet, so tested code can show as Unconfirmed: calls through Go test-suite methods and helper constructors, dependency injection that is wired at runtime, reflection, and calls made over HTTP or RPC.


Requirements and limits

  • A patched Node.js: 22.23.4 or newer 22.x, 24.22.1 or newer 24.x, or 26.12.1 or newer, on macOS or Linux. Windows isn't tested: proofs use POSIX paths and symlinks.

  • Use a patched Node.js. The October 21, 2026 Node.js security releases (22.23.4, 24.22.1, 26.12.1) fix several high-severity issues, and Node.js 20 is end-of-life and gets no fix. Odd-numbered lines (23, 25) have no patched release. The engines field in package.json records this, but npm only warns about it unless you set engine-strict=true. Check your version with node -v. See the Node.js security release notice.

  • Git, for change history. Without it, or in a shallow clone, the ranking uses structure only and the report says so. A folder that isn't a git checkout always runs in full.

  • Install the repository's dependencies first (npm ci, uv sync, go mod download, mvn -q install, …). Proof runs your own tests in an isolated copy and needs them to pass there.

  • What's read: source and test files, skipping anything in .gitignore or .orangeproignore (negations with ! aren't supported), the usual build and dependency folders (node_modules, vendor, dist, build, target, coverage, .venv, …), files over 1 MB, and generated code (files marked Code generated … DO NOT EDIT). Up to 100,000 files; ORANGEPRO_MAX_FILES lowers that and ORANGEPRO_MAX_ANALYZE_MS sets a time limit for the scan.

  • Test drafting covers the 20 highest-priority functions, two tests each, in the order the worklist shows, and the reports show those 20. Drafts are kept until the function's code changes.

  • What counts as "nothing changed" for reusing a run: the commit, every modified or untracked file that git doesn't ignore, OrangePro's settings and ignore files, coverage files, the proof ledger, the start options, whether a model key is set, and the analysis version. A run whose test drafting failed on a provider error (out of credits, rate limit) runs again in full.

  • The CSV column mapping follows each tool's CSV importer (see Importing tests.csv). Check the import preview the first time.


Privacy and network use

  • Nothing about your code or your runs is sent anywhere. There is no usage telemetry.

  • Source is read in-process and never stored or uploaded. Reports and the evidence graph contain metadata, not your source.

  • Your source files are never edited. Proofs run in an isolated copy.

  • Model calls happen only if you configure a key, and they go directly from your machine to the provider you chose. Keys, the provider, its endpoint and the model are read only from your shell environment, or from the env block of your MCP client's config. OrangePro reads no .env file, so a repository you scan cannot choose where your key is sent, and OrangePro never writes keys anywhere. opro setup saves only the provider and model name.

  • With a key, the reports and tests.csv include the tests your model drafted, and the prompts include the function names, files and evidence they're based on.

  • Reports load nothing from the network. The only outbound links are ones you click.


Feedback

Reports include a Give feedback link and a This looks wrong link on each finding. Once in a while, after the findings, they also ask whether the report helped.

  • The links carry nothing about your project. The form sends only what you review and submit.

  • You stay anonymous unless you leave an email.

opro feedback          # print the link and your settings
opro feedback off      # stop the "Did this help?" question (links stay)
ORANGEPRO_FEEDBACK_URL=off   # hide every feedback link

The question appears at most once every 14 days (ORANGEPRO_FEEDBACK_COOLDOWN_DAYS). That preference is stored only on your machine. MCP clients get the link as optional result metadata (_meta["ai.orangepro/feedback_url"]), and your agent is never asked to prompt you for feedback.


Reference

opro                          # same as opro start .
opro start . --no-ai --no-auto   # analyze + reports, no model calls, no proof attempts
opro start . --fresh          # run in full even when nothing changed since the last run
opro start --base main        # scope to a branch diff
opro analyze                  # build the evidence graph and reports
opro gaps --limit 10          # top unproven behaviors, ranked
opro prove-loop ...           # mutation proof for one function (see above)
opro roast .                  # find tests whose mutant survives (no key needed)
opro doctor --proof           # why top targets aren't proven yet
opro generate --base main     # runnable tests for this branch (needs a provider; --provider deterministic returns placeholders only)
opro rtm                      # traceability matrix
opro export                   # metadata-only evidence pack
opro coverage                 # find or generate runtime coverage artifacts
opro feedback [on|off]        # feedback link and invitation setting
opro mcp                      # run as an MCP server (stdio)

Add --json to any read command for machine output. Run opro help for every flag.

Tool

What it does

orangepro_start

Analyze, write both reports and tests.csv, return next actions; returns at once with unchanged_since when nothing changed (fresh forces a full run)

orangepro_analyze_sources

Build or refresh the evidence graph

orangepro_find_test_gaps

Unproven behaviors ranked by ORS

orangepro_prove_loop

Setup + mutation proof + report refresh for one behavior

orangepro_prove

Mutation proof only

orangepro_generate_tests

Grounded tests. A runnable draft needs a provider. provider: deterministic returns placeholders only, with no key.

orangepro_changed_impact

What a diff touches

orangepro_status

Workspace state without running anything

orangepro_doctor

What evidence to add next

orangepro_graph_score

Graph readiness (0–100)

orangepro_rtm

Traceability matrix

orangepro_stats

Aggregate statistics

orangepro_record_run

Record a test run result

orangepro_explain_test

Why a test was generated

orangepro_export_evidence_pack

Metadata-only evidence pack

orangepro_update_graph

Incremental graph update

orangepro_ai_links

Weak behavior→code suggestions (optional AI, never evidence)

orangepro_ai_flows

Candidate flows (optional AI, never evidence)

Run your own unit and integration coverage first, then opro start. OrangePro ingests Go coverprofiles, lcov, coverage.py XML and JaCoCo XML, and keeps unit, integration and unclassified coverage separate. To label artifacts, add .orangepro/coverage-suites.json:

{
  "artifacts": {
    ".orangepro/coverage/unit.coverprofile": { "suite": "unit", "command": "make unit-test-coverage" },
    ".orangepro/coverage/integration.coverprofile": { "suite": "integration", "command": "make integration-test-coverage" }
  }
}

Provider

Environment variable

OpenAI-compatible

OPENAI_API_KEY (optional: OPENAI_BASE_URL, OPENAI_MODEL)

Anthropic

ANTHROPIC_API_KEY (optional: ANTHROPIC_MODEL)

Ollama (local, no key)

OLLAMA_BASE_URL (optional: OLLAMA_MODEL)

Auto-detect order: OpenAI → Ollama → Anthropic. Override with --provider and --model, or run opro setup.

  • Model output never changes an evidence tier. Only the mutation proof can mark a behavior Proven.

  • Generated tests land in orangepro_generated/ with the files and existing tests they're grounded on, and where and how to run them.

  • Drafts whose code fails the compile check are kept as plans ("Plan only"), with the reason named. Without a key, each of the top 20 shows two empty slots with a prompt you can copy into your coding agent.

One row per test, UTF-8. The first 12 columns are for import; the rest keep the priority, evidence and proof command with each test. Priority is High for the five highest-ranked functions and Medium for the rest.

Column in tests.csv

TestRail

Jira Xray

Zephyr Scale

ID

Test Case Identifier

(leave Key empty)

Title

Title

Summary

Name

Section (a > b)

Sections Hierarchy

Folder (a/b)

Test Repository Path

Folder

Priority

Priority

Priority

Priority (map Medium to Normal)

Test type

Type

Labels

Labels

Preconditions

Preconditions

(separate issues in Xray; add to Description if you want them)

Precondition

Steps

Manual Test Step: Action

Test data

Manual Test Step: Data

Steps with data

Steps

Test Script (Steps) - Step

Expected result

Expected Result

Manual Test Step: Expected Result

Test Script (Steps) - Expected Result

References

References

Description

Objective

  • TestRail: Import from CSV with the Test Case (Text) template, one row per test case.

  • Jira Xray: Test Case Importer; each test imports as one manual step.

  • Zephyr Scale: it has no test-data field, so Steps with data carries it.

  • Check the importer's preview before you confirm.

opro generate --base main     # tests for what this branch changed (read-only git diff)
opro generate --changed       # current branch vs its base
opro generate --pr 1234       # checks out PR #1234 (asks first; refuses on a dirty tree)

Hosted platform

This repository is the free local tool. The OrangePro platform adds:

  • a persistent graph across PRs and repositories;

  • CI gates on evidence and risk changes;

  • requirement and incident correlation;

  • team dashboards.

Contributing

git clone https://github.com/OrangeproAI/orangepro-mcp.git
cd orangepro-mcp && npm ci && npm run build
npm test

PRs welcome. Please open an issue first for large changes.


Available Tools

18 tools
orangepro_ai_flowsStage/apply AI candidate flowsA

Opt-in AI lane: propose candidate behavior-flow chains over existing deterministic entry and CodeSymbol ids. Generate writes .orangepro/flows.json only; apply=true stores survivors under analysis.candidate_flows. Candidate flows are a verify-these worklist and never affect Proven, deterministic flow counts, tiers, or coverage.

NameRequiredDescriptionDefault
applyNoApply staged flows into analysis.candidate_flows. Default false stages flows only.
modelNoModel name override.
providerNoBYOK provider override.
workspaceNoLocal workspace root. Defaults to the current directory.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false, destructiveHint=false, openWorldHint=true; the description goes well beyond that by disclosing both write targets (.orangepro/flows.json on generate, analysis.candidate_flows on apply=true) and an explicit safety guarantee that candidates never affect Proven counts, tiers, or coverage. The remaining gap is that openWorldHint=true is never explained — the BYOK provider/model overrides imply remote LLM calls with auth and cost implications that are not surfaced.

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 dense sentences with the key framing ('Opt-in AI lane') front-loaded and the safety guarantee placed last, which is the right order. The jargon ('CodeSymbol ids', 'survivors', 'Proven') makes it slightly heavier than necessary, but no sentence is wasted.

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?

There is no output schema, so the description should say what comes back — a list of proposed chains with ids to verify? — and it doesn't. For an open-world tool that also writes files, the absence of any note on provider/API-key prerequisites or expected return shape leaves real gaps, though the write semantics and non-impact guarantee cover the most important behavior.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented in structured data, and the description mostly restates the apply behavior that the schema already spells out. It adds no guidance on model/provider selection, defaults, or workspace scoping beyond what is in the schema, so baseline 3 is correct.

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 — proposing candidate behavior-flow chains over existing deterministic entries and CodeSymbol ids — and clearly marks this as an opt-in AI lane distinct from the deterministic one. It is clear and distinguishable in substance, but it never names the closest sibling (orangepro_ai_links) so the agent must infer the boundary from the phrase 'behavior-flow chains' vs. links.

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?

'Opt-in AI lane' plus 'Candidate flows are a verify-these worklist' implies when this tool is appropriate: an exploratory, non-authoritative pass. However, with 17 siblings including orangepro_ai_links, orangepro_prove, and orangepro_update_graph, there is no explicit statement of when to choose this over those alternatives or when not to use it at all.

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

orangepro_analyze_sourcesAnalyze local sourcesA
Idempotent

Build or refresh the local OrangePro evidence graph from a local checkout/path plus optional CSV/Markdown enrichers. Metadata-only by default — reads source in-process but never stores or uploads code. Optionally stages/applies AI candidate flows and refreshes the report when ai_flows=true.

NameRequiredDescriptionDefault
modeNoPersistence privacy mode. Only metadata_only is supported.
modelNoModel name override for ai_flows.
pathsNoExtra template/doc files (.csv/.md) to enrich the graph.
ai_flowsNoGenerate and apply AI-suggested candidate flows after analyze, then refresh the behavior report. Requires a BYOK provider; skips without failing analyze if none is configured.
providerNoBYOK provider override for ai_flows.
workspaceNoLocal workspace root. Defaults to the current directory.
include_markdownNoEnrich requirements-like Markdown docs. Default true.
include_source_snippetsNoDeferred: source snippets are never persisted in the first slice.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already disclose non-readOnly, idempotent, non-destructive. The description adds genuinely new context: it reads source in-process, never stores or uploads code, and ai_flows skips without failing when no BYOK provider is configured — useful operational behavior 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.

Conciseness5/5

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

Three front-loaded sentences: purpose first, then the privacy guarantee, then the optional AI behavior. No filler and nothing buried.

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?

With no required params and no output schema, the description covers the key behavioral concerns: privacy mode, in-process reading, and the conditional ai_flows path. It stops short of saying what the built/refreshed graph result looks like or how long a scan may take, which would help an agent set expectations.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 8 parameters including the mode enum and BYOK provider list. The description only restates the purpose of paths and ai_flows in prose, adding little syntax or format detail the schema lacks.

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+resource ('build or refresh the local OrangePro evidence graph') and names the inputs (local checkout/path, CSV/Markdown enrichers). It does not explicitly distinguish itself from close siblings like orangepro_update_graph or orangepro_ai_flows, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

Usage is implied by 'build or refresh' and the ai_flows clause, which explains that AI flows are only generated when ai_flows=true. There is no explicit statement of when to call this versus orangepro_update_graph or orangepro_ai_flows, nor any prerequisites.

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

orangepro_changed_impactChanged-file impactA
Read-only

DIFF/PR TOOL — only for real code-review situations. Summarizes what changed vs a base git ref and which local graph behaviors/tests are affected (basic changed-file impact; no deep route/API shape analysis). Requires a git repo and a real diff: returns status 'no_diff' / 'no_code_changes' (diff was docs-only) / 'missing_base_ref' / 'not_a_git_repo' with guidance instead of fabricated impact when there is nothing to analyze. For baseline (no-PR) test opportunities use orangepro_find_test_gaps.

NameRequiredDescriptionDefault
base_refNoBase git ref to diff against. Default 'main'.
workspaceNoLocal workspace root. Defaults to the current directory.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/destructiveHint annotations by enumerating the non-success outcomes ('no_diff', 'no_code_changes', 'missing_base_ref', 'not_a_git_repo') and promising guidance rather than fabricated impact. It also discloses the analytical ceiling (basic changed-file impact only), which is exactly the kind of honesty an agent needs to avoid over-trusting results. 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?

Front-loaded with the tool's identity and gating condition, and every sentence carries information rather than filler. The middle sentence is dense with parentheticals and slash-separated status codes, which costs a little readability but not correctness.

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

Completeness5/5

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

With no output schema, the description still tells the agent what comes back (changed set vs base ref plus affected behaviors/tests) and what the failure statuses are. Combined with the annotation-confirmed read-only nature, an agent has enough to decide and call 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 coverage is 100% and both parameters already carry descriptions including defaults, so the schema does the heavy lifting. The description reinforces the semantics of base_ref ('vs a base git ref') but adds no format, resolution, or workspace-scoping detail beyond the structured fields. Baseline 3 applies.

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

Purpose5/5

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

Uses a specific verb and resource ('Summarizes what changed vs a base git ref and which local graph behaviors/tests are affected') and immediately scopes itself to DIFF/PR review. It also delimits what it is not ('no deep route/API shape analysis'), so an agent can distinguish it from graph-scoring or test-generation siblings without opening the schema.

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 the selection condition ('only for real code-review situations') and names the alternative for the other case ('For baseline (no-PR) test opportunities use orangepro_find_test_gaps'). Prerequisites (git repo, real diff) are front-loaded, so the agent knows when the call is valid at all.

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

orangepro_doctorRecommend next evidenceB
Read-only

Recommend the smallest next source that would most improve generated-test quality, with expected score impact. Teaches what data improves output.

NameRequiredDescriptionDefault
goalNoOptimization goal hint, e.g. 'better_tests'.
proofNoProof-focused mode: explain why top targets are not Dynamically Proven (deduped blockers + smallest next steps). Read-only; mints nothing.
workspaceNoLocal workspace root. Defaults to the current directory.

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 and destructiveHint=false, and the description adds that this is an advisory recommendation with expected score impact and an educational explanation of what data improves output. It does not mention permissions, rate limits, or clarifying details about what exactly is returned beyond the phrase 'expected score impact'.

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

Conciseness4/5

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

The description is two short sentences and front-loads the core action: recommend the smallest next source with expected impact. 'Teaches what data improves output' is slightly redundant with the quality-improvement framing but still adds a useful orientation for the agent.

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 read-only recommendation tool with no output schema, the description gives the gist of the output ('expected score impact') but does not describe the return shape. It also omits when to choose this tool over sibling diagnostic tools, leaving a meaningful gap for selection.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents goal, proof, and workspace. The description does not add parameter-level detail beyond the schema, which is acceptable given the high coverage baseline.

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 (recommend) and a specific resource (the smallest next source to improve generated-test quality), plus that it includes expected score impact. It is clearly distinct from analyze_sources or find_test_gaps, but it never names those siblings to reinforce the distinction.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is for deciding what data to add when generated-test quality needs improvement. There is no explicit when-to-use, when-not-to-use, or comparison against alternatives such as analyze_sources or find_test_gaps.

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

orangepro_explain_testExplain a generated testA
Read-only

Explain why a generated test exists: which graph evidence anchors support it, source refs, and whether weak/candidate evidence was used. Exposes trust artifacts only, not internal generation logic.

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.
generated_test_idYesThe generated test id (or title) from orangepro_generate_tests.

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true and destructiveHint=false already declaring a safe read operation, the description adds meaningful behavioral context by disclosing exactly what is exposed: graph evidence anchors, source refs, and weak/candidate evidence status. It also clarifies that internal generation logic is intentionally not exposed, which prevents over-expectation about the response.

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 compact and front-loaded: the explanatory purpose comes first, followed by the concrete artifacts exposed and the boundary against internal logic. Every clause contributes useful information.

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

Completeness5/5

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

There is no output schema, so the description carries the return-value burden and does so by naming the key contents: evidence anchors, source refs, and weak/candidate evidence usage. For a read-only explanation tool with full parameter schema coverage, this is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description adds some semantic value by tying generated_test_id to the sibling orangepro_generate_tests tool, but it does not add syntax or format details beyond the schema.

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

Purpose5/5

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

The description states a specific verb-plus-resource purpose: explaining why a generated test exists by exposing graph evidence anchors, source refs, and weak/candidate evidence usage. It distinguishes this trust-explanation tool from the generation-oriented sibling orangepro_generate_tests by explicitly scoping it to trust artifacts rather than internal generation logic.

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?

Usage is clearly implied: call this after generation when you need to audit or understand the evidence behind a generated test. It usefully sets a boundary against internal generation logic, but it does not explicitly name alternatives or state when not to use this tool.

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

orangepro_export_evidence_packExport evidence packA
Idempotent

Export a portable evidence pack (JSON) plus a human-readable Markdown summary for review or later hosted promotion. Includes facts, provenance, generated outputs, and high-level score metadata — never prompts, weights, traces, or raw source. Validates against the local schema.

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.
graph_htmlNoAlso write a self-contained offline evidence-graph explorer (metadata only, no network).
output_pathNoOutput JSON path. Default 'orangepro-evidence-pack.json'.
include_generated_bodiesNoEmbed generated test bodies in the pack. Default false: bodies stay in the local workspace so the exported pack is metadata-only. Raw source snippets never cross the boundary regardless of this flag.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, idempotent, non-destructive) by disclosing the exact artifact set written, the data-boundary guarantee ('never prompts, weights, traces, or raw source'), and that output validates against the local schema. For a file-writing export with security implications, these are the details an agent needs before invoking it.

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 tight sentences: what is produced, what is excluded, how it is validated. Front-loaded with the deliverable and free of filler; every clause carries information an agent would otherwise have to guess.

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

Completeness5/5

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

With annotations covering the mutation profile and a fully-described 4-parameter schema, the remaining need is clarity on what the tool writes and what it refuses to include — both explicitly covered. No output schema exists, and the description compensates by naming the returned artifacts.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented, making 3 the baseline. The description reinforces the include_generated_bodies boundary ('raw source snippets never cross the boundary regardless of this flag'), adding modest value, but it does not explain workspace, output_path, or graph_html behavior beyond the schema.

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

Purpose5/5

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

States a specific verb+resource ('Export a portable evidence pack') and immediately enumerates the artifacts produced (JSON + Markdown summary, optional graph HTML). No sibling tool in the list overlaps with export/packaging, so an agent can route here unambiguously.

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?

Gives an implied purpose ('for review or later hosted promotion') but never states when to prefer this over siblings such as orangepro_rtm or orangepro_stats, nor any precondition (e.g. must analysis/score be run first). Usage must be inferred from the goal phrasing.

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

orangepro_find_test_gapsFind test gapsA
Read-only

List requirements/flows with weak or missing test evidence, plus top_risk_gaps for unproven code symbols ranked by the OrangePro Risk Score (Probability × Impact × DetectionDifficulty). Risk is prioritization only; it never changes coverage/proof status.

NameRequiredDescriptionDefault
limitNoMax gaps to return. Default 10.
workspaceNoLocal workspace root. Defaults to the current directory.
min_priorityNoMinimum priority to include (low|medium|high|critical).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), so the description's added value is the risk model definition (Probability × Impact × DetectionDifficulty) and the explicit invariant that risk never alters coverage/proof status — non-obvious behavior an agent could otherwise misread as a status mutation. It does not mention result ordering or pagination 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?

Two sentences, front-loaded with what is returned, then the ranking rule and the invariant. Every clause carries information and nothing is padded.

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?

With no output schema, the description does the necessary work by naming both return sections and the ranking basis, which is enough to interpret results. Minor gaps remain: it does not describe the shape of an individual gap entry or whether requirement gaps are also ranked.

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

Parameters3/5

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

Schema coverage is 100%, so limit, workspace, and min_priority are already documented with defaults and ranges. The description adds no further meaning about the parameters, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and two concrete resources: requirements/flows with weak or missing test evidence, plus 'top_risk_gaps' for unproven code symbols. The named output bucket and the risk-ranking criterion make it clearly distinct from siblings like orangepro_rtm or orangepro_graph_score.

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

Usage Guidelines3/5

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

Usage is only implied: the description tells you what you get, from which an agent can infer this is the gap-discovery/prioritization step, but it never says when to call it versus orangepro_rtm, orangepro_stats, or orangepro_generate_tests. The closing caveat about risk not changing proof status is a helpful semantic guardrail rather than routing guidance.

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

orangepro_generate_testsGenerate grounded testsA

Generate a small capped set (1-5) of grounded tests from local evidence using your own model key (BYOK: OpenAI-compatible, Ollama, or Anthropic). Tests are diversified across lightweight LOCAL scenario buckets (happy_path, validation_error, edge_case, integration_flow, security_privacy, regression) chosen from the evidence — unjustified buckets are skipped, never padded. By default it focuses the top-gap behavior and returns up to limit bucket-diverse tests for it; pass multiple target_ids to split the budget across them. Each test reports its bucket plus VALIDATED grounding evidence (every cited entity resolved against the local graph with its kind, evidence strength, and source_ref) and discloses weak/candidate evidence; evidence_summary reports proof coverage and any broken citations, so the grounding is verifiable rather than asserted. If evidence is too thin, returns missing-evidence guidance instead of generic tests. Returns each test's code plus run_hints (a suggested file path + run command) and an agent_workflow: YOU (the agent) write each file and run it with your shell tools, then report pass/fail + stack traces — OrangePro never writes to or runs anything in the repo. Requires the repo's test framework/deps to already be installed.

NameRequiredDescriptionDefault
limitNoTotal tests to generate (1-5), spread across local scenario buckets. Default 3.
modelNoModel name override.
compareNoRun BOTH arms — prompt-only baseline vs Local KG, same model + system prompt — and return side-by-side scores (completeness, context awareness, accuracy, domain specificity) plus both test suites. Non-persisting testing view.
base_refNoPR-scoped generation: restrict to the behaviors the diff vs this ref touches (e.g. 'main') — for branch/PR review, target only the changed code. Requires a git repo + a real diff; returns structured guidance (status + guidance) instead of fabricating when there is none. Overrides target_ids.
providerNoBYOK provider override (auto-detected from env if omitted). Use 'deterministic' for an offline stand-in; without any provider configured, generation returns setup guidance instead of degrading.
frameworkNoFramework hint, e.g. 'playwright', 'vitest', 'pytest'.
workspaceNoLocal workspace root. Defaults to the current directory.
target_idsNoBehavior/requirement external ids to target. Default: the top-gap behavior. Pass several to split the budget across them (each gets a test when the budget allows, in priority order).
write_filesNoDeferred/premium: repo file writing is disabled in the first slice; always treated as false.
prompt_versionNoPrompt strategy. Defaults to v2; v5 is opt-in until corpus validation clears it as default.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=true; the description adds the crucial contract that OrangePro never writes to or runs anything in the repo — the agent must write files and execute them itself. It also discloses the BYOK prerequisite, the no-provider fallback to setup guidance, and that evidence is validated against the local graph with broken citations surfaced. This is behavior an agent cannot infer from the schema or 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?

Front-loads the verb, cap, and BYOK requirement before any detail, and each subsequent clause adds distinct information (buckets, evidence validation, thin-evidence fallback, agent workflow, prerequisites). It is a single dense paragraph rather than structured bullets, which makes the long evidence/run_hints passage harder to scan, but there is little true filler.

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

Completeness5/5

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

With 10 parameters, no output schema, and openWorldHint=true, the description carries the burden well: it describes the returned fields (per-test bucket, validated evidence with kind/strength/source_ref, evidence_summary, code, run_hints, agent_workflow), the failure mode, and the environment prerequisite. Nothing essential for a correct first call appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining limit as a bucket-diverse budget, target_ids budget-splitting in priority order, and base_ref overriding target_ids. Provider auto-detection and the 'deterministic' offline stand-in are also given operational meaning. Only compare's full side-by-side scoring detail and framework/prompt_version nuances are left entirely to the schema.

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

Purpose4/5

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

Opens with a specific verb and resource plus scope: 'Generate a small capped set (1-5) of grounded tests from local evidence.' It further pins the mechanism (BYOK providers) and output character (bucket-diversified, evidence-grounded), so an agent knows exactly what it gets. It stops short of naming a sibling (e.g. find_test_gaps vs this generator) to route between 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?

Gives concrete operating guidance: default targets the top-gap behavior, pass multiple target_ids to split budget, use base_ref for PR/branch-scoped generation (and that it overrides target_ids), use compare for a prompt-only vs KG baseline. It also states the thin-evidence path returns guidance rather than generic tests. It never states when NOT to use this tool or names the sibling to pick instead.

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

orangepro_graph_scoreGraph readiness scoreA
Read-only

Return the local graph readiness score (0-100), band, per-dimension breakdown, and plain-language missing evidence. Readiness signal, not a proof of test lift.

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable interpretive framing (a signal, not proof) and discloses the return contents, but says nothing about prerequisites such as whether the graph must first be built via orangepro_update_graph.

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, no filler, and the core output contents are front-loaded before the caveat. Every clause carries 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?

With no output schema, the description usefully enumerates the return values and the interpretive caveat. Slight gap: it doesn't mention any preconditions (e.g., needing an analyzed/built graph) or the local-only scope implications for an agent deciding timing.

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?

Single workspace parameter with 100% schema description coverage, so the schema already documents the default-to-current-directory behavior. The description adds no further meaning beyond the schema, which is the expected baseline here.

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/resource ('Return the local graph readiness score') and enumerates exactly what comes back: 0-100 score, band, per-dimension breakdown, and missing evidence. This is clearly distinguishable from siblings like orangepro_prove or orangepro_status.

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?

'Readiness signal, not a proof of test lift' implicitly steers the agent away from using this as a proof tool (i.e., toward orangepro_prove), giving real selection context. It doesn't explicitly say when in a workflow to call it or name the alternative tool, so it falls short of the top score.

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

orangepro_proveRun dynamic targeted proofA

Run the dynamic targeted-proof oracle for a CodeSymbol and append a metadata-only ledger certificate. Public Proven closes only when baseline green plus a valid sentinel mutation of the credited symbol fails the same test at an assertion. Static record_run is diagnostics only.

NameRequiredDescriptionDefault
methodNoOptional consistency check. If provided, must match the member derived from target_symbol.
run_idNoOptional caller-supplied run id. Defaults to a local monotonic id.
runnerNoTest runner override. Default auto.
sourceNoSource checkout containing the test and target files. Defaults to workspace.
test_envNoExplicit non-secret KEY=value env entries for the test run.
test_runNoGo: fully-anchored test name for `go test -run`, e.g. '^TestCompute$' (required for Go targets). Java: 'TestClass#testMethod', e.g. 'CalculatorTest#addsTwoNumbers' (required for Java targets).
target_idNoOptional graph target id that must resolve to exactly one hard-linked CodeSymbol.
test_pathNoTS/JS: repo-relative test file to run (required for TS/JS targets).
workspaceNoLocal workspace root. Defaults to the current directory.
timeout_msNoPer baseline/mutant test timeout.
jest_configNoRepo-relative Jest config path.
replacementNoTS/JS: inert sentinel body, e.g. 'return null;' or 'return {"ok":false};'. Must be JSON-only per the oracle (required for TS/JS targets). Go derives its own sentinel.
target_fileNoOptional consistency check. If provided, must match the file derived from target_symbol.
target_symbolNoExact CodeSymbol external id, e.g. sym:src/service.ts#OrderService.createOrder. Preferred.
vitest_configNoRepo-relative Vitest config path.
replacement_modeNoSentinel wrapping mode. Default return-json.
link_node_modulesNoTrusted-repo speed mode: symlink node_modules into temp copies.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context beyond those hints: it appends a metadata-only ledger certificate, and it specifies the success condition involving baseline green plus a sentinel mutation failing at an assertion. It does not describe response shape or failure modes in detail.

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 dense sentences and is reasonably front-loaded with the core action. Every sentence contributes to purpose, success condition, or sibling contrast, though the jargon-heavy phrasing could be clearer for an agent.

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 17-parameter tool with no output schema, the description explains the conceptual proof procedure and the ledger-certificate side effect. However, it does not explain what the tool returns, how failures are reported, or which runner-specific inputs are required, leaving important invocation context to the schema alone.

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

Parameters3/5

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

Schema description coverage is 100%, so all 17 parameters are already documented in the input schema. The description mentions the CodeSymbol target concept but does not add syntax, format, or per-runner parameter guidance beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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

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: running the dynamic targeted-proof oracle for a CodeSymbol and appending a metadata-only ledger certificate. It distinguishes itself from the sibling orangepro_record_run by labeling that tool as diagnostics only. The domain jargon is dense but specific, not tautological.

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 this tool is appropriate by explaining that Public Proven requires a baseline green plus a valid sentinel mutation, and it contrasts static record_run as diagnostics only. However, it does not explicitly say when to use this versus orangepro_prove_loop or other verification-related siblings, and it gives no explicit exclusions.

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

orangepro_prove_loopSetup, run dynamic proof, refresh reportA

Product wrapper around orangepro_prove: run trusted-local setup_commands in the source checkout, then the UNCHANGED dynamic targeted-proof oracle, then refresh the behavior report. Setup is non-secret repo prep only (build/install/shim); a setup failure returns unrunnable, does not run the oracle, and leaves the ledger untouched (never Proven). Public Proven still closes only through the unchanged certificate.

NameRequiredDescriptionDefault
methodNoOptional consistency check. If provided, must match the member derived from target_symbol.
run_idNoOptional caller-supplied run id. Defaults to a local monotonic id.
runnerNoTest runner override. Default auto.
sourceNoSource checkout containing the test and target files. Setup runs here. Defaults to workspace.
test_envNoExplicit non-secret KEY=value env entries for the test run.
test_runNoGo: fully-anchored test name for `go test -run`, e.g. '^TestCompute$' (required for Go targets). Java: 'TestClass#testMethod', e.g. 'CalculatorTest#addsTwoNumbers' (required for Java targets).
target_idNoOptional graph target id that must resolve to exactly one hard-linked CodeSymbol.
test_pathNoTS/JS: repo-relative test file to run (required for TS/JS targets).
workspaceNoLocal workspace root. Defaults to the current directory.
timeout_msNoPer baseline/mutant test timeout.
jest_configNoRepo-relative Jest config path.
replacementNoTS/JS: inert sentinel body, e.g. 'return null;' or 'return {"ok":false};'. Must be JSON-only per the oracle (required for TS/JS targets). Go derives its own sentinel.
target_fileNoOptional consistency check. If provided, must match the file derived from target_symbol.
target_symbolNoExact CodeSymbol external id, e.g. sym:src/service.ts#OrderService.createOrder. Preferred.
vitest_configNoRepo-relative Vitest config path.
setup_commandsNoTrusted-local repo prep run in the source checkout before the oracle. Non-secret only (build/install/shim). First non-zero exit returns unrunnable.
replacement_modeNoSentinel wrapping mode. Default return-json.
setup_timeout_msNoDefault per-setup-command timeout (ms). Default 30000.
link_node_modulesNoTrusted-repo speed mode: symlink node_modules into temp copies.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-readonly, open-world, non-idempotent, and non-destructive behavior. The description adds important semantics: setup commands are non-secret repo prep only, setup failure returns unrunnable and skips the oracle while leaving the ledger untouched, and Proven status still requires the unchanged certificate. It does not cover permissions, rate limits, or every mutation effect.

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

Conciseness5/5

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

Three dense sentences are front-loaded with the workflow, safety constraint, and failure behavior. There is no filler, and every sentence carries useful information for invoking the tool correctly.

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

Completeness4/5

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

The description explains the workflow and key failure states, and the schema fully documents all 19 parameters. Since there is no output schema, normal success return details and report-refresh output shape are not fully described, but the critical safety and proof semantics are 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 100%, and the schema already explains test_path, test_run, replacement, setup_commands, and the other parameters in detail. The description reinforces setup_commands semantics but adds little parameter meaning beyond what the schema provides.

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

Purpose5/5

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

It names the specific workflow sequence: setup_commands in the source checkout, then the unchanged dynamic targeted-proof oracle, then refresh the behavior report. It also explicitly identifies itself as a wrapper around orangepro_prove, making it distinguishable from that sibling.

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 use case is clear: this tool is for when trusted-local repo prep is needed before running the proof oracle and refreshing the report. It names orangepro_prove as the underlying alternative but does not explicitly state when to call that sibling directly instead of this wrapper.

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

orangepro_record_runRecord gap-fill outcomeA

Record an agent test-writing attempt as static diagnostics. When test_path is provided for TS/JS, OrangePro first tries scoped deterministic re-prove; otherwise it re-analyzes the repo. Static hard COVERS edges render as Associated signal; public Proven requires orangepro_prove.

NameRequiredDescriptionDefault
modelNoModel name used by the agent/generator, if any.
run_idNoOptional caller-supplied run id. Defaults to a local monotonic id.
sourceNoSource checkout to re-analyze. Defaults to workspace.
vacuousNoWhether the agent judged the test vacuous/non-assertive. Advisory only.
providerNoModel provider used by the agent/generator, if any.
target_idNoOptional graph target id that must resolve to exactly one hard-linked CodeSymbol.
test_pathNoWorkspace-relative test file the agent just wrote. Enables scoped deterministic re-prove for TS/JS.
workspaceNoLocal workspace root. Defaults to the current directory.
agent_passNoWhether the agent-reported test command passed. Advisory only.
evidence_idsNoGenerated-test/evidence ids tied to this attempt. Metadata only.
target_symbolNoExact CodeSymbol external id, e.g. sym:svc/add.go#Add. Preferred.
prompt_versionNoPrompt or workflow version used, if any.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish that this is non-read-only, non-idempotent, and non-destructive. The description adds meaningful behavior beyond that: with test_path for TS/JS it tries scoped deterministic re-prove, otherwise it re-analyzes the repo, and it explains how static COVERS edges render as Associated signal. It does not cover auth, failure modes, or return format, but it is substantially more informative than the 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.

Conciseness4/5

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

The description is short and front-loads the core action before explaining conditional behavior. It is dense but not repetitive; the main cost is that some terminology is opaque rather than verbose.

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 12-parameter, non-idempotent recording tool with no output schema, the description explains the core recording behavior and one alternative path but omits what the recorded result looks like and how it relates to the broader workflow. It is minimally adequate given the rich schema descriptions, but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so parameter meaning is already well documented. The description adds some context for test_path by explaining the scoped deterministic re-prove path, but this largely repeats the schema description and does not clarify the roles of the other eleven parameters.

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 gives a specific verb and resource: recording an agent test-writing attempt as static diagnostics. It also distinguishes this from orangepro_prove by stating that public Proven requires that separate tool. The domain jargon ('static hard COVERS edges') keeps it from being fully transparent, but an expert can identify the operation.

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

Usage Guidelines3/5

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

Usage is implied by 'Record an agent test-writing attempt', but there is no explicit guidance on when to use this versus siblings such as orangepro_generate_tests, orangepro_find_test_gaps, or orangepro_prove_loop. The only routing guidance is the note that public Proven requires orangepro_prove.

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

orangepro_rtmDeterministic traceability matrixA
Idempotent

Write and return a deterministic Requirements Traceability Matrix. Status comes only from the local graph and gap-fill ledger: Proven, Runtime-covered, Associated signal, No integration signal, Reproven, or Generated-unverifiable. No LLM calls.

NameRequiredDescriptionDefault
limitNoOptional max rows to emit. Markdown defaults to 500 rows; JSON/CSV are uncapped unless set.
formatNoOutput format. Default md.
statusNoOptional status filter, e.g. ['no-link','runtime','associated'].
base_refNoOptional PR/diff scope. Restricts rows to behaviors touched vs this ref.
workspaceNoLocal workspace root. Defaults to the current directory.
output_pathNoOutput path. Default .orangepro/rtm.<format>.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate this is not read-only, is idempotent, and is not destructive; the description aligns by saying it writes and returns a matrix. It adds meaningful behavioral context by specifying that statuses come only from the local graph and gap-fill ledger and that no LLM calls occur, though it does not discuss file overwrite behavior or permissions.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action, and avoids repetition. The status enumeration is compact and relevant.

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?

It explains the tool's purpose and status provenance, but with no output schema it does not fully describe the returned matrix structure or how writing to output_path interacts with the return value. The six optional parameters are documented in the schema, so the main missing context is output and sibling-routing behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description does not clarify limit, format, workspace, output_path, or base_ref, and its status labels do not exactly match the status-filter examples in the schema, potentially creating some ambiguity.

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: 'Write and return a deterministic Requirements Traceability Matrix.' It distinguishes the tool as deterministic and non-LLM, but does not explicitly contrast it with siblings such as orangepro_export_evidence_pack or orangepro_stats.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'Write and return a deterministic Requirements Traceability Matrix' and the 'No LLM calls' constraint. However, there is no explicit guidance on when to choose this tool over related reporting or export siblings, and no exclusions are stated.

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

orangepro_startStart OrangeProA
Idempotent

One-command local setup for a repo or PR: analyze sources, auto-apply weak AI candidate links and candidate flows when a real BYOK provider is configured, write behavior-coverage.html (detailed report), short_behavior-coverage.html (summary), tests.csv + rtm.md, summarize changed/gap targets, and return agent next actions. When nothing changed since the last run it returns at once with unchanged_since and reuses the reports (fresh=true forces a full run). AI lanes stay separate and never affect Proven coverage.

NameRequiredDescriptionDefault
freshNoRun in full even when nothing changed since the last run. By default an unchanged repository returns at once with unchanged_since and the reports of the last run.
modelNoModel name override.
no_aiNoDisable automatic AI weak-link and candidate-flow passes even if a provider key is configured.
ai_allNoRun AI weak-linking over all deterministic behavior nodes instead of gaps-only.
sourceNoSource path to analyze. Defaults to workspace.
base_refNoOptional PR/diff base ref. Default auto-detects main/master when possible.
providerNoBYOK provider override for the AI passes.
workspaceNoLocal workspace root. Defaults to the current directory.
no_ai_flowsNoDisable automatic AI candidate-flow discovery while keeping weak AI links enabled.
prompt_versionNoOpt-in generation strategy for the auto-prove generation lane. Default v2/deterministic; v5 uses batched two-phase generation. The prove/mint gate is unchanged either way.
include_markdownNoEnrich requirements-like Markdown docs. Default true.
generate_coverageNoRun safe local coverage generation before analyze where supported. Default false.
coverage_timeout_msNoPer-command coverage-generation timeout.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare it not read-only, open-world, idempotent, and non-destructive; the description adds real context beyond that: it writes specific files, reuses prior reports on no-change runs, and explains that AI lanes never affect Proven coverage. It stops short of stating permissions/rate-limit or BYOK failure 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?

Two sentences, purpose front-loaded, no filler. However the first sentence is a dense run-on list of six-plus artifacts and behaviors that is harder to scan than it needs to be for such a complex 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 13-parameter tool with no output schema, the description does cover the key behavioral contract: what files are written, the no-change short-circuit, and that 'agent next actions' are returned. Return value details (shapes of the next-actions payload) remain unspecified, which is a minor gap given the absence of an output schema.

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

Parameters3/5

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

Schema coverage is 100%, so every one of the 13 parameters is already documented in structured fields. The description restates the fresh/unchanged_since behavior and the AI-lane separation but adds little parameter-level meaning the schema doesn't already carry, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('One-command local setup for a repo or PR') and enumerates the concrete artifacts it produces (behavior-coverage.html, tests.csv, rtm.md). It's clear what it does, but it never names which sibling it replaces or how it relates to orangepro_analyze_sources or orangepro_generate_tests, which it appears to subsume.

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?

Useful guidance is given for one path only: unchanged repos short-circuit unless fresh=true forces a full run. There is no explicit statement of when to reach for this umbrella tool versus the granular siblings (analyze_sources, prove, ai_links). Usage is implied rather than directed.

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

orangepro_statsGap-fill ledger statsB
Read-only

Summarize the local gap-fill ledger: attempted, dynamic-reproven, unproven, legacy static-associated, generated-but-unverifiable, and kept rate. Metadata-only.

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.

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 and destructiveHint=false, so safety is covered. The description does add real context beyond them: 'local' (reads a workspace-local ledger, no network), 'Metadata-only' (does not parse source bodies, so it is cheap). It says nothing about behavior on an empty/absent ledger or what the kept rate is computed against, which is the practical gap.

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?

One sentence, front-loaded with verb+resource, then the metric list which is dense but each item is the actual return content. No filler. The metric names are jargon-heavy but that mirrors the domain vocabulary used by siblings.

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?

There is no output schema, so enumerating the reported metrics in the description is the right compensating move and it is done. Missing only the edge cases (empty ledger, zero-denominator for the rate) and a pointer to the sibling that lists the underlying gaps individually.

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?

A single optional parameter with 100% schema description coverage, so the schema already explains that 'workspace' defaults to the current directory. The description adds no further meaning, such as how the ledger is located relative to the workspace root. Baseline 3 applies because the schema carries this burden.

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

Purpose4/5

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

States a specific verb (Summarize) and resource (local gap-fill ledger) and enumerates the exact metrics returned: attempted, dynamic-reproven, unproven, legacy static-associated, generated-but-unverifiable, kept rate. This separates it from siblings like orangepro_find_test_gaps and orangepro_rtm. It stops short of an explicit contrast with those siblings, so 5 is not warranted.

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 statement of when to call this versus orangepro_find_test_gaps, orangepro_status, or orangepro_rtm, all of which an agent could plausibly pick for gap reporting. Usage is only implied by the word 'Summarize' and by the metric list; no exclusions or prerequisites are given.

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

orangepro_statusLocal workspace statusA
Read-only

Show local workspace state without generating anything: whether the graph is fresh/stale/missing, source mix, score, and privacy settings (always local, no upload).

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.

TDQS

A3.8/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 safety profile is covered. The description adds genuinely new behavioral context: it performs no generation, operates entirely locally, and never uploads data, which matters for privacy-sensitive users. It stops short of describing cost or latency, but it is well above the annotation baseline.

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 with the verb and subject front-loaded, followed by a compact colon-delimited list of what is reported. No filler, no redundancy, and the most important scope qualifier ("without generating anything") appears before the detail.

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

Completeness4/5

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

With no output schema, the description usefully serves as a stand-in by enumerating the reported signals (freshness, source mix, score, privacy settings). For a single-optional-parameter read-only tool with annotations, that is nearly sufficient; only the boundary against the other diagnostic siblings is left unstated.

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?

There is one optional parameter with 100% schema description coverage ("Local workspace root. Defaults to the current directory"). The description never mentions the workspace argument, so it adds nothing beyond the schema, which puts it at the baseline of 3 for fully documented parameters.

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

Purpose4/5

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

States a specific verb ("Show") and resource ("local workspace state") and enumerates what that state includes: freshness (fresh/stale/missing), source mix, score, privacy settings. The phrase "without generating anything" separates it from generation siblings like orangepro_start or orangepro_update_graph. It does not, however, distinguish itself from adjacent read-only siblings such as orangepro_doctor, orangepro_stats, or orangepro_graph_score, so it falls short of 5.

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?

"Without generating anything" implies the usage context (a pre-flight/read-only check before generation), but usage is only implied. No explicit when-to-use statement and no alternatives named, even though orangepro_doctor, orangepro_graph_score and orangepro_stats plausibly overlap with the reported fields.

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

orangepro_update_graphIncrementally update graphA
Idempotent

Refresh the local graph from changed files. Incremental and non-destructive by default — preserves evidence and marks affected generated tests stale.

NameRequiredDescriptionDefault
workspaceNoLocal workspace root. Defaults to the current directory.
force_full_rebuildNoForce a full rebuild instead of an incremental update.

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses real side effects: evidence is preserved and affected generated tests are marked stale. That is genuinely useful context that the annotations alone would not convey.

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

Conciseness5/5

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

Two compact sentences with zero filler; the core action comes first and the side-effect caveat follows 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?

For a two-optional-parameter mutation tool with no output schema, the description covers action, default mode, and side effects. It leaves open whether a prior graph must exist and what the caller gets back, but the essentials are 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 coverage is 100%, so both parameters are already documented. The description only echoes the default behavior ("incremental and non-destructive by default") without adding format or interaction details beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

"Refresh the local graph from changed files" gives a specific verb (refresh) and resource (local graph) with scope (changed files only). It is clearly distinct from analyze_sources or graph_score, though it never names a sibling explicitly.

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 phrase "from changed files" implies this is the post-edit refresh step, but no explicit when-to-use guidance, prerequisites, or alternatives (e.g., when to prefer a full rebuild or run start first) are stated.

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. 18 tool updates
    • Changedorangepro_ai_flows1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_ai_links4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_behaviors / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_prompt_tokens / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / symbols_per_behavior / maximum
        Added value: +9007199254740991
    • Changedorangepro_analyze_sources1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_changed_impact1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_doctor1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_explain_test1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_export_evidence_pack1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_find_test_gaps1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_generate_tests1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_graph_score1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_prove1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_prove_loop3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / setup_commands / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / setup_commands / items / properties / timeout_ms / maximum
        Added value: +9007199254740991
    • Changedorangepro_record_run1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_rtm1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_stats1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedorangepro_update_graph1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 33 tool updatesv0.2.59
    • Removedanalyze_pr_risk
    • Removedanalyze_release_readiness
    • Removedbuild_regression_pack
    • Removedconvert_bug_to_tests
    • Removedexplain_quality_risk
    • Removedgenerate_missing_coverage
    • Removedgenerate_test_scripts
    • Removedget_coverage_gaps
    • Addedorangepro_ai_flows
    • Addedorangepro_ai_links
    • Addedorangepro_analyze_sources
    • Addedorangepro_changed_impact
    • Addedorangepro_doctor
    • Addedorangepro_explain_test
    • Addedorangepro_export_evidence_pack
    • Addedorangepro_find_test_gaps
    • Addedorangepro_generate_tests
    • Removedorangepro_get_agent
    • Removedorangepro_get_agent_health
    • Removedorangepro_get_agent_logs
    • Addedorangepro_graph_score
    • Removedorangepro_list_agent_runs
    • Removedorangepro_list_agents
    • Addedorangepro_prove
    • Addedorangepro_prove_loop
    • Addedorangepro_record_run
    • Removedorangepro_resolve_story
    • Addedorangepro_rtm
    • Removedorangepro_run_agent
    • Addedorangepro_start
    • Addedorangepro_stats
    • Addedorangepro_status
    • Addedorangepro_update_graph
  3. 15 tool updatesv0.2.0
    • First observedanalyze_pr_risk
    • First observedanalyze_release_readiness
    • First observedbuild_regression_pack
    • First observedconvert_bug_to_tests
    • First observedexplain_quality_risk
    • First observedgenerate_missing_coverage
    • First observedgenerate_test_scripts
    • First observedget_coverage_gaps
    • First observedorangepro_get_agent
    • First observedorangepro_get_agent_health
    • First observedorangepro_get_agent_logs
    • First observedorangepro_list_agent_runs
    • First observedorangepro_list_agents
    • First observedorangepro_resolve_story
    • First observedorangepro_run_agent

TDQS

A3.7/5.0

Scored across 18 tools

Disambiguation3/5

Most tools target distinct operations, but there is real overlap: orangepro_start orchestrates much of what analyze_sources, find_test_gaps, and rtm do individually; orangepro_analyze_sources and orangepro_update_graph both (re)build the graph; orangepro_status and orangepro_graph_score both surface score/state; and prove vs prove_loop (explicitly a 'wrapper') can confuse selection. Descriptions do a good job disambiguating (e.g., changed_impact explicitly redirects baseline work to find_test_gaps), which keeps this from scoring lower.

Naming Consistency4/5

All 18 tools use snake_case with a uniform 'orangepro_' prefix, which is strongly consistent. However, the naming convention is mixed: some are verb_noun (find_test_gaps, generate_tests, update_graph, record_run) while others are bare nouns or noun phrases (status, doctor, stats, rtm, graph_score, changed_impact), so the pattern is not predictably verb-first throughout.

Tool Count4/5

18 tools is on the heavy side but justified by a genuinely broad domain (graph analysis, gap detection, test generation, dynamic proof, AI lanes, reporting, export). Most tools earn their place, though a few (start vs analyze_sources, prove vs prove_loop, status vs graph_score) could arguably be consolidated, pushing it slightly past the ideal 3-15 range.

Completeness4/5

Coverage is strong across the full lifecycle: setup/analysis (start, analyze_sources, update_graph, status, doctor, graph_score), gaps (find_test_gaps), generation (generate_tests, explain_test), proof (prove, prove_loop, record_run), ledger/reporting (stats, rtm), AI lanes (ai_links, ai_flows), diff/PR (changed_impact), and export (export_evidence_pack). Minor gaps exist—no config/privacy settings tool despite status reporting privacy settings, and no standalone report-regeneration or ledger-cleanup/reset—but these are workaroundable.

Maintenance

ActivityActive
ResponsivenessLimited data

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    AI-powered characterization test generator that reads Python functions or class methods, synthesizes inputs, captures behavior in a sandbox, and emits pytest files to lock legacy code behavior for safe refactoring.
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding agents to analyze codebase behavior through entrypoints, call paths, and tests, providing impact analysis and context packs for code changes.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Audits a module against its test suite and reports the cases the tests are structurally unable to see, then proves each gap with a real failing test rather than a warning. Covers Python, TypeScript, JavaScript, Java, Rust and Go.
    4
    3
    Apache 2.0