30.0 / 30
What changed in the harness
Selection accuracy 95→93, token cost down 7%, unconfirmed writes 100%→100%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
26.3 / 30
03Economics
18.1 / 20
04Discoverability
12.6 / 20
Highest-impact fix
Estimated gain +7 pointsMake target tools discoverable on the first call
Clarify tool names, decision boundaries, and required argument schemas so an agent can choose and construct the target call without exploratory steps.
Description evidence
Defects and rewrites.
5 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
name_project |
params_unexplained no_return_description |
Two-phase naming engine. Phase 1: call without candidates to receive generation instructions for your model, which you then use to generate candidate names (max 50). Phase 2: call again with candidates[] to receive anti-slop scoring, ranking, and live availability checks (domains, socials, npm). Returns the phase-appropriate output: generation instructions in phase 1, or a scored/ranked candidate list with availability results in phase 2. Modes: brief (name the project described in brief), auto (analyze the current workspace via project_path), from_name (find domains/variants for an existing name), from_domain (fit a found domain to a project). lanes: optional named naming strategies to guide generation. targets: availability-check targets (tlds, platforms); empty means pure naming with no availability checks. constraints: limits such as max_length and must_include. |
suggest_domains_smart |
no_return_description |
AI-powered domain name suggestion engine. Generate creative, brandable domain names from keywords or natural-language business descriptions, combining a fine-tuned Qwen 7B-DPO model with a semantic/fallback engine. Handles natural-language queries, auto-detects industry, blends words into portmanteaus, applies modern naming patterns (ly, ify, io, hub), filters premium domains by default, and verifies availability via Porkbun/RDAP. Returns a ranked list of available domain suggestions (premium excluded unless include_premium is true) with their availability status. Examples: suggest_domains_smart('ai customer service') returns AI-themed suggestions; suggest_domains_smart('organic coffee', industry='food') returns food-focused names; suggest_domains_smart('vibecoding', style='short') returns minimal-length names. |
analyze_project |
no_return_description |
Analyze a local project or GitHub repository to extract context for domain suggestions. Scans project manifest files (package.json, pyproject.toml, Cargo.toml, go.mod) and README files to understand the project, optionally scanning source files for keywords when include_source_files is true. Returns the extracted project context (name, description, keywords, industry, repository_url) and, when suggest_domains is true, a ranked list of domain suggestions respecting tld, max_suggestions, and style. |
hunt_domains |
no_return_description |
Find valuable domains for investment opportunities. Scans Sedo auctions, generates pattern-based candidates (short, dictionary, brandable, acronym, numeric), and calculates investment scores from length, TLD value, keyword matches, pronounceability, and aftermarket price. Returns a ranked list of domain candidates with their investment scores and details, including Sedo auction results when include_aftermarket is true, filtered to those meeting score_threshold and capped at max_results. |
expiring_domains |
no_return_description |
Find domains that are about to expire and may become available soon. Monitors the federated negative cache for domains approaching their expiration date; requires NEGATIVE_CACHE_URL to be configured. Returns a list of domains expiring within the given days window (default 30), optionally filtered by tlds and keywords, up to limit results. |
Selection evidence
Confusable tool pairs.
5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
suggest_domains |
suggest_domains_smart |
high | Near-identical names and overlapping purpose: both take a seed (base_name vs query) and return available domain suggestions. A task like 'suggest domains for vibecoding' or 'suggest domains for my coffee shop' is genuinely ambiguous between variation-based generation and AI creative naming. |
name_project |
analyze_project |
medium | Both operate on a project and produce names/domains. A task like 'analyze my project at /path and come up with a domain for it' could plausibly route to analyze_project (scans path with suggest_domains=true) or name_project (auto/from_name modes with availability checks). |
search_domain |
bulk_search |
medium | Both check availability; only the shape differs (one name across TLDs vs many names in one TLD). A task phrased as 'search these domains for availability' or 'check domain availability for multiple domains' is ambiguous without reading the input schemas closely. |
search_domain |
suggest_domains |
medium | Both are availability-driven domain tools taking a base name. A task like 'find available domains for myapp' could hit search_domain (check the name) or suggest_domains (generate available variations); the shared availability focus over the 'domain' token creates real ambiguity. |
hunt_domains |
expiring_domains |
low | Both target domain investors and are phrased as 'find domains' tasks. A vague task like 'find domains that are about to become available to buy' could plausibly point to either expiring domains or hunted investment candidates, though descriptions and examples are otherwise fairly distinct. |
Compare the field