0.0 / 30
What changed in the harness
Selection accuracy 100→98, token cost up 6%, unconfirmed writes 0%→0%.
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
25.9 / 30
03Economics
19.5 / 20
04Discoverability
8.8 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
10 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 |
|---|---|---|
check_setup |
no_return_description |
ALWAYS call before any other tool. Returns your license tier, which ad platforms (Meta/TikTok) are connected, and the capabilities available on your plan (Scout/Operator/Commander/Agency), so you know which tools you can use. |
create_meta_campaign |
no_return_description |
Create a complete Meta (Facebook/Instagram) ad campaign in one call — campaign + ad set with targeting + creative + ad — and return the new campaign_id. The campaign is created in PAUSED state; call enable_meta_campaign to activate it. Minimum budget $1/day. Requires Scout plan or higher. |
enable_meta_campaign |
no_return_description |
Activate a paused Meta campaign so it starts spending, and return the campaign's updated status (ACTIVE). Use campaign_id from create_meta_campaign or list_meta_campaigns. Requires Scout plan or higher. |
pause_meta_campaign |
no_return_description |
Pause a live Meta campaign to stop all spending immediately, and return the campaign's updated status (PAUSED). Campaign and settings are preserved — use enable_meta_campaign to resume. Requires Scout plan or higher. |
update_meta_campaign_budget |
no_return_description |
Change the daily budget of a Meta campaign, and return the campaign's updated daily budget. Takes effect immediately. Increase to scale a winning campaign, decrease to throttle spend. Minimum $1/day. Requires Scout plan or higher. |
delete_meta_campaign |
no_return_description |
Permanently delete a Meta campaign and all its ad sets and ads, and return confirmation of the deletion. Cannot be undone. Use pause_meta_campaign to stop spending temporarily. Requires Scout plan or higher. |
create_tiktok_campaign |
no_return_description |
Create a complete TikTok ad campaign in one call — campaign + ad group with targeting + ad — and return the new campaign_id. Created in DISABLE state; call enable_tiktok_campaign to activate it. TikTok minimum budget is $20/day. Requires Operator plan or higher ($69/mo). |
enable_tiktok_campaign |
no_return_description |
Activate a disabled TikTok campaign so it starts running, and return the campaign's updated status. Requires Operator plan or higher ($69/mo). |
pause_tiktok_campaign |
no_return_description |
Pause a running TikTok campaign to stop all spending, and return the campaign's updated status. Settings are preserved — use enable_tiktok_campaign to resume. Requires Operator plan or higher ($69/mo). |
update_tiktok_campaign_budget |
no_return_description |
Change the daily budget of a TikTok campaign, and return the campaign's updated budget. TikTok minimum is $20/day. Requires Operator plan or higher ($69/mo). |
Selection evidence
Confusable tool pairs.
6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_meta_campaign_stats |
get_tiktok_campaign_stats |
medium | A task like 'check how my campaign performed last week' omits the platform. Both tools are parallel stats endpoints with identical metric shapes (impressions, clicks, spend, CTR, conversions), and a campaign ID alone gives no platform hint, so an agent may pick the wrong variant. |
update_meta_campaign_budget |
update_tiktok_campaign_budget |
medium | A task like 'double the daily budget on my best campaign' does not name the platform. Both tools change a daily budget and differ only in minimum spend ($1 vs $20) and parameter naming (daily_budget_usd vs budget_usd), making wrong-platform selection plausible. |
list_meta_campaigns |
list_tiktok_campaigns |
medium | A task like 'show me all my campaigns' gives no platform. Both tools list campaigns with ID, name, status, objective, and budget, so without platform context the agent cannot disambiguate which account to query. |
create_meta_campaign |
create_tiktok_campaign |
medium | A task like 'create a campaign for my spring sale' is platform-agnostic. Both are one-call create tools (campaign + ad set/group with targeting + creative) with overlapping required fields (name, budget, URL, ad copy), so the agent may create on the wrong platform. |
enable_meta_campaign |
enable_tiktok_campaign |
medium | A task like 'turn my campaign back on' uses the same verb for both platforms. Both tools activate a previously created/paused campaign given only a campaign_id, so a platform-neutral instruction can map to the wrong one. |
pause_meta_campaign |
delete_meta_campaign |
medium | A task like 'shut down my campaign' is ambiguous between a temporary stop and permanent removal. The delete description even warns to use pause to stop spending temporarily, confirming these two destructive-vs-reversible actions are confusable for terse user instructions. |
Compare the field