ZeroWidth
Server Details
Search, write and run work across Compass, Workbench, Caliper, Ledger, Prism and Napkin.
- Status
- Healthy
- Uptime
- 99.8% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 299 tools
With 299 tools across Caliper, Compass, Ledger, Napkin, Prism, Workbench, rooms, routines and workspace admin, many tools intentionally overlap: create vs generate vs draft vs propose, manual vs AI append, and boards vs decks vs docs vs diagrams vs interfaces. The descriptions are unusually detailed and often say 'use this not that', but as a set the boundaries still require careful reading and invite misselection.
Most names are snake_case and product-prefixed (caliper_datasets_create, workbench_flows_schedules_list), so the vocabulary is broadly readable. But conventions drift: get_doc/list_docs/search_docs are verb-first while domain tools are noun-first, several tools lack product prefixes (comments_*, entity_tags_*, research_findings_list), and singular/plural is inconsistent (compass_interview_invite vs compass_interviews_create).
299 tools is far beyond any reasonable single-agent surface; even if each operation is meaningful to one product area, the aggregate set is overwhelming and makes tool selection costly. This is the extreme end of the '50+' mismatch.
Across the major product lines, core CRUD and lifecycle operations are broadly present for pages, flows, datasets, metrics, files, rooms and more. But there are notable gaps: no folder delete, no generic file upload/delete, no member/user lookup, and comments have create/list/resolve but no edit/delete, so some workflows hit dead ends.
Available Tools
299 toolscaliper_datasets_add_itemsAdd items to a Caliper datasetAInspect
Appends items to an existing dataset — use this to grow coverage (new edge cases, scenarios from a completed interview) instead of creating a parallel dataset. Same four shapes as caliper_datasets_create (Q&A, chat, sequence, simulated). Existing items and their ratings are untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to append (1-100). | |
| datasetId | Yes | Id of the dataset to extend. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive write. The description adds real value beyond them: appends are additive, existing items and their ratings are untouched, and the accepted item shapes ('same four shapes as caliper_datasets_create') are named. It doesn't state auth/approval behavior, though the schema's approvalId covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action and its key routing decision front-loaded. Every clause earns its place — the shape reference and the non-destructiveness note both carry information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an append mutation with 4 params and no output schema, the definition covers action, alternatives, additivity, and item shapes. The only gap is what a successful call returns (e.g., new item ids), which the absence of an output schema leaves unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the item-shape fields, datasetId, workspace and approvalId are already fully documented in structured data. The description's 'same four shapes' hint adds orientation but no per-parameter syntax or constraints beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('appends items to an existing dataset') and immediately distinguishes it from the parallel-dataset path (caliper_datasets_create). An agent can tell it apart from siblings like generate_items or update_item 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use rationale ('grow coverage — new edge cases, scenarios from a completed interview') and an implicit alternative via 'instead of creating a parallel dataset'. It does not, however, address other plausible routes such as caliper_datasets_generate_items or update_item, so the routing is not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_createCreate a Caliper datasetAInspect
Creates a dataset of test items — THE FIRST STEP of setting up evaluation for a flow. Four item shapes: Q&A (input + optional expectedOutput, the golden answer); CHAT (messages: the conversation so far as role/content user and assistant messages you write, ending on a user message, + expectedResponse for the next reply; the flow writes only that reply, so every earlier assistant turn stays fixed; THE shape for an agent's conversation, built up by depth: a greeting alone, then two messages, then four, each item testing one more reply with the earlier ones baked in); SEQUENCE (turns: 2-20 scripted user messages the model answers one at a time with its own earlier replies in front of it, + expectedResponse for the final reply, optional expectedBehavior for the whole conversation); SIMULATED (goal + optional persona/disposition/strategy/maxTurns + expectedBehavior; a platform flow plays a person adaptively, Caliper-run evals only; disposition is a preset id like genuine, pressure, confused, impatient, or free text). Use sequences and simulated items for the slow attacks and for real customers with real needs: a model that holds on message one often folds on message ten. Write good inputs from real usage: the Compass pages the flow was built from are the best source of realistic scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Test items (1-100). | |
| title | Yes | Dataset name (2-120 chars). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | What this dataset covers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, openWorld=false, so the safety profile is covered; the description adds real behavioral context beyond them, notably that in CHAT items every assistant message is fixed and the flow writes only the next reply, and that SIMULATED items are Caliper-run evals only. It omits the approval/confirmation flow implied by the approvalId parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose well, but the body is a dense wall of text heavy with capitalized emphasis and restatement of the shape semantics already present in the schema descriptions. Much of the length is informative yet redundant, so it is not tightly economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description never says what a successful create returns (e.g., a dataset id needed for follow-up calls) nor explains the approvalId/needs_confirmation workflow. It is thorough on item shapes but leaves operational gaps for a mutation tool that seeds a downstream workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes beyond the per-field schema blurbs by explaining how parameters interrelate for each shape (messages built up by depth, turns answered one at a time with prior replies in front, disposition presets versus free text). That conceptual framing adds genuine value over the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a dataset of test items') and frames it as 'THE FIRST STEP of setting up evaluation for a flow', which positions it ahead of add_items/generate siblings. It never names an alternative explicitly, so the distinction from caliper_datasets_add_items or caliper_datasets_generate_items is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context on when each item shape applies ('Use sequences and simulated items for the slow attacks and for real customers with real needs') and where to source inputs (Compass pages the flow was built from). It stops short of stating when to use this tool versus the generate/generate_items 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.
caliper_datasets_deleteDelete a Caliper datasetADestructiveInspect
Deletes a dataset. Evals bound to it stop being runnable (their binding shows datasetOk: false), and reviews/specs over its items lose their source — check caliper_evals_list for evals that reference it and say so before proposing. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| datasetId | Yes | Dataset id, from caliper_datasets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is known; the description adds real value by naming the cascade (evals become non-runnable, binding shows datasetOk: false, reviews/specs lose their source) and warning that a needs_confirmation response is possible. It stops short of saying whether deletion is reversible or what the response payload looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loading the action and then the side effects, with the prerequisite check and confirmation caveat in the second half. No filler, though the em-dash clause packs several consequences into one dense sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only three schema-documented params, the description supplies what matters for a destructive tool: cascading effects, a required verification step against a sibling tool, and the possibility of a confirmation round-trip. Reversibility and return shape remain unstated, but those are the only meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters (datasetId, workspace, approvalId) are already documented in the schema. The description only alludes to approvalId via 'needs_confirmation' and adds no syntax or format detail beyond that. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a dataset') and immediately scopes the blast radius to dependent evals and reviews/specs. An agent can distinguish it from caliper_datasets_create, update, and remove_item without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-flight workflow: check caliper_evals_list for referencing evals and surface that before proposing the deletion. It names the alternative tool to consult but offers no when-not-to-use condition (e.g. prefer update/naming for trivial migrations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_generateGenerate a Caliper dataset from a flow (spends credit)AInspect
Creates a NEW dataset of model-written items — Q&A by default, or scripted sequences / simulated people via shape — pass flowId and the generator reads the flow's prompt, mode, and schema to write realistic cases for THAT flow; description adds guidance (or stands alone when there's no flow). Use this when the user wants test cases fast and has none; prefer caliper_datasets_create with hand-written items when real scenarios are already in hand (Compass pages, a transcript). This SPENDS workspace inference credit (one generator call), so it sits behind the approval gate: say so and expect needs_confirmation. Returns the dataset summary; read the items with caliper_datasets_get and tell the user to review them before trusting an eval built on them.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Items to generate, 1-50. Default 10. | |
| shape | No | What each generated item is: `qa` (one input, the default), `sequence` (2-6 scripted user turns the model answers one at a time, with expectedResponse + expectedBehavior), or `simulated` (a person Caliper plays adaptively: goal, persona, disposition, expectedBehavior). outputsMode applies to `qa` only. | |
| title | Yes | Dataset name. | |
| flowId | No | Workbench flow to generate cases for (from workbench_flows_list). Required unless description is given. | |
| presetId | No | Framing preset. Default `blank`; the others bias every item toward that attack class. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | What the target system does / what to cover. Required (≥10 chars) when flowId is omitted; optional guidance otherwise. | |
| disposition | No | With shape `simulated`: how every generated person behaves — a preset id (genuine, pressure, confused, impatient, vague, non-native) or free text. Omit to let the generator vary it from person to person. | |
| outputsMode | No | What each generated item carries beyond the input: `expected` (golden answers — eval-ready, the default), `none` (inputs only — for a spec others fill in), `captured` (sample answers to rate in a review). | |
| expectedStyle | No | With outputsMode `expected`: `verbatim` literal reference answers (default) or `conditions` — what a correct answer must do, when there's no single right wording. | |
| datasetDescription | No | Description stored on the dataset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/destructive/openWorld; the description adds the crucial cost trait ('SPENDS workspace inference credit (one generator call)'), the approval-gate behavior ('expect needs_confirmation'), and the required follow-up read via caliper_datasets_get. These are non-obvious side effects an agent must communicate to the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and credit warning, and every clause carries information. It is fairly dense across multiple em-dash clauses, so a small amount of tightening is possible, but nothing reads as filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-param, no-output-schema mutation with spend, the description covers what it returns ('dataset summary'), the follow-up read, cost, and approval flow — the info an agent needs. Nothing material is missing given the schema carries all parameter detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains the flowId/description contract (description 'stands alone when there's no flow'), the generator's behavior of reading the flow's prompt/mode/schema, and the default shape. It does not add much for the enum params beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a NEW dataset of model-written items') and immediately distinguishes the output variants (Q&A, scripted sequences, simulated people via `shape`). It also names the sibling it is not (caliper_datasets_create) so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('when the user wants test cases fast and has none') and when-not ('prefer caliper_datasets_create with hand-written items when real scenarios are already in hand — Compass pages, a transcript'). It further flags the approval-gate path and the expected needs_confirmation response, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_generate_itemsGenerate more items for a Caliper dataset (spends credit)AInspect
Appends model-written items to an EXISTING dataset, in the style of what's already there (existing items are the few-shot examples; the output shape matches theirs unless overridden). Use to widen coverage when the user says 'more like these' or 'add edge cases'; write them by hand with caliper_datasets_add_items when the scenarios are known. SPENDS workspace inference credit, so it sits behind the approval gate — say so. Existing items and their ratings are untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Items to add, 1-20. Default 5. | |
| shape | No | What each generated item is: `qa` (one input, the default), `sequence` (2-6 scripted user turns the model answers one at a time, with expectedResponse + expectedBehavior), or `simulated` (a person Caliper plays adaptively: goal, persona, disposition, expectedBehavior). outputsMode applies to `qa` only. | |
| datasetId | Yes | Dataset to extend, from caliper_datasets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| description | No | What to bias toward, e.g. 'angry customers', 'ambiguous refund questions'. | |
| disposition | No | With shape `simulated`: how every generated person behaves — a preset id (genuine, pressure, confused, impatient, vague, non-native) or free text. Omit to let the generator vary it from person to person. | |
| outputsMode | No | What each generated item carries beyond the input: `expected` (golden answers — eval-ready, the default), `none` (inputs only — for a spec others fill in), `captured` (sample answers to rate in a review). | |
| anchorItemId | No | An item id (from caliper_datasets_get) the new items should resemble most. | |
| expectedStyle | No | With outputsMode `expected`: `verbatim` literal reference answers (default) or `conditions` — what a correct answer must do, when there's no single right wording. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), it discloses the cost model ('SPENDS workspace inference credit'), the approval gate and the requirement to tell the user, and the safety guarantee that existing items and ratings are untouched. These are material behaviors an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the append-to-existing-dataset behavior, then routing, then cost. Every clause carries information, though the credit/approval sentence is slightly packed. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a ten-parameter mutation tool with no output schema, the description covers behavior, sibling routing, cost, and non-destructiveness. It does not explain what a successful response returns or how approvalId round-trips, but the schema covers the confirmation flow and no output schema exists to explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all ten parameters and their enums; the baseline is 3. The description adds only the inheritance rule ('output shape matches theirs unless overridden') and the few-shot style hint, which lightly supplements rather than meaningfully extends the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('appends model-written items to an EXISTING dataset') plus the mechanism (existing items are the few-shot examples). It explicitly distinguishes itself from the sibling caliper_datasets_add_items, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions ('more like these', 'add edge cases') and names the alternative with the condition that selects it ('write them by hand with caliper_datasets_add_items when the scenarios are known'). When-to-use and when-not are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_getRead a Caliper dataset (items paged)ARead-onlyInspect
One dataset with a page of its items — read this BEFORE editing items (caliper_datasets_update_item needs the item id) and before extending coverage, so you don't add cases that already exist. Items come limit at a time (default 25) from offset; total is the full count. Long fields are cut at ~800 characters with a truncation marker. Get the datasetId from caliper_datasets_list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Items per page, 1-100. Default 25. | |
| offset | No | Items to skip. Default 0. | |
| datasetId | Yes | Dataset id, from caliper_datasets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 genuinely useful behavior beyond that: pagination semantics (limit/offset/total) and, importantly, that long fields are truncated at ~800 characters with a marker, which an agent would otherwise not expect from a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, all front-loaded and each carrying distinct information (ordering rationale, pagination, truncation, id source). Packed but not padded; only minor cost is that several facts are compressed into the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the returned shape: a page of items, the `total` count, and truncation of long fields. Combined with the schema's full parameter coverage, an agent has everything needed to call and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, offset, datasetId and the workspace quirk are already documented at 100% fidelity in the schema. The description restates limit's default and offset semantics without adding format or edge-case detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (one Caliper dataset with a page of its items), immediately distinguishing it from caliper_datasets_list, which returns datasets rather than items. An agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing guidance: read this BEFORE editing items because caliper_datasets_update_item needs the item id, and before extending coverage to avoid adding duplicate cases. It also names caliper_datasets_list as the source of the required datasetId, which is the only prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_listList Caliper datasetsARead-onlyInspect
Lists datasets in the active workspace. Returns summaries (id, name, item count); items are not included.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description still adds real behavioral value by declaring the exact return shape (id, name, item count) and the negative constraint that items are excluded, though it says nothing about pagination or result limits for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; scope comes first and the return-content constraint immediately follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a simple one-optional-parameter read tool, annotations covering safety, and a description that explains the return contents in lieu of an output schema, an agent has enough to call this correctly. Pagination/result-limit behavior for a list endpoint is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'workspace' parameter has 100% schema description coverage, including the personal-token vs workspace-API-key semantics, so the schema carries the burden. The description adds no parameter-level detail beyond the phrase 'active workspace', making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (datasets) scoped to the active workspace, and explicitly declares the return granularity ('summaries... items are not included'). That last clause implicitly separates it from caliper_datasets_get, but no sibling is named, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use for enumerating datasets is clearly implied by 'Lists datasets in the active workspace', but there is no explicit when-to-use guidance and no routing to alternatives such as caliper_datasets_get for full item content or caliper_datasets_create for adding a dataset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_remove_itemRemove one item from a Caliper datasetADestructiveInspect
Drops one item. Ratings and run results keyed to it are orphaned (kept in history, gone from the dataset). A dataset must keep at least one item. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item id, from caliper_datasets_get. | |
| datasetId | Yes | Dataset id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond destructiveHint=true by explaining the exact blast radius: ratings and run results keyed to the item are orphaned, kept in history but removed from the dataset. It also discloses the minimum-item constraint and the possibility of a needs_confirmation response, which the annotations do 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then consequences, then the constraint and confirmation behavior. No filler; every sentence carries signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the key risks (orphaned ratings/run results), the hard constraint (minimum one item), and the confirmation pathway. It could note permission or reversibility details, but the orphan/history distinction already answers the most important agent question.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters (including workspace token rules and approvalId) are already documented in the schema. The description's mention of 'May return needs_confirmation' lightly connects to the approvalId flow but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Drops one item') and scopes it to a single item, which sets it apart from bulk siblings like caliper_datasets_add_items or whole-dataset operations like caliper_datasets_delete. It never names a sibling explicitly, but the singular scope is clear enough for an agent to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition 'A dataset must keep at least one item' is a genuine usage constraint, but the description never states when to prefer this over caliper_datasets_update_item or how it interacts with the removal of multiple items. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_updateRename / re-describe / re-scope a Caliper datasetADestructiveInspect
Changes a dataset's title, description, or visibility. Pass only what changes; items are untouched (use caliper_datasets_add_items / caliper_datasets_update_item / caliper_datasets_remove_item for those). May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New name. | |
| datasetId | Yes | Dataset id, from caliper_datasets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New description; null clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the generic readOnly=false / destructive=true profile; the description adds real behavioral context by disclosing the partial-update contract (untouched fields stay as-is) and the two-phase confirmation flow via 'May return `needs_confirmation`'. It stops short of stating permission requirements, but the schema's workspace field covers the auth nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each load-bearing: scope, partial-update rule plus sibling routing, and the confirmation caveat. No filler and the core mutation is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations covering the safety profile and no output schema, the definition covers scope, update semantics, and the confirmation round-trip. Minor gaps remain around visibility-change side effects (the 'granted afterwards' detail lives only in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description contributes the patch semantics ('pass only what changes') that the schema does not express — the schema documents field meanings, not that omitted fields are preserved. That is a genuine addition rather than a restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Changes a dataset's title, description, or visibility') and immediately scopes it away from item-level operations by naming the siblings that handle those (add_items / update_item / remove_item). An agent can distinguish it from caliper_datasets_update_item without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'pass only what changes; items are untouched' and routes item-related work to three named alternatives. The when-not condition is stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_datasets_update_itemReplace one item in a Caliper datasetADestructiveInspect
Rewrites one item's content, keeping its id (ratings and eval results keyed to it stay attached). The item's KIND can't change — a Q&A item stays Q&A, a chat item stays chat, a sequence stays a sequence — so pass the same shape you read from caliper_datasets_get. Raw items, and chat items captured with tool calls in them, can't be edited from here. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The full replacement item, same four shapes as caliper_datasets_create. | |
| itemId | Yes | Item id, from caliper_datasets_get. | |
| datasetId | Yes | Dataset id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich context beyond the annotations: the id is preserved so ratings and eval results stay attached, the item KIND is immutable across four shapes, certain item types are not editable, and it may return `needs_confirmation` (a real approval flow, tied to the approvalId param). This is materially more than destructiveHint alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core rewrite action, then preservation behavior, then constraints, then the confirmation signal. No filler and nothing redundant with structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-item mutation with a fully described nested schema and no output schema, the description covers what changes, what is preserved, what is forbidden, and the confirmation flow. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: the `item` must be the same shape/kind read back, and the needs_confirmation response explains when to supply approvalId. That ties two parameters to concrete behavior the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — "Rewrites one item's content" — and immediately distinguishes itself from sibling caliper_datasets_update by scoping to a single item while keeping its id. An agent can tell it apart from add_items/remove_item/update without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: read the item first from caliper_datasets_get and pass the same shape, plus two explicit exclusions (raw items and chat items with tool calls can't be edited here). It stops short of naming which sibling to use for the excluded cases, so it's clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_createCreate a Caliper evalAInspect
Binds a dataset + rubric to something under test as a repeatable eval — THE LAST SETUP STEP before scoring. Two targets: a Workbench flow (pass flowId; Caliper runs inference itself, then caliper_evals_run scores it), or 'external' (target: 'external'; the user's own model runs elsewhere and their script submits outputs through the public API, usually from CI — see the docs guide 'Run evals in CI'). For an external eval, hand back the eval id and tell the user to create a workspace API key with the ci_evals preset in their workspace settings; keys can't be minted from here. flowStage 'draft' evals the live draft (pre-publish); 'published' (default) evals the latest published revision at run time, or one pinned with flowRevisionId. Reuse an existing rubric from caliper_rubrics_list when one already scores this job.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Eval name (2-120 chars). | |
| flowId | No | Workbench flow id to evaluate. Required unless target is 'external'. | |
| target | No | 'workbench_flow' (default; needs flowId) or 'external' (the user's own model; outputs arrive through the public API). | |
| rubricId | Yes | Rubric the judge scores with. | |
| datasetId | Yes | Dataset of test items. | |
| flowStage | No | Which stage to run against. Use 'draft' while iterating pre-publish. Default 'published'. | |
| workspace | No | Workspace slug override. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scenarioId | No | Workbench-flow evals: run every item as this scenario (one of the flow's, from workbench_flows_scenarios_list), so the flow's variables hold that person's values. A run can pick another with caliper_evals_run's scenarioId. Without one, variables run empty unless an item sets them. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | ||
| externalLabel | No | External evals only: what produces the outputs, e.g. 'CI' or 'prod pipeline'. Free text, shown on the eval. | |
| flowRevisionId | No | Published-stage evals only: pin to one published revision (id from workbench_flows_revisions_list). Omit to always eval the latest published version at run time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it a non-read-only, non-destructive write. The description adds real behavioral context beyond that: on an external eval the agent must return the eval id and instruct the user to mint a ci_evals API key in workspace settings because keys cannot be created here — a genuine auth prerequisite. It also explains that 'published' resolves the latest revision at run time unless pinned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the two target modes, and the em-dash setup framing is efficient. It is dense but every clause (external key handoff, flowStage semantics, rubric reuse) contributes, though it runs long enough that a couple of clauses could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation with no output schema, the description covers the decisive paths: target selection, stage semantics, and the external-key follow-up. It stops short of describing the approvalId confirmation flow or visibility defaults at the level the schema does, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so the schema carries most parameter meaning and the baseline would be 3. The description still adds interpretation beyond the schema: flowStage draft vs published timing, the scenarioId-at-create vs run-time override relationship, and rubric reuse. This is a modest but real lift over an already well-described schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('binds a dataset + rubric to something under test as a repeatable eval') and positions it as a setup step before scoring, which cleanly distinguishes it from caliper_evals_run and caliper_evals_list. It also names the two supported targets, so the agent knows the shape of what it creates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly branches on target ('workbench_flow' with flowId vs 'external' via public API/CI), states flowStage 'draft' for pre-publish iteration vs 'published' default, and routes to caliper_rubrics_list when a rubric already exists. When/when-not and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_deleteDelete a Caliper evalADestructiveInspect
Deletes an eval and stops its schedule. Run history is kept but no longer reachable from the eval. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| evalId | Yes | Eval id, from caliper_evals_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: the schedule is stopped, run history survives but becomes unreachable, and the call may return needs_confirmation, signalling a two-step approval flow. It stops short of stating irreversibility explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the primary action and immediate side effect, then the data-retention caveat, then the response nuance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the schedule stop, the retention behavior, and the confirmation response. It could still note irreversibility or what happens to runs and references after deletion, but nothing essential for invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so evalId, workspace, and approvalId are already documented in the schema. The description only hints at the approvalId flow via 'needs_confirmation' and adds no formatting or sourcing detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Deletes) and resource (an eval), plus the side effect on its schedule, which cleanly separates it from the sibling delete tools for datasets, rubrics, and flows. An agent can identify the target entity 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the destructive annotation, but the description never says when to delete versus archive or update, nor does it name any alternative tool. The only routing signal is the implicit confirmation flow referenced by 'needs_confirmation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_getRead one Caliper evalARead-onlyInspect
One eval: what it targets (Workbench flow + stage, or external), its dataset and rubric ids, the rubric criteria it scores with (the snapshot taken at creation), schedule + runOnPublish + regression settings, run counts, latest score, and binding health (datasetOk / flowOk false = a run would fail at resolution — say so before proposing caliper_evals_run). Get the evalId from caliper_evals_list or caliper_flow_performance.
| Name | Required | Description | Default |
|---|---|---|---|
| evalId | Yes | Eval id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false. The description goes beyond annotations by decoding the 'binding' health field and warning that false values mean a run would fail at resolution — actionable behavioral context you can't get from the schema. It does not describe rate limits or pagination, but for a bounded single-record read that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense sentence plus a short provenance sentence. The field list is long but each item is informative; no filler. Slightly front-loaded awkwardly because the opening 'One eval:' is terse before the payload, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, 2-parameter tool with no output schema, the description must convey what comes back — and it does enumerate the returned fields (target, dataset/rubric ids, criteria snapshot, schedule, run counts, latest score, binding health). It omits error/not-found behavior and pagination, but covers the essentials an agent needs to interpret and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 evalId and workspace. The description adds sourcing guidance for evalId (from caliper_evals_list or caliper_flow_performance) but no syntax or format details beyond what the schema states. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('One eval') and enumerates exactly what a single eval record contains: target (workbench flow + stage or external), dataset and rubric ids, rubric criteria snapshot, schedule settings, run counts, latest score, and binding health. This distinguishes it clearly from siblings like caliper_evals_list (list) and caliper_evals_run (execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent where to get the evalId (caliper_evals_list or caliper_flow_performance) and prescribes an action ('say so before proposing caliper_evals_run') when binding health is broken. It doesn't explicitly exclude any nearby tool, but the context is strong enough that an agent knows this is a single-item read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_listList Caliper evalsARead-onlyInspect
Lists evals in the active workspace with their target config (which Workbench flow, which dataset/rubric). Use to find the evalId for caliper_evals_run.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that results are scoped to the active workspace and include target config, but says nothing about pagination, result limits, or empty-list behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the most decision-relevant information (what is listed, what it contains) is front-loaded before the routing hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read-only list tool with no output schema, the description covers what is returned and why to call it. Minor gap: no indication of how many evals are returned or whether listing is paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspace parameter is fully documented in the schema, so baseline is 3. The phrase 'active workspace' loosely reinforces the workspace-scoping behavior but adds no syntax or override detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) and resource (evals) with scope (active workspace) and even previews the payload (target config: Workbench flow, dataset/rubric). This makes it distinguishable from siblings like caliper_evals_get without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names a downstream use case ('Use to find the evalId for caliper_evals_run'), which tells the agent when this tool is the right entry point. It stops short of naming an alternative (e.g. caliper_evals_get) or stating when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_runRun a Caliper evalAInspect
Queues a new run of an eval — inference over the dataset, then LLM-judge scoring. THE VERIFY STEP of the improvement loop: after an approved workbench_flows_edit_text, run the eval again and report the score delta vs the previous run. Runs take a while — but you're brought back into THIS conversation automatically with the scores the moment it finishes, so tell the user it's queued and that you'll follow up here; never poll or ask them to check back. Costs workspace LLM budget, so it sits behind the approval gate: may return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Short label for the run, e.g. 'after refund-policy fix'. | |
| evalId | Yes | Eval to run. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| scenarioId | No | Run as this scenario instead of the eval's own (one of the flow's, from workbench_flows_scenarios_list); null runs with none. Omit to use the eval's. Running the same eval as two scenarios compares how the flow does for each person. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses async/long-running behavior with automatic callback into the same conversation, cost against workspace LLM budget, and the approval gate that may return `needs_confirmation`. This is exactly the kind of behavioral context annotations cannot convey, and it is consistent with readOnlyHint=false / destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and pipeline, then workflow role, then async/cost/approval caveats — every sentence is load-bearing. It is dense and relies on emphasis formatting, but there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, asynchronous, cost-incurring tool with no output schema, the description covers what the agent cannot see elsewhere: return behavior (scores and delta, or a needs_confirmation envelope), the approval path, and follow-up expectations. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters (label, evalId, workspace, approvalId, scenarioId) with examples. The description adds only indirect framing — the approvalId is implied by 'approval gate' — but no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queues a new run of an eval') and even describes the internal pipeline — inference over the dataset, then LLM-judge scoring. This clearly distinguishes it from siblings like caliper_evals_runs_get, caliper_evals_runs_cancel, and caliper_evals_runs_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as 'THE VERIFY STEP of the improvement loop' and names the triggering precursor (after an approved workbench_flows_edit_text), plus the goal (report score delta vs previous run). It also gives concrete do/don't guidance for the async case: tell the user it's queued and follow up, never poll. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_runs_cancelStop a running Caliper eval runADestructiveInspect
Stops a run that is still PENDING / RUNNING / SCORING — the brake on a run that's spending more than expected or was started by mistake. The queue stops at once; an item already handed to the flow finishes on its own timeout. The run settles as FAILED with a 'cancelled' reason and keeps the items it completed. A run that already finished returns run_not_live. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run id, from caliper_evals_run or caliper_evals_runs_list. | |
| evalId | Yes | Eval the run belongs to. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/readOnlyHint annotations: the queue halts at once, an in-flight item runs to its own timeout, the run settles as FAILED with a 'cancelled' reason, completed items are retained, and finished runs return run_not_live. It also flags the possible needs_confirmation response, which no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, each carrying distinct information (state scope, motivation, queue behavior, terminal outcome). Well front-loaded, though several clauses are tightly packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explains the terminal state (FAILED/cancelled), retention of completed items, and the two notable return codes (run_not_live, needs_confirmation). An agent has everything needed to call it correctly and anticipate the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so runId, evalId, workspace, and approvalId are already documented. The description lightly connects to approvalId via 'May return needs_confirmation' but adds no format or sourcing detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (stops) and resource (an eval run), and scopes it precisely to runs in PENDING / RUNNING / SCORING. It is clearly distinguishable from siblings like caliper_evals_runs_get or caliper_evals_runs_list without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context ('spending more than expected or was started by mistake') and the precondition that the run must still be live. It does not name an alternative tool, but no competing cancel tool exists in this namespace, so the guidance is functionally complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_runs_getRead one eval run (per-item, per-criterion scores)ARead-onlyInspect
One run: status, overall score, and by default the ten lowest-scoring items with their per-criterion scores and the judge's reasoning (items: all for every item, none for totals only). THE ANSWER to 'why did the score drop' — read this, then name the criterion that slipped and quote the reasoning on the lowest items. Works for runs Caliper ran and for runs submitted from CI (triggeredBy 'ci', usually labeled with a pull request number). Still no polling loops; read it when the user asks.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Which items to include. `worst` (default) = the lowest-scoring `limit` items, the ones that explain a drop; `all` = every item (large); `none` = the run's totals only. | |
| limit | No | How many items for `worst`, default 10. | |
| runId | Yes | Run id, from caliper_evals_runs_list or caliper_evals_run. | |
| evalId | Yes | Eval the run belongs to. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description adds real behavior: the default returns only the ten lowest-scoring items, works for both Caliper-run and CI-submitted runs (triggeredBy 'ci'), and the no-polling rule. This goes meaningfully beyond what the annotations declare.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the return shape before the motivational framing, and each sentence carries information. The emphatic 'THE ANSWER' phrasing is slightly promotional but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description fully compensates by describing the returned fields (status, score, per-criterion scores, judge reasoning) and the item-selection modes. Nothing an agent needs to call and interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter including the items enum and limit default. The description reinforces the items default ('by default the ten lowest-scoring items') but adds no syntax or format detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read/get) and resource (one eval run) and enumerates the payload: status, overall score, per-criterion item scores, judge reasoning. An agent can distinguish it from caliper_evals_runs_list (listing) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering context ('THE ANSWER to why did the score drop', 'read it when the user asks') and a when-not constraint ('Still no polling loops'). It does not name a sibling alternative like caliper_evals_runs_list for the opposite case, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_runs_item_executionRead the flow trace behind one scored itemARead-onlyInspect
What the flow actually DID on one run item: every step in order (what it said, which tools it called with what arguments, what came back) and the final answer, plus status, duration, and cost. Read this when a low score needs explaining beyond the judge's reasoning — a wrong tool call or an empty tool result is usually the cause, and the fix is different from a prompt fix. Pass the run item's id (NOT itemId) from caliper_evals_runs_get. Items whose outputs were supplied from outside (external evals) have no trace and return not_found. Steps are capped for transport; the run page in Caliper has the full record.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run id. | |
| evalId | Yes | Eval the run belongs to. | |
| runItemId | Yes | The run item's `id` from caliper_evals_runs_get (not its dataset itemId). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only safety profile, but the description adds genuinely non-obvious behavior: external-eval items have no trace and return not_found, and steps are truncated for transport while the Caliper run page holds the full record. These caveats go beyond what readOnlyHint/destructiveHint/openWorldHint convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then the when-to-use trigger, then the parameter pitfall, then edge-case caveats. No filler sentences; each one carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing the return shape (ordered steps, tool calls and arguments, tool results, final answer, status, duration, cost) and failure modes (not_found for external items, truncated steps). Nothing needed to call or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value by stressing that `runItemId` must be the run item's `id` and NOT its `itemId`, a classic source of wrong-argument failures. The workspace parameter's default/override semantics are left to the schema, but the critical gotcha is surfaced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — reads the execution trace (every step, tool call, arguments, tool result, final answer, plus status/duration/cost) for one run item. It is clearly distinguishable from caliper_evals_runs_get, which is cited as the source of the id rather than a competitor for this data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger — 'read this when a low score needs explaining beyond the judge's reasoning' — with the diagnostic rationale (wrong tool call or empty tool result). It also tells the agent where to obtain the required id (from caliper_evals_runs_get), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_runs_listList an eval's runs (status + scores)ARead-onlyInspect
Recent runs for one eval, newest first: status (PENDING/RUNNING/SCORING/DONE/FAILED), overall score once DONE, label, and timestamps. THE CHECK-BACK for caliper_evals_run: when the user asks how the run went, read this — cite the run id and score, and compare against the PREVIOUS run's score for the delta. Still don't poll in a loop; check when the user asks or when reporting.
| Name | Required | Description | Default |
|---|---|---|---|
| evalId | Yes | Eval whose runs to list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/no-destructive, so the safety bar is covered. Beyond that the description adds real behavior: newest-first ordering, that a score only appears once the run is DONE, and an anti-polling operating constraint. It does not disclose result limits or pagination, which 'Recent runs' hints at but never defines.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and returned fields are front-loaded, with behavioral guidance following. The capitalized 'THE CHECK-BACK' phrase for emphasis is slightly informal, but every sentence carries usable information and none is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with full annotation coverage but no output schema, the description compensates by describing the returned fields (status, score, label, timestamps) and their lifecycle. An agent has everything needed to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both evalId and workspace are already documented in the schema. The description's 'for one eval' aligns with evalId but adds no format, scope, or defaulting detail beyond what the schema provides. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Recent runs for one eval, newest first') and enumerates the returned fields including the full status lifecycle (PENDING/RUNNING/SCORING/DONE/FAILED). It clearly distinguishes itself from the run-triggering tool by calling itself 'THE CHECK-BACK for caliper_evals_run', though it leaves any contrast with the sibling caliper_evals_runs_get (single-run fetch) implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the selection condition ('when the user asks how the run went, read this') and ties the tool to a specific sibling. It also gives a negative guideline ('don't poll in a loop; check when the user asks or when reporting'), which is exactly the when-not-to-use guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_evals_updateUpdate a Caliper eval (metadata, schedule, alerts)ADestructiveInspect
Changes an eval's title, description, visibility, schedule (interval + time anchor), runOnPublish (queue a run whenever the flow publishes), regressionThreshold (score drop vs the previous run that triggers an alert; null = off), or scenarioId (the scenario runs use). Pass only what changes. The dataset, rubric snapshot, and target are fixed at creation — create a new eval to change those. Scheduled and on-publish runs spend credit on their own, so state that plainly when turning them on. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New name. | |
| evalId | Yes | Eval id, from caliper_evals_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scenarioId | No | Workbench-flow evals: the scenario every run uses unless a run picks another (one of the flow's, from workbench_flows_scenarios_list); null clears it. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New description; null clears it. | |
| runOnPublish | No | Run whenever the targeted flow publishes a version. | |
| scheduleTime | No | Daily/weekly anchor, HH:MM 24-hour in scheduleTimezone. Null = one interval from now. | |
| scheduleInterval | No | Run cadence; null clears the schedule. Each scheduled run spends credit — say so. | |
| scheduleTimezone | No | IANA timezone for scheduleTime, e.g. America/Chicago. | |
| scheduleDayOfWeek | No | Weekly only: 0 = Sunday … 6 = Saturday. | |
| regressionThreshold | No | Score drop vs the previous run that raises an alert, on the 0–1 score scale (0.1 = 10 points); null turns alerts off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true, the description adds rich context beyond annotations: it explains immutable fields, that scheduled/on-publish runs spend credit, that a 'needs_confirmation' response is possible, and the credit-cost implication of enabling schedulers. This goes well beyond what the annotation flags alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the mutable fields, then immutable fields, then a behavioral note. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 13 parameters, no output schema, and annotations indicating destruction. The description covers the update scope, immutability, credit cost, and the needs_confirmation flow, which is nearly complete. It omits a note about the required evalId parameter, but the schema marks it required and describes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 13 parameters in detail. The description reinforces the most important semantics (e.g., regressionThreshold scale, schedule interval meaning) but does not add new parameter-level information beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific verb (changes/updates) and enumerates the exact mutable fields (title, description, visibility, schedule, runOnPublish, regressionThreshold, scenarioId), which is precise. It does not explicitly distinguish itself from caliper_evals_create, though the phrase 'The dataset, rubric snapshot, and target are fixed at creation — create a new eval to change those' implicitly routes to the create sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage guidance: 'Pass only what changes' and delineates immutable fields with an explicit alternative ('create a new eval to change those'). It also states to communicate credit spend when turning on scheduled/on-publish runs. It doesn't distinguish itself from other update-like siblings (e.g., caliper_evals_run), but those are clearly distinct operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_flow_performanceEval performance for a Workbench flowARead-onlyInspect
How a Workbench flow is ACTUALLY doing, with receipts: every Caliper eval targeting the flow, recent runs with scores, the latest run decomposed into per-criterion averages, the score delta vs the previous run, and the worst-scoring items WITH the judge's reasoning. Use this BEFORE claiming a flow works or proposing changes — and cite the runId + scores when you do. The worst items are diagnostic: failures clustered around missing company facts suggest a knowledge gap (consider proposing a Compass interview with the workflow owner) rather than a prompt problem.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Workbench flow id to report on. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, closed-world), so the bar is low, and the description adds substantive context: the exact contents of the report and how to interpret worst-scoring items diagnostically. It does not cover permissions, rate limits, or cost of the underlying eval runs. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and payload, and each of the three sentences carries distinct information (what you get, when to call it, how to read the diagnostics). The capitalized 'ACTUALLY' and 'with receipts' are stylistically chatty for a tool definition, but the paragraph stays compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly carries the burden of explaining return values, which it does thoroughly for a read-only report. It is a bit light on ordering/recency semantics of 'recent runs' and any notion of time windowing, which the schema does not cover either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds no parameter-level detail (no flowId format, no workspace behavior). With the schema fully documenting both params, baseline 3 applies; the description neither compensates nor degrades.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a Workbench flow) and enumerates exactly what the tool reports: every targeting eval, recent runs with scores, per-criterion averages, delta vs previous run, and worst items with judge reasoning. That payload enumeration distinguishes it from raw siblings like caliper_evals_runs_list or caliper_evals_get. It lacks an explicit verb and never names a sibling, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger: use it BEFORE claiming a flow works or proposing changes, and cite runId + scores. It also prescribes a downstream action for clustered failures (propose a Compass interview for knowledge gaps rather than a prompt fix). No when-not condition or named alternative tool is given, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_rubrics_createCreate a Caliper rubricAInspect
Creates the scoring rubric an eval's LLM judge uses — 1-10 criteria, each scored on a numeric scale (default 1-5), judged pass/fail (kind pass_fail), or checked in code with no judge (kind check: contains, not_contains, matches a regex, valid_json, max_chars, equals_expected). Write criteria about the FLOW'S JOB (accuracy to source material, tone, refusal behavior), not generic 'quality'.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Rubric name (2-120 chars). | |
| criteria | Yes | ||
| workspace | No | Workspace slug override. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds domain behavior (the rubric is consumed by an LLM judge or by code checks) but says nothing about what happens on creation — returned id, whether it must be attached to an eval separately, or the approvalId confirmation path mentioned in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler, and the core verb+resource is front-loaded before the enum detail. The parenthetical enumeration of check types is long but each item is load-bearing; the closing style-guide sentence is the only part that leans toward advice rather than definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter create tool with a nested criteria array and no output schema, the description covers the substance of the criteria model well and matches the annotations. It leaves the lifecycle gap — how the created rubric is linked to an eval and what the caller gets back — unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, the description still meaningfully augments the schema: it explains that kind=check runs "in code with no judge" and enumerates the check types, which the schema lists without explanation. It does not add anything for workspace, approvalId, or the top-level description parameter, which carry thin or no schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Creates the scoring rubric") and immediately situates it in the domain ("an eval's LLM judge uses"), which cleanly separates it from sibling read/update/delete rubric tools. The elaboration of the three criterion kinds makes the purpose concrete rather than tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful content guidance ("Write criteria about the FLOW'S JOB ... not generic 'quality'"), which is real how-to-use advice, but never names when to choose this over caliper_rubrics_update, nor states prerequisites. Usage is implied by context (you create a rubric before an eval can judge) rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_rubrics_deleteDelete a Caliper rubricADestructiveInspect
Deletes a rubric. Existing evals keep their snapshot of it and keep running; nothing new can bind to it. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| rubricId | Yes | Rubric id, from caliper_rubrics_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds non-obvious consequences: existing evals retain a snapshot and keep running, while nothing new can bind to the rubric. It also discloses the needs_confirmation response state. It stops short of permissions or irreversibility, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences; the primary action comes first, followed by blast-radius and confirmation flow. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the key things an agent needs: what is deleted, what survives, and the confirmation path. Missing only auth/permission caveats and reversibility, which are minor given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for rubricId, workspace, and approvalId, so the schema carries the parameter burden. The 'needs_confirmation' mention loosely ties to approvalId but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Deletes') and resource ('a rubric'), which cleanly disambiguates it from caliper_rubrics_create/update/get/list. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the required rubricId (from caliper_rubrics_list) and the destructive verb, and the needs_confirmation note hints at the confirmation workflow. However, it never states when to delete versus update/retire a rubric, or any preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_rubrics_getRead a Caliper rubric (criteria + scales)ARead-onlyInspect
One rubric with its criteria — each criterion's name, what the judge looks for, and the score scale. Read this to explain a score (which criterion slipped and what it asks for) or before caliper_rubrics_update. Get the rubricId from caliper_rubrics_list or an eval's rubricId.
| Name | Required | Description | Default |
|---|---|---|---|
| rubricId | Yes | Rubric id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the agent knows this is a contained safe read. The description adds useful context about what the read returns (criterion names, judge focus, score scale). Beyond that it does not describe pagination, caching, or error behavior, and with annotations carrying the safety profile the description's added value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what is returned, why to read it, and where the id comes from. The purpose is front-loaded and the guidance follows naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with annotations covering safety and no output schema, the description covers the resource, its contents, and the id source adequately. The minor gap is that workspace behavior is left entirely to the schema, but that is reasonable given 100% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — the schema itself documents rubricId and workspace. The description reinforces where to obtain the rubricId, which is helpful routing but not syntax or format information beyond the schema. Baseline 3 applies because the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb (read), resource (a single rubric), and the exact contents returned — criteria with their names, the judge's focus, and the score scale. It is clearly distinguishable from siblings like caliper_rubrics_list and caliper_rubrics_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two concrete when-to-use conditions (to explain a score and before updating) and names the source for the required rubricId. Exclusions are implicit but the alternative list tool is referenced for retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_rubrics_listList Caliper rubricsARead-onlyInspect
Lists the rubrics in the active workspace (id, name, description, criterion count). Check here BEFORE caliper_rubrics_create — reuse an existing rubric's id in caliper_evals_create when one already scores the same job. Read a rubric's criteria with caliper_rubrics_get.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond them by disclosing the result shape (id, name, description, criterion count) and that results are scoped to the active workspace. It stops short of describing pagination or list size limits, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by conditional routing and a follow-up pointer. Three compact sentences, no filler, every clause is actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by listing the returned fields. Combined with annotations covering the safety profile and clear routing to sibling tools, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single workspace parameter is fully documented in the schema, so the baseline is 3. The description's 'active workspace' phrasing aligns with the parameter but adds no new syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (rubrics in the active workspace) and even enumerates the returned fields (id, name, description, criterion count). It explicitly names the sibling tools caliper_rubrics_create and caliper_rubrics_get, so an agent can distinguish it from neighbors without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('Check here BEFORE caliper_rubrics_create'), a concrete reason (reuse an existing rubric's id in caliper_evals_create), and routes the agent to caliper_rubrics_get for criteria. When-to-use and alternatives are both stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_rubrics_updateUpdate a Caliper rubricADestructiveInspect
Changes a rubric's title, description, visibility, or replaces its criteria wholesale (pass the FULL list — criteria get fresh ids). Evals snapshot the rubric when they're created, so an existing eval keeps scoring with the criteria it started with; say so, and offer to create a new eval when the criteria change materially. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New name. | |
| criteria | No | Replacement criteria (1-10) — the whole list, not a diff. | |
| rubricId | Yes | Rubric id, from caliper_rubrics_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New description; null clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag it as a destructive write, and the description adds material behavior the annotations don't: criteria get fresh ids on replacement, existing evals are immutable snapshots that keep scoring with their original criteria, and the call may return `needs_confirmation`. This is exactly the kind of context an agent needs before mutating a shared object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly-scoped sentences, front-loaded with the core mutation and followed by the snapshot caveat. The meta-instruction ('say so, and offer to create a new eval') is slightly directive for a description but still earns its place as agent guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, it covers the destructive-path semantics, the confirmation flow, and the downstream eval implications. It relies on the schema for workspace/approvalId details, which is reasonable given full schema coverage, leaving only minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by emphasizing passing the FULL criteria list and noting that criteria receive fresh ids — behavior the schema doesn't state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (changes) on a specific resource (rubric) and enumerates the affected fields (title, description, visibility, criteria). It also clarifies the criteria semantics as a wholesale replacement rather than a diff, distinguishing it from a partial-update mental model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear workflow context: criteria edits replace everything, evals snapshot at creation, and the agent should surface that and offer to create a new eval when criteria change materially. It doesn't explicitly contrast against update-vs-create or other rubric siblings, but the in-context guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_source_feeds_listList a source's live datasetsBRead-onlyInspect
Datasets this source keeps adding to as conversations arrive: which dataset, for what (review, eval, spec), the pick it matches, sampling, how many have landed, and whether it's still running or why it stopped.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false; the description adds useful domain context by enumerating observable fields (pick, sampling, landed count, running state). This goes beyond the annotations but doesn't cover auth/permission nuances or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single long sentence with a colon list that crams many concepts (dataset, purpose, pick, sampling, count, state) into one clause. Front-loaded with the key subject but the density slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a small, fully documented 2-param schema and no output schema, the description gives a rich picture of what items contain. It omits pagination/limit behavior, but that's a minor gap given no such params exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 sourceId and workspace. The description adds no parameter-level hints beyond confirming that this tool is scoped to a source, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (datasets a source keeps adding to) with clear scope. It distinguishes itself from the broad caliper_datasets_list by anchoring to a source and 'live/ongoing' nature, though it doesn't explicitly name the sibling alt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through 'datasets this source keeps adding to' but there is no explicit when-to-use or when-to-use-alternative guidance. An agent must infer from the required sourceId that this is source-scoped listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_source_feeds_stopStop a live datasetADestructiveInspect
Stops a source from adding new conversations to a dataset. What it already added stays. Get the feedId from caliper_source_feeds_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | Yes | Live dataset id, from caliper_source_feeds_list. | |
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds genuinely useful non-obvious context: that stopping is non-retroactive ('What it already added stays') and that a `needs_confirmation` response is possible. It does not describe reversibility or how to restart ingestion, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and its scope caveat, then the prerequisite and the possible response state. No filler and nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does mention the possible `needs_confirmation` state. Combined with 100% schema coverage for the four parameters, an agent has enough to call it correctly, though the restart/recovery path remains unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including workspace and approvalId) are already documented in the schema, which is the baseline-3 case. The description reinforces the feedId provenance and references the confirmation flow, but adds no syntax or constraints beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Stops a source from adding new conversations to a dataset') and immediately scopes the effect ('What it already added stays'), which distinguishes it from a destructive delete. It also names the sibling used to obtain the required id, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the usage context (halting a live feed) and points to caliper_source_feeds_list for the feedId, but never states when-not to use it or names the counterpart tool (e.g., caliper_sources_to_dataset) that would re-enable ingestion. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_sources_listList Caliper sourcesARead-onlyInspect
Apps sending their agent's traces to Caliper — from their own code, OpenTelemetry, or a published Workbench flow — busiest first: name, how it sends, traces in the last 14 days (per day), and the tools its agent calls most with the share of traces using each. Start here when the user asks how their agent behaves on real traffic; then caliper_sources_over_time for one source.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: results are ordered busiest first and scoped to the last 14 days with per-day counts plus top tools by trace share. It stops short of describing error/auth edge behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then enumerates the returned fields (which compensates for the absent output schema), then routes to the sibling. Every clause carries information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so — name, send method, 14-day per-day trace counts, and top tools with share. For a single-param read-only list tool with annotations covering safety, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspace parameter is fully documented in the schema, including the token/default-workspace rule. The description adds no parameter guidance, so the baseline 3 is correct — the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list Caliper sources) and immediately defines what a source is — apps sending agent traces via own code, OpenTelemetry, or a Workbench flow. It explicitly distinguishes itself from the sibling caliper_sources_over_time, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ("Start here when the user asks how their agent behaves on real traffic") and names the follow-on alternative with its condition ("then caliper_sources_over_time for one source"). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_sources_over_timeRead a Caliper source over timeARead-onlyInspect
One source day by day: traces, failures, tool calls, lookups that found nothing, tokens, cost, and speed (meanMs; p50/p95 as 'answered within' bucket edges); each tool with its calls and the share of each day's traces that used it; the documents lookups landed on most; models used. Use it to answer 'how often is it calling web search and is that changing' — compare the first and last weeks and name the day it moved. Follow with caliper_traces_list on that day or tool to show the conversations behind it.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back, default 30. | |
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 goes further by explaining metric semantics that the schema cannot: p50/p95 are defined as 'answered within' bucket edges and empty-result lookups are surfaced. It does not disclose aggregation granularity, result size, or any limits beyond the schema's days maximum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and the returned metrics, followed by a usage example and a chaining instruction; each sentence carries information. The opening enumeration is dense with semicolons and parentheticals, which slightly taxes readability, but nothing is padding given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return-shape burden by cataloguing the metrics and their meaning, and it closes the loop with a follow-up tool for drill-down. It leaves out aggregation granularity, response size/paging, and how the days window interacts with the reported daily buckets, which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 sourceId, days (default 30) and workspace. The description only loosely touches parameters ('compare the first and last weeks' implies a window but gives no syntax for days) and says nothing about workspace selection. Baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Read a Caliper source over time'), then enumerates the exact payload an agent gets: traces, failures, tool calls, empty lookups, tokens, cost, speed buckets, per-tool shares, documents, and models. It also implicitly distinguishes itself from caliper_traces_list by positioning that sibling as the drill-down for a single day/tool. An agent can tell what this returns without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('how often is it calling web search and is that changing — compare the first and last weeks and name the day it moved') and names the follow-up tool (caliper_traces_list on that day or tool). It stops short of stating when NOT to use it or how it compares to caliper_flow_performance, so no explicit exclusion is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_sources_to_datasetSave a source's conversations to a datasetAInspect
Saves the conversations behind a pick (a day, a tool, a document, failures — the same narrowing as caliper_traces_list) into a new dataset (newDatasetName) or an existing one (datasetId), newest first up to limit. purpose decides what each item keeps: review = the agent's reply, tool calls included, for people to rate; eval = the reply becomes the expected answer; spec = only the questions, for people to answer. Set keepAdding to make it live: new matching conversations keep arriving (every one, or 1 in 10 / 1 in 100), up to 1,000. Then offer the next step — caliper_evals_create, or a review in Caliper. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | One UTC day, YYYY-MM-DD. | |
| tool | No | Only traces that called this tool. | |
| limit | No | Most recent N, default 100. | |
| purpose | Yes | review | eval | spec. | |
| document | No | Only traces whose lookups hit this document. | |
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| datasetId | No | Add to this dataset… | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| errorsOnly | No | Only failed traces. | |
| keepAdding | No | Keep adding new matches as they arrive, taking one in this many (1 = every one). | |
| newDatasetName | No | …or start one with this name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses ordering (newest first up to limit), the live keepAdding behavior with sampling ratios and the 1,000 cap, the effect of each purpose mode on item contents, and the needs_confirmation return path. Annotations (readOnlyHint=false, destructiveHint=false) match the additive create semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core action leads, then purpose semantics, then live-mode behavior and next steps. Every sentence carries information, though the paragraph is long and could be broken into clearer chunks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no output schema, it covers the confirmation flow, ordering, caps, and follow-on actions needed to invoke and continue correctly. Nothing an agent would need before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it translates the terse 'review | eval | spec' enum into what each item keeps, and elaborates keepAdding as every-one or 1-in-10/1-in-100. It leaves workspace and approvalId handling to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Saves the conversations... into a new dataset or an existing one') and pins the scope by reference to caliper_traces_list's same narrowing (day, tool, document, failures). An agent can tell it apart from caliper_datasets_create or caliper_datasets_add_items without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection logic between newDatasetName and datasetId, explains when to set keepAdding to make it live, and routes the agent to the next step (caliper_evals_create). It does not explicitly compare against sibling routing like caliper_datasets_add_items, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_starters_installInstall a Caliper starter (dataset + rubric)AInspect
Copies one starter into the workspace as a new dataset and a new rubric the user owns and can edit. Returns both ids; the next step is caliper_evals_create binding them to the flow (or target 'external'). Needs caliper:datasets:write and caliper:evals:write.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Starter slug from caliper_starters_list. | |
| workspace | No | Workspace slug override. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the required scopes (caliper:datasets:write and caliper:evals:write), that the resulting artifacts are user-owned and editable, and what is returned (both ids). It stops short of saying whether a re-run duplicates artifacts or how the approvalId confirmation flow behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler: what it does first, then the return value and next step, then the permission requirement. Every sentence earns its place and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description supplies the missing pieces an agent needs: the shape of the result (both ids), the required scopes, and the natural continuation (caliper_evals_create). Nothing essential to invoking it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so slug, workspace, and approvalId are already documented in the schema, including the enum and the 'omit on first call' note for approvalId. The description adds no parameter-level syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with concrete outcome: copies one starter into the workspace as a new dataset and a new rubric the user owns and can edit. This clearly distinguishes it from the sibling caliper_starters_list (which only enumerates starters) and from caliper_datasets_create / caliper_rubrics_create (which create one artifact, not both).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the follow-up step explicitly (caliper_evals_create binding the dataset and rubric to a flow or to 'external'), and the slug enum in the schema points back to caliper_starters_list as the source of valid input. It does not state when NOT to use it (e.g. preferring caliper_datasets_create when the user wants a blank dataset), so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_starters_listList Caliper starters (ready-made dataset + rubric pairs)ARead-onlyInspect
The starter sets Caliper ships: prompt injection, system-prompt leaking, over-refusal, personal-data handling, bias under ambiguity. Each is a small original dataset (single messages AND multi-turn build-ups: false memory, fabricated earlier turns, slow escalation) paired with an anchored rubric. Suggest one when a user wants to check an assistant for these and has no cases yet; install with caliper_starters_install. Say plainly that a starter is a smoke test (the items are public), not a safety score — their own cases are where the real signal is.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/destructive=false, so the safety profile is covered. The description adds genuinely non-structural context: the items are public, a starter is a smoke test rather than a safety score, and the user's own cases carry the real signal. It stops short of describing the list's shape or pagination, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the enumeration of starter sets, then usage guidance, then the caveat. Every sentence carries content, though the parenthetical about single vs multi-turn build-ups is dense and slightly slows scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming what each starter contains (dataset plus anchored rubric). It never explicitly says the call returns a list of these entries, but the title and first sentence make that inferable. Complete enough for a zero-arg read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. Score held at 4 because the description adds no parameter-relevant confusion either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('The starter sets Caliper ships') and enumerates the actual contents (prompt injection, system-prompt leaking, over-refusal, personal-data handling, bias under ambiguity), so an agent knows exactly what this returns. It also distinguishes itself from caliper_starters_install by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('Suggest one when a user wants to check an assistant for these and has no cases yet') and names the follow-up tool (caliper_starters_install) with the action verb 'install'. Both when-to-use and the next step are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_traces_getRead one traceARead-onlyInspect
One trace: what came in, what went out, and every step in order — model calls (model, tokens, cost, reasoning), tool calls (arguments and result), lookups (query and documents with scores), anything else — each with timing and status. Long values are cut at 2,000 characters. Use it to explain why one conversation went the way it did.
| Name | Required | Description | Default |
|---|---|---|---|
| traceId | Yes | Trace id, from caliper_traces_list. | |
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower, and the description still adds genuinely useful behavior: the shape of the returned step list and the 2,000-character truncation limit on long values. It omits error behavior for a missing trace, but the truncation disclosure is real added value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded ("One trace: what came in, what went out, and every step in order"), with truncation and intended use following. The middle clause is dense with parentheticals, but each earns its place by telling the agent what fields to expect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well by enumerating call types and their fields plus the truncation limit; the annotations handle safety and the schema handles input routing. Only the failure mode for an unknown traceId is unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents all three parameters including the workspace/token default rules and where traceId and sourceId come from. The description adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this retrieves a single trace and enumerates exactly what it contains (model calls, tool calls, lookups, timing, status), which implicitly contrasts with the sibling caliper_traces_list. It never states a plain verb like 'retrieve one trace by id', but the resource and scope are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to explain why one conversation went the way it did" gives one concrete debugging scenario, and the schema's traceId note points back to caliper_traces_list as the source of ids. However there is no explicit when-not guidance or statement of the list-then-get workflow in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caliper_traces_listList a source's conversationsARead-onlyInspect
The traces behind a point on a source's chart, newest first, 50 a page: the question and answer (cut short), tools called, time, tokens, cost, status. Narrow by day, tool, document, or failures; page with before (the nextBefore from the last page). Open one with caliper_traces_get.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | One UTC day, YYYY-MM-DD. | |
| tool | No | Only traces that called this tool. | |
| before | No | Paging: the nextBefore from the previous page. | |
| document | No | Only traces whose lookups hit this document. | |
| sourceId | Yes | Source id, from caliper_sources_list or search_workspace. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| errorsOnly | No | Only failed traces. |
TDQS
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 genuinely useful behavior beyond them: newest-first ordering, a fixed 50-per-page size, truncated question/answer fields, and the paging cursor contract. It stops short of noting any rate limits or result caps, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the resource and return shape, then filters and paging. Every clause adds information; there is no filler or repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 sketches the returned record fields, paging, and the natural follow-up tool. It omits nothing critical for invocation, though the workspace-scoping caveat is left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including `before`, `day`, `tool`, and `document` is already documented. The description reinforces the filter semantics and the paging cursor, but adds no syntax or format detail beyond what the schema carries, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (the traces behind a point on a source's chart) and even enumerates what each record contains (question/answer, tools, time, tokens, cost, status). It clearly distinguishes itself from caliper_traces_get, which it names for single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent how to narrow the list (day, tool, document, failures), how to page (`before` with the nextBefore from the last page), and routes to caliper_traces_get for opening one. Nothing about when to use vs. the sibling is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comments_createComment on an entityAInspect
Posts a comment on a workspace entity — a new thread, or a reply when rootId is given. Use it to leave findings where the discussion already lives (an eval result on the flow being debated, a summary on a long thread). Mention people via mentionedUserIds (from workspace member ids) to ring their notification bell; never mention someone who didn't ask to be pulled in.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| rootId | No | Reply into this thread; omit to start a new one. | |
| entityId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| entityKind | Yes | What the thread hangs on. | |
| mentionedUserIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write, non-destructive, closed-world behavior, so the baseline is set. The description adds genuine behavioral context: the mention path 'rings their notification bell', which is a side effect an agent should know about, plus the thread-vs-reply branching. It stops short of noting auth requirements or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and mode selection before the usage example. The closing etiquette line ('never mention someone who didn't ask') is editorializing but arguably still useful guardrail content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema and annotations covering safety, the description covers purpose, use case, thread/reply behavior, and mention side effects. Missing pieces are minor (approvalId meaning, mention limits, what a successful post returns).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43%, so the description is expected to compensate. It meaningfully explains mentionedUserIds (workspace member ids) and rootId (reply target), but leaves approvalId, workspace, entityKind semantics, and body constraints unexplained. Partial compensation warrants a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Posts a comment on a workspace entity') and clarifies the two modes — new thread vs reply when rootId is given. An agent can immediately tell what this does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases ('leave findings where the discussion already lives', 'a summary on a long thread') that establish when to reach for it. It does not, however, distinguish this from siblings comments_list or comments_resolve, nor state any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comments_listRead an entity's comment threadsARead-onlyInspect
Lists the comment threads on one workspace entity (open first, then resolved) with authors and timestamps. Read this before weighing in on contested work — the threads are where disagreement lives before it becomes a decision.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| entityKind | Yes | What the thread hangs on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower, and the description still adds real behavioral content: result ordering (open first, then resolved) and the fact that authors and timestamps are included. It stops short of stating pagination, volume limits, or behavior for entities with no threads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operative fact (what is listed, in what order) before the advisory second sentence. The second sentence is slightly rhetorical ("where disagreement lives before it becomes a decision") but it does convey routing intent, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned content (threads, authors, timestamps, ordering), which is the key information an agent needs. It remains silent on result size/pagination and on empty-result behavior, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: workspace is well documented in the schema, entityKind has only a terse "What the thread hangs on" description, and entityId has none. The description says only "one workspace entity," adding no format, valid-value, or relationship detail beyond the schema enum, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Lists the comment threads on one workspace entity") and adds ordering detail (open first, then resolved). It implicitly separates itself from the write-side siblings comments_create and comments_resolve through the read verb, but never names or contrasts with them outright, so sibling differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Read this before weighing in on contested work" gives a thematic when-to-use cue, which is more than nothing. However, no alternatives are named (notably comments_resolve or comments_create, the natural next/previous steps) and there is no when-not-to-use guidance or note on whether resolved threads can be filtered out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comments_resolveResolve or reopen a threadADestructiveInspect
Sets a comment thread's resolved state (rootId = the thread's root comment id). Resolve ONLY when the human asked or the thread's question is demonstrably settled — and say what settled it in a reply first. Reopening is for new evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| rootId | Yes | ||
| resolved | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive mutation. The description adds meaningful policy context beyond that: the operation is a reversible toggle (resolve/reopen), and there is a sequencing constraint requiring justification before resolving. It does not state permission/auth requirements or what happens to existing replies, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the mechanical fact (what rootId is) front-loaded, followed by the policy. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no output schema, the description covers purpose, when-to-use, and the key parameter. The gaps are approvalId (never explained) and workspace/auth expectations, which matter for a destructive operation, but the core agent decision-making path is well served.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must carry more weight. It usefully defines rootId (the thread's root comment id) and implies resolved=true/false via 'resolve or reopen', but says nothing about workspace (which the schema does describe) or approvalId (undocumented in both places). Partial compensation for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (sets the resolved state) and resource (a comment thread), and clarifies the ambiguous rootId by equating it to the thread's root comment id. It clearly covers both directions of the operation (resolve and reopen). It does not explicitly distinguish itself from comments_create/comments_list, though the reply-first instruction implies a division of labor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use rules: resolve only when the human asked or the question is demonstrably settled, and reopen only for new evidence. It also imposes a prerequisite workflow step ('say what settled it in a reply first'), which implicitly routes the agent to comments_create. This is about as prescriptive as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_change_effects_setSay what a change does to stepsADestructiveInspect
Replace a change's effects: for each step it reaches (workflowPageId + nodeId from compass_workflow_steps — a sub-workflow's steps included), one of eliminate, automate (reviewMinutes: what a person still spends checking), parallelize (its wait comes off the critical path), relax_gate (keepShare: share of the wait left, default 0.25), assist (keepShare: share of hands-on time left, default 0.5), reassign (toSubjectPageId). Eliminating or automating every step of a sub-workflow collapses the step that is that sub-workflow. Then project with compass_workflow_rollup changeIds. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| effects | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description's 'Replace' wording is consistent with a full overwrite. Beyond annotations it adds genuinely useful behavior: the effects are holistic (a whole set is replaced), sub-workflow collapse semantics, and that the call 'May return `needs_confirmation`', which ties to the approvalId parameter. Auth/permission specifics are not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded paragraph that opens with the core action and never repeats the structured fields. It is dense and requires careful parsing, but every clause (effect semantics, sub-workflow collapse, projection step, confirmation) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, nested-schema mutation tool with no output schema, the description covers input provenance, per-effect semantics, the follow-up projection step, and confirmation behavior. It stops short of auth/permission or reversibility detail, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description adds real meaning beyond it: it defines the semantic intent of each effect enum value and supplies undocumented defaults (keepShare 0.25 for relax_gate, 0.5 for assist) and what reviewMinutes measures. The remaining covered params (workspace, approvalId, opportunityId) already carry schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Replace a change's effects') and immediately distinguishes itself by naming the sibling that supplies inputs (compass_workflow_steps) and the sibling that consumes the result (compass_workflow_rollup changeIds). An agent can tell this apart from compass_transformations_* and compass_changes_upsert without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the workflow context explicitly: steps come from compass_workflow_steps, effects are set here, then the result is projected with compass_workflow_rollup changeIds. There is no explicit when-not or exclusion, but the sequencing across siblings gives clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_changes_upsertBring changes in from another trackerADestructiveInspect
Create or update up to 100 changes in one call, each matched by url — the GitHub issue, Linear or Jira ticket, PR or doc it mirrors. A url already linked to a change updates that change (label, description, status, tags, experiment, workflow — omitted fields are left alone); any other url creates a change with that link. Run it again with the same urls to keep Compass in step; nothing duplicates. Statuses are by name (compass_statuses_list). Returns one result per item — created / updated with the change's key, or failed with why; a failed item doesn't stop the rest. Summarize what you're about to bring in before calling. May return needs_confirmation — one approval covers the whole batch.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses upsert field-merge semantics (omitted fields left alone), idempotency (nothing duplicates), per-item result shape (created/updated with key, or failed with why), failure isolation ('a failed item doesn't stop the rest'), and the needs_confirmation/approvalId batch-approval flow. This is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core create-or-update rule and matching key, then layers merge semantics, idempotency, results, and confirmation. Dense but every sentence carries operational information; slightly long, though nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batched mutation with no output schema and three params, the description covers creation, update/merge, idempotency, partial-failure behavior, return shape, and the confirmation/approval round trip. An agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates by explaining the `url` match semantics (creates vs updates), that `statusName` is by name with a pointer to compass_statuses_list, and that omitted fields are preserved. It does not clarify the remaining nested item fields (tags, experiment, workflowPageId) beyond schema, but adds real meaning over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create or update up to 100 changes in one call'), names the matching key (`url`), and defines the upsert rule against it. An agent can distinguish this batch upsert from siblings like compass_links_create or compass_pages_create without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: rerun with identical urls to stay in sync, statuses come by name via compass_statuses_list, and 'Summarize what you're about to bring in before calling.' It does not explicitly name when to prefer this over other creation paths, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_gaps_createRaise a Compass open question (gap)AInspect
Records something you don't yet know — the gap registry is your working memory, so use it liberally while mapping or interviewing. Give one clear question, WHY it matters (what answering it unblocks), and how you'd resolve it (ask the user / interview a specific person / connect a source). No approval needed — noting your own uncertainty isn't acting on the user's behalf. Attach it to a subject (subjectType/subjectId) when it's ABOUT a specific page or person.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The open question, plainly ('Who approves refunds over $500?'). | |
| rationale | No | Why it matters / what answering it unblocks. | |
| subjectId | No | Id of the subject. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| subjectType | No | What it's about, e.g. compass_page. | |
| suggestedResolution | No | How to resolve it: 'ask the user', 'interview Dana', 'connect Drive'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-destructive, non-readOnly, closed-world write. The description adds genuinely useful context beyond that: 'No approval needed — noting your own uncertainty isn't acting on the user's behalf', which explains why an agent may write freely, plus 'the gap registry is your working memory'. It doesn't cover rate limits or response shape, but the approval-free rationale is substantive added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the guidance to use it liberally, then moves to required content and the subject attachment. It's appropriately sized, though the question/rationale/resolution sentences partially restate the schema, adding mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param create tool with no output schema, the description covers purpose, when to use, required content, subject attachment, and the approval-free behavior. It doesn't say what the call returns (e.g., the created gap id) or whether a subject requires a matching subjectType, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns extra: it maps the required 'question' to a framing rule ('one clear question'), ties 'rationale' to 'what answering it unblocks', and — critically for the thin schema entries — explains subjectType/subjectId as the mechanism for tying a gap to a specific page or person. That last point adds meaning not present in the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Records something you don't yet know' against the 'gap registry' — and reframes the resource as 'open question (gap)', so an agent knows this is the create side of the compass_gaps_* family. The framing is distinguishable from compass_gaps_list/resolve/update 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context: 'use it liberally while mapping or interviewing', and conditions the subject attachment on whether the gap is ABOUT a specific page or person. It stops short of naming alternatives explicitly (e.g., compass_gaps_update to amend, compass_gaps_resolve to close), so it's clear context but not full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_gaps_listList Compass open questions (gaps)ARead-onlyInspect
Lists the workspace's open questions — the gap registry: what the map doesn't know yet. Defaults to OPEN gaps. This is where you keep your head — check it before asking the user something you may already have flagged, and compose interview briefs from a subject's open questions.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by lifecycle stage. Default OPEN. | |
| subjectId | No | Only gaps ABOUT this subject id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| subjectType | No | Only gaps ABOUT this subject type (e.g. compass_page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds the default-to-OPEN filtering behavior and the registry framing, but says nothing about result size, pagination, or workspace/auth scoping beyond what the schema states. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool lists before moving to guidance. The colloquial aside ('This is where you keep your head') is colorful rather than wasteful, though it dilutes precision slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-optional-parameter read tool with no output schema and full schema coverage, the description covers what it returns (open questions/gaps), the default filter, and the workflow it supports. Nothing critical is missing, though return shape is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (status, subjectId, workspace, subjectType) are already documented, including the OPEN default and the workspace-token rules. The description only echoes the default status behavior, adding nothing new. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Lists the workspace's open questions — the gap registry: what the map doesn't know yet.' The metaphor is anchored to a concrete concept (gaps), so an agent knows what it retrieves. It does not explicitly distinguish itself from siblings compass_gaps_create/resolve/update, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage context: 'check it before asking the user something you may already have flagged, and compose interview briefs from a subject's open questions.' That tells the agent when to reach for it. It does not name an alternative tool or state exclusions, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_gaps_resolveResolve a Compass open question (gap)ADestructiveInspect
Closes a gap once you've learned the answer (ANSWERED, with the resolution) or decided it doesn't matter (DISMISSED). Keep the registry honest — resolve gaps as their answers land (from an interview, a doc, or the user) so it always reflects what's still unknown. The resolution alone isn't the map: when the answer says something about a page (who does a step, a tool they use, how a decision gets made), write it there too in the same turn, on the page it's about or as the step, person or system it names. Gaps you raised close without a card; a question a person wrote needs their approval.
| Name | Required | Description | Default |
|---|---|---|---|
| gapId | Yes | Id of the gap (from compass_gaps_list). | |
| status | Yes | ANSWERED (you learned it) or DISMISSED (irrelevant). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Re-call with the approvalId from a needs_confirmation response after the user approves. | |
| resolution | No | The answer / note, when marking ANSWERED. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a destructive, non-read-only mutation, and the description adds genuinely non-obvious behavior on top: gaps the agent raised close without a card, while a person-authored question requires their approval (matching the approvalId re-call flow). It stops short of saying whether a resolution can be undone or corrected later.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the two statuses are front-loaded in the first sentence. The middle sentence is a long run-on mixing invariant ('the resolution alone isn't the map') with follow-up page-writing instructions, slightly diluting focus, but overall it is tight and every clause is substantive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation with no output schema, the description covers the approval-gating behavior and the expectation that the answer be propagated to the relevant page. What is missing is the response shape (e.g. whether the call can return needs_confirmation) and whether DISMISSED requires a resolution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage on all five parameters (including the status enum and the approvalId flow), the schema already carries parameter meaning. The description restates the ANSWERED/DISMISSED distinction and the 'resolution' pairing but adds no syntax, constraints, or guidance beyond what is documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Closes a gap') and enumerates the two terminal states (ANSWERED with resolution, DISMISSED), which lets an agent distinguish it from compass_gaps_create and compass_gaps_list. It never states, however, how it differs from the sibling compass_gaps_update, which overlaps conceptually with 'resolve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger ('once you've learned the answer ... or decided it doesn't matter') and even a cadence recommendation ('resolve gaps as their answers land'). It does not explicitly exclude the closely-related compass_gaps_update or explain which to prefer when a gap merely changes status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_gaps_updateReword a Compass open question (gap)ADestructiveInspect
Edits an open question's wording, rationale, or suggested resolution — for sharpening a vague question or fixing one you phrased badly. Closing a gap is compass_gaps_resolve, not this. Gap ids come from compass_gaps_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| gapId | Yes | Id of the gap (from compass_gaps_list). | |
| question | No | New wording of the question. | |
| rationale | No | Why it matters / what answering it unblocks. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| suggestedResolution | No | How to resolve it: 'ask the user', 'interview Dana', 'connect Drive'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true/readOnlyHint=false, so the mutation risk is covered. The description adds real behavioral context beyond that by flagging the two-phase confirmation flow ('May return `needs_confirmation`'), which changes how an agent must sequence calls. It stops short of saying whether prior wording is recoverable or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, then the alternative and prerequisite, then the return caveat. Every clause carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers purpose, routing, id sourcing, and the needs_confirmation return path with annotations carrying the safety profile. Minor gaps remain around permission requirements and partial-update behavior, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 six parameters, including the workspace and approvalId mechanics. The description only restates which content fields are editable (wording/rationale/resolution) already implied by the schema, adding little new meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Edits an open question's wording, rationale, or suggested resolution') and explicitly contrasts with the nearest sibling: 'Closing a gap is compass_gaps_resolve, not this.' An agent can distinguish this from compass_gaps_resolve and compass_gaps_create without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the when ('sharpening a vague question or fixing one you phrased badly'), the when-not with a named alternative ('Closing a gap is compass_gaps_resolve'), and the prerequisite for the id ('Gap ids come from compass_gaps_list'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_inbox_listWhat's waiting for a decision in CompassARead-onlyInspect
The Compass Inbox in one read: finished interviews awaiting review (transcript in, not yet turned into pages), AI-proposed opportunities awaiting accept / dismiss, and the caller's pending approval cards for Compass writes. THE place to answer 'what needs me?' for the map. Also fillIn: what the map is missing to say who's responsible for what (priorities with no owner, business units with no lead, people and roles in no unit, priorities with no workflow behind them); not counted in total. Next moves: compass_interviews_get to read a transcript, then propose pages from it with compass_pages_create; compass_opportunities_accept or compass_opportunities_delete for a proposal. For fillIn, ask the user who owns or leads it, or which unit someone sits in, then compass_links_create with kind owns (person or role → priority or unit) or part_of (person, role or unit → unit); never guess an owner.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds valuable semantics the annotations cannot: the exact composition of the inbox, that fillIn is excluded from total, and that offsetting cards are pending approvals. It does not describe pagination or ordering, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then sub-lists, then next moves. It is dense and long, but every section earns its place; the routing guidance and owner-lead instructions are not padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the three inbox categories, the uncounted fillIn set, and the recommended follow-up tools for each category. Missing only explicit pagination/ordering and what a total counts, which is minor for a read-only overview tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspace parameter is fully documented, so the baseline is high. The description adds no parameter detail but does not need to, and it clarifies the return shape and the fillIn/total relationship which supports interpretation of results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what is returned: finished interviews awaiting review, AI-proposed opportunities awaiting accept/dismiss, and pending approval cards, plus the fillIn sub-list. This is a specific verb+resource and distinguishes itself from siblings like compass_opportunities_list and compass_interviews_list by framing all of them as a decision queue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it is 'THE place to answer what needs me?' and names concrete follow-up alternatives (compass_interviews_get → compass_pages_create, compass_opportunities_accept/delete, compass_links_create with kind owns/part_of). It even states a when-not/guardrail: 'never guess an owner'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interview_inviteEmail an interview inviteAInspect
Emails the guest link for an existing interview, framed as coming from the REQUESTING USER (their name signs it; replies go to them). Author message in their voice — short, human, says why THEIR knowledge matters and that it takes ~15 minutes, no account needed. The approval card shows the exact subject + message before anything sends. Limit: the invite plus ONE reminder; a third ask is the user's conversation to have. Completion arrives as a notification with draft-page counts — don't poll.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The interviewee's email address. | ||
| message | Yes | The body, written in the requesting user's voice. Greeting + link + signature are added automatically — write only the middle. | |
| subject | Yes | Email subject, e.g. '15 minutes on how refunds actually work?' | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| interviewId | Yes | Interview id from compass_interviews_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering only read/destructive/openWorld, the description adds substantial behavior: the approval card shows the exact subject+message before send, there is a hard invite+one-reminder rate limit, and completion arrives asynchronously as a notification with draft-page counts (explicitly 'don't poll'). This is exactly the operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and framing in the first clause, then layers operational constraints. It is a dense single paragraph and reads as slightly run-on, but nearly every clause carries distinct information, so almost nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that sends real outbound email through an approval flow with no output schema, the description covers the full lifecycle: message authoring, approval gating, rate limit, and async completion signal. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds content guidance for `message` beyond the schema — short, human, explains why THEIR knowledge matters, ~15 minutes, no account needed — which tells the agent what to actually write, not just where it goes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Emails the guest link for an existing interview') and pins the framing ('from the REQUESTING USER'). The word 'existing' cleanly separates it from compass_interviews_create, so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use it while framing a message in the requesting user's voice, respect the invite-plus-one-reminder limit, and expect a notification rather than polling. It never names a sibling alternative or an explicit when-not condition, which is the only thing keeping it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interviews_createInvite someone to a Compass interviewAInspect
Mints a stakeholder-interview invite: a no-account guest link where the person talks to an interviewer agent briefed by your focusPrompt, and the transcript flows back into Compass as reviewable draft pages. THE KNOWLEDGE-GAP MOVE: when caliper_flow_performance shows failures clustered on missing company facts (the judge says the flow invented a policy, missed a rule, didn't know who owns something), the fix is usually not a prompt edit — it's asking the human who actually knows. Write a focusPrompt that names the SPECIFIC gaps (cite the eval run id), pick the owner of the relevant workflow as interviewee when the map knows one. When you have their email, send the link with compass_interview_invite next rather than asking the user to forward it; otherwise hand the user the link. May return needs_confirmation — tell the user who you want to interview and why, then wait.
| Name | Required | Description | Default |
|---|---|---|---|
| anonymous | No | The guest is told it's anonymous and never asked who they are; no name or email is kept, so leave intervieweeName and intervieweeEmail out, and the link isn't emailed from here. Use when the user asks for anonymous interviews. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| focusPrompt | Yes | The interviewer's aim (≤2000 chars), never shown to the guest: why the team is asking, in one sentence; 2–3 things to come away knowing, each describable from experience (who does a step, what happens when it goes wrong, how long it waits, why a check exists), aimed at what the map doesn't know; and what the answers feed. No opinion or preference questions. | |
| contextPageIds | No | Compass page ids the interviewer gets as briefing context (e.g. the workflow page whose flow underperformed). | |
| intervieweeName | No | Who this invite is for, when known. | |
| intervieweeEmail | No | Their email, when known — enables compass_interview_invite to send the link directly (with approval). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses real side effects: creates a guest-facing link, drafts pages flow back into Compass, and the call may return `needs_confirmation` requiring the agent to explain and wait. That two-phase approval loop is the kind of thing annotations cannot convey. It stops short of invite lifecycle behavior (expiry, whether repeated calls create multiple invites, revocability via compass_interviews_revoke).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition in sentence one, then usage, then mechanics, then the approval caveat — a sensible descending-priority order. Dense rather than padded, though the all-caps 'THE KNOWLEDGE-GAP MOVE' framing and stacked parentheticals add a little rhetorical weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter creation tool with no output schema, the description covers purpose, creation conditions, sequencing to the invite sender, and the confirmation round-trip. The main gap is the success payload — it implies a link is returned ('hand the user the link') but never states what the response contains or what the agent should do with draft-page ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real selection guidance: focusPrompt should name the SPECIFIC gaps and cite the eval run id, and interviewee should be the owner of the relevant workflow when the map knows one. It doesn't add much for workspace or contextPageIds, which the schema already explains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource — 'Mints a stakeholder-interview invite' — immediately qualified by what the artifact actually is: a no-account guest link to an interviewer agent briefed by focusPrompt, with the transcript returning as draft pages. That distinguishes it cleanly from the sibling compass_interview_invite (which sends the link) and from compass_interviews_list/get/revoke.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use trigger wired to another tool: 'when caliper_flow_performance shows failures clustered on missing company facts … the fix is usually not a prompt edit.' It also tells the agent when NOT to stop here — if an email exists use compass_interview_invite next, otherwise hand the user the link — so the routing decision is fully resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interviews_getRead one Compass interview, transcript includedARead-onlyInspect
One interview in full — metadata plus the transcript of what the guest actually said. Read this before summarizing an interview or drafting pages from it: the transcript is the source you work from, and your compass skill has the rules for typing and splitting what's in it. Ids come from compass_interviews_list or compass_inbox_list.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| interviewId | Yes | Interview id (from compass_interviews_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false, destructiveHint=false), so the description is free to add payload-level context, which it does: it discloses that the response is metadata plus the guest's verbatim transcript and that the transcript is the downstream source of truth. It adds no auth, size, or error-handling context, but against read-only annotations this is solid added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and payload, with no filler sentences. The middle sentence is clause-heavy ('the transcript is the source you work from, and your compass skill has the rules for typing and splitting what's in it') and the final clause is slightly indirect, but it still earns its place as workflow context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the two payload components (metadata, transcript). Combined with the read-only annotations and a fully documented schema, an agent has what it needs to call this correctly; only permission/auth specifics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented there and 3 is the baseline. The description adds one small piece the schema lacks — that ids may also come from compass_inbox_list, not only compass_interviews_list — but does not otherwise elaborate on parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('One interview in full — metadata plus the transcript') and states the scope that distinguishes it from compass_interviews_list: this returns the full record including transcript, not a list. An agent can immediately tell what it fetches 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear use condition ('Read this before summarizing an interview or drafting pages from it') and routes the agent to where ids come from (compass_interviews_list, compass_inbox_list). There is no explicit when-not or note about how this relates to bulk retrieval, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interviews_listList Compass interviewsARead-onlyInspect
Every stakeholder interview in the workspace, newest first: who was invited, status (INVITED / IN_PROGRESS / COMPLETED), focus, message count, whether the transcript was already reviewed (documentPageId set), and the invite URL while the link is still live. Check this before inviting someone again — interview fatigue is real — and to answer 'who have we already asked?'. Read one in full with compass_interviews_get.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnlyHint, openWorldHint=false, destructiveHint=false); the description adds substantive context beyond that: result ordering, the status lifecycle values, that transcript review is signalled by documentPageId being set, and that invite URLs are only present while the link is live. For a no-output-schema tool this is exactly the behavioral disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with scope and returned fields, then usage, then the sibling pointer — a logical order with no filler sentences. The field enumeration makes the middle sentence dense, but each clause carries information since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so thoroughly: fields, status values, ordering, and liveness caveat. Combined with annotations covering the safety profile and a fully documented single parameter, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single 'workspace' parameter with 100% schema description coverage, so the schema already explains slug/default/API-key semantics fully. The description only implies workspace scoping and adds no format or defaulting detail for the parameter, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list stakeholder interviews) and immediately enumerates scope: workspace-wide, newest first, with the exact fields returned. It explicitly distinguishes itself from compass_interviews_get, so an agent can choose between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions — 'Check this before inviting someone again' and answering 'who have we already asked?' — plus the reason (interview fatigue) and an explicit route to compass_interviews_get for full-detail reads. Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interviews_revokeRevoke an interview invite linkADestructiveInspect
Kills an interview's invite link — the guest's next visit sees that the link is no longer active. Use when an invite went to the wrong person, the user changed their mind, or the link leaked. Idempotent. Ids come from compass_interviews_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| interviewId | Yes | Interview id (from compass_interviews_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description builds on that by disclosing idempotency, the exact user-visible consequence (link becomes inactive), and the two-step confirmation flow ('May return needs_confirmation'), which pairs with the approvalId parameter. This is behavior an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core effect, then triggers, then operational notes (idempotency, id source, confirmation). Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive revoke tool with no output schema, the description covers the effect, the trigger cases, idempotency, where ids come from, and the confirmation round-trip. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three fields; the baseline would be 3. The description adds useful provenance for interviewId ('Ids come from compass_interviews_list') and ties the needs_confirmation return to the approvalId field, giving extra value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Kills an interview's invite link') and even describes the observable effect ('the guest's next visit sees that the link is no longer active'). An agent can distinguish this from the invite-creating sibling without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete trigger scenarios — wrong recipient, changed mind, leaked link — which is strong positive guidance. It stops short of naming the explicit alternative (e.g. re-inviting via compass_interview_invite) or a when-not case, so it lands just below the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_interview_targetsWho should be interviewed about a pageARead-onlyInspect
Ranks the PEOPLE the map says know about a page (workflow, system, pain point): owns links first, then involved_in, then weaker edges. Each target carries contact email + role from their PERSON page and their latest interview (skip someone who just gave one — interview fatigue is real). Empty result = the map doesn't know an owner: ASK THE USER who runs this, create the PERSON page + owns link from the answer, and the map gets smarter. Use before compass_interviews_create to pick the interviewee.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page the knowledge gap is about. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 goes well beyond that, disclosing the ranking precedence, the skip rule for recent interviewees (interview fatigue), and the empty-result recovery procedure — real behavioral context. Minor gaps only (no pagination/limit behavior), so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the ranking purpose, then output contents, then the fallback, then the routing instruction — a logical order with little waste. The parentheticals are dense but each carries distinct information, so it is efficient without being terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 must describe returns — and it does: each target carries contact email, role, and latest interview. Combined with the ranking order and empty-result guidance, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so pageId and workspace are already documented in the schema. The description implies pageId means 'the page the knowledge gap is about' but adds no format or syntax detail beyond that. Baseline 3 is correct 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — ranks the PEOPLE the map says know about a page — and immediately narrows the domain (workflow, system, pain point). The ranking rule (owns first, then involved_in, then weaker edges) makes it unmistakable versus siblings like compass_interviews_create or compass_step_claims_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use before compass_interviews_create to pick the interviewee.' It also names the alternative action when the result is empty (ask the user, create PERSON page + owns link), so both the happy path and the fallback are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_links_createConnect two Compass pagesAInspect
Creates a typed, directed edge between two pages — the knowledge graph's connective tissue. Canonical directions: PERSON or ROLE owns WORKFLOW/SYSTEM/PRIORITY, PERSON or ROLE involved_in WORKFLOW, PERSON holds ROLE, WORKFLOW uses SYSTEM, SYSTEM uses SYSTEM, PAIN_POINT affects WORKFLOW/SYSTEM/PERSON/ROLE, DOCUMENT documents anything, PRIORITY contributes_to PRIORITY (a priority that ladders up to a bigger one; each ladders up to at most one, and choosing a new one moves it; a priority has one owner the same way), UNIT part_of UNIT and ROLE or PERSON part_of UNIT (the org chart: one parent each; a UNIT's lead owns it, one owner), relates_to as fallback. Prefer attaching responsibilities to the ROLE and linking the PERSON to it with holds — the role outlasts whoever is in it. Pass validFrom / validTo when the source says when it was true ('took over approvals in March'), and sourceKind + sourceId for who said so (the interview or page you learned it from). Idempotent on an open (from, to, kind) edge — re-creating one returns it. May return needs_confirmation; tell the user what you're proposing, wait for their approval, then re-call with the approvalId.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Edge type, in canonical direction. | |
| note | No | ≤500-char qualifier when the kind alone undersells it. | |
| source | No | Provenance label. Defaults AI_ACCEPTED (agent writing under live human direction); pass USER for human-driven scripts. | |
| validTo | No | When it stopped being true (YYYY-MM-DD). Only for a relationship that has already ended — recording history. | |
| sourceId | No | Id of the interview, email thread, Prism report or page named by sourceKind. | |
| toPageId | Yes | Edge target page id. | |
| validFrom | No | When the relationship started being true (YYYY-MM-DD). Omit when unknown. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| fromPageId | Yes | Edge source page id. | |
| sourceKind | No | Who says this is true: an interview, an email thread, a Prism desk-research report (prism_report), a page (a DOCUMENT, or the PERSON who told you), or the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) by disclosing idempotency on an open (from, to, kind) edge and the needs_confirmation/approvalId round-trip that requires pausing for human approval. These are non-obvious behavioral traits that directly affect how the agent calls the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and nearly every sentence carries domain knowledge that earns its place. However, it is a single dense paragraph mixing kind semantics, temporal guidance, provenance, and the confirmation flow, which makes it harder to scan than a structured layout would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema, the description covers the domain rules (canonical directions, one-parent constraints on PRIORITY and UNIT, idempotency) and the return-side confirmation behavior, leaving no material gap an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: it explains the semantic direction of each `kind` enum value (e.g. PERSON owns WORKFLOW, PAIN_POINT affects WORKFLOW), the purpose of validFrom/validTo, and the sourceKind/sourceId pairing. This lifts it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource — 'Creates a typed, directed edge between two pages' — and frames it as the graph's connective tissue. This is immediately distinguishable from the sibling mutation/read tools (compass_links_update, compass_links_delete, compass_page_links_list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is unusually rich on when-to-use: it enumerates canonical directions per kind and gives a clear preference rule ('Prefer attaching responsibilities to the ROLE... the role outlasts whoever is in it'). It also tells the agent when to pass validFrom/validTo and sourceKind/sourceId. It does not explicitly name when to reach for compass_links_update instead, so it stops short of full alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_links_deleteRemove a connection between two pagesADestructiveInspect
Deletes one edge from the graph (the pages stay). Use only when a connection was never true — the system isn't used by that workflow, it was recorded by mistake. When a relationship WAS true and has stopped (the person left the team, moved roles), end it with compass_links_update validTo instead, so the history stays. Link ids come from compass_page_links_list. Re-creating the same edge later revives it. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| linkId | Yes | Id of the link (from compass_page_links_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds materially important behavior beyond them: the delete is edge-only (pages survive), the edge can be revived by re-creating it, and the call may return `needs_confirmation` (matching the approvalId flow in the schema). Reversibility and the confirmation gate are exactly the traits an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and scope, then the decision rule, then the id source and reversibility note. Every sentence carries distinct, actionable information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 3-param tool with full schema coverage, destructive annotations, and no output schema, the description covers the decision criteria, the confirmation/approval path, and reversibility. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (linkId, workspace, approvalId) are already fully documented in the schema. The description only restates that link ids come from compass_page_links_list, which the schema already says — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource — 'Deletes one edge from the graph' — and immediately disambiguates scope with '(the pages stay)'. It is clearly distinguishable from its siblings compass_links_create, compass_links_update, and compass_page_links_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ('only when a connection was never true... recorded by mistake') and an explicit when-NOT-to-use case, naming the alternative tool and its parameter ('end it with compass_links_update validTo instead, so the history stays'). This is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_links_updateChange a connection's reading, note, or datesADestructiveInspect
Edits an existing edge between two pages: its kind (how the two relate), its note, and/or when it was true (validFrom / validTo). Use kind to CORRECT a connection typed wrongly — 'Dana doesn't own billing, she's involved in it'. Use validTo to END one that used to be true — 'Dana handed approvals to Sam in March' ends Dana's edge in March (then create Sam's from March); the old edge stays as history. Don't delete a relationship that ended; end it. Link ids come from compass_page_links_list. Fails with conflict when the new reading already exists between the same two pages (delete this one instead). May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | New edge type, in canonical direction. | |
| note | No | New qualifier note (≤500 chars); empty string clears it. | |
| linkId | Yes | Id of the link (from compass_page_links_list). | |
| validTo | No | When it stopped being true (YYYY-MM-DD) — ends the relationship; null reopens it. | |
| validFrom | No | When it started being true (YYYY-MM-DD); null clears it. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that history is preserved (the old edge stays as history), that a conflict error is raised when the new reading already exists, and that the call may return needs_confirmation. This is meaningful mutation/error/approval context for a destructive write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and dense with useful detail; every clause is actionable. It is on the long side with two inline examples, but no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, the description supplies the missing return/error behavior (conflict, needs_confirmation) and the lifecycle semantics an agent needs to call it correctly. Nothing substantive is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real semantic meaning: it frames kind as a correction mechanism and validTo as a relationship terminator with an example. It does not, however, clarify validFrom or the approvalId/workspace plumbing beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Edits) and resource (an existing edge between two pages) and enumerates the mutable aspects (kind, note, validFrom/validTo). It is clearly distinguished from siblings compass_links_create and compass_links_delete, which handle the creation and removal ends of the lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to use each field: kind to CORRECT a mistyped connection, validTo to END a relationship that used to be true. It names the alternative behavior ('Don't delete a relationship that ended; end it' and 'delete this one instead' on conflict) and points to compass_page_links_list for link ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_map_viewView the Compass map (rendered image)ARead-onlyInspect
Renders the workspace's visual map to an image and returns it so you can SEE it the way the user does when they open Map: a transit-style map seen from above. Each workflow is a colored tile with a short code; people are round figures, systems are small squares with a drum, other pages are plain tiles, each named underneath. Lines along the grid join linked pages, solid between a workflow and what it touches, dashed between other pages; pages that link to each other more than to the rest gather into named regions on a pale ground plate, and pages connected to nothing sit together in a "Not connected" plate. zv1's drafts that nobody has accepted are drawn faint. Use this when the user asks about the shape of their map, where things cluster, what connects to what, or anything spatial. The text part counts the pages of each type, the links, and how many pages are unconnected, plus mapUrl. The image is for you to look at; do NOT put it in your reply as a markdown image (the chat can't show it). When the user should see the map, link mapUrl — e.g. [Open your map](mapUrl) — and describe what you saw.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and non-destructive behavior, but the description adds substantial context beyond them: it explains the rendered image contents, the text summary fields, how unconnected pages and drafts are drawn, and the critical presentation rule not to put the image in a markdown reply. This is unusually complete behavioral guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and mostly earns its length by explaining how to interpret the visual output and how to present mapUrl. The detailed legend is useful for this visual tool, though some phrasing could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining both return components: the rendered image and the text summary with counts, links, unconnected pages, and mapUrl. It also tells the agent what to do with each, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, workspace, and schema description coverage is 100%, so the schema already explains its default/override behavior and limitations. The description adds no workspace-specific semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (renders the workspace's visual map to an image) and precisely what the result represents: a transit-style map with named tiles, figures, squares, link styles, and regions. It clearly distinguishes this visual/spatial tool from page-listing or search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: when the user asks about the shape of their map, where things cluster, what connects to what, or anything spatial. It also tells the agent how to present the result afterward, including linking mapUrl rather than embedding the image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_acceptAccept an AI-proposed opportunityADestructiveInspect
The review verb for the Inbox: promotes an AI-PROPOSED opportunity (from compass_opportunities_propose or the opportunity scout) into the workspace's own pipeline. compass_opportunities_set_status does NOT do this — a proposal stays in the Inbox until accepted. Optional status decides its lane in the same step (BACKLOG to park it, EXPERIMENTING to start it); omitted, it lands in NEW. Fails with not_proposed when the row isn't an AI proposal. Ids come from compass_inbox_list / compass_opportunities_list. May return needs_confirmation — name the proposal and wait.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Lane to place it in on accept (default NEW). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| opportunityId | Yes | The AI-proposed opportunity's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses important behavior: default lane when status is omitted, special lane semantics for BACKLOG and EXPERIMENTING, the not_proposed failure for non-AI proposals, and the needs_confirmation two-step flow. These are exactly the kind of operational details annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: purpose first, then sibling contrast, status semantics, failure mode, id source, and confirmation behavior. Every clause contributes useful information, though the single long paragraph is heavier than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential context an agent needs: the proposal-only constraint, the optional status lane, failure behavior, id sources, and the confirmation flow. Nothing critical appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds meaning by explaining what the status lanes do (BACKLOG parks, EXPERIMENTING starts, omitted lands in NEW) and by identifying where opportunityId values come from. It does not fully explain the workspace or approvalId parameters, but those are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('promotes an AI-PROPOSED opportunity ... into the workspace's own pipeline') and explicitly distinguishes it from the nearest sibling, compass_opportunities_set_status. An agent can identify what this tool uniquely does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool versus compass_opportunities_set_status ('set_status does NOT do this — a proposal stays in the Inbox until accepted'), names where ids come from, and states the failure condition (not_proposed) and confirmation flow. This is near-complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_createCapture an opportunityAInspect
Record a change — a fix, a chore, a new step, or an experiment worth trying. Anchor it to a workflow page when one fits (compass_pages_list); leave unanchored otherwise. It lands in the board's first status unless you name another (compass_statuses_list). Set experiment only when the user wants it measured against the Ledger. May return needs_confirmation — summarize and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to file it under. | |
| label | Yes | ≤200 chars, the change in one line. | |
| links | No | Where the work also lives — issue, ticket, PR or doc URLs. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| experiment | No | Measure it against the Ledger. Default false. | |
| statusName | No | Start in this status (a name from compass_statuses_list). | |
| description | No | What the change is, and why it's worth doing. | |
| workflowPageId | No | Workflow page to anchor to, when one fits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnly=false, openWorld=false, destructive=false, the description adds real behavioral context: the record lands in the board's first status by default, and the call may return `needs_confirmation` requiring the agent to summarize and wait for approval. That approval-loop disclosure is meaningful and not derivable from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, each carrying distinct information (what to record, anchoring rule, default status, experiment condition, approval flow), with the core action front-loaded. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-param creation tool with no output schema, the description covers the essential behaviors: default status placement, anchoring, the experiment flag, and the needs_confirmation return path. It is largely complete, though it could say more about what an accepted opportunity returns or how it relates to compass_opportunities_propose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic nuance beyond the schema: the default status behavior for statusName, and the intent condition for `experiment` (only when measured against the Ledger). It does not add meaning for label, tags, links, or description, which rely entirely on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Record a change") and enumerates the kinds of changes (fix, chore, new step, experiment), which is more concrete than the title alone. It does not, however, clearly differentiate this create tool from close siblings like compass_opportunities_propose or compass_changes_upsert, leaving the agent to 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable conditions: anchor to a workflow page "when one fits," otherwise leave unanchored, and set `experiment` only when the user wants it measured against the Ledger. It routes to compass_pages_list and compass_statuses_list for lookups. It stops short of explaining when to prefer this over compass_opportunities_propose/accept, so no explicit alternative selection is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_deleteDelete an opportunityADestructiveInspect
Removes an opportunity from the pipeline (soft delete). For an AI proposal the user doesn't want, this is the dismiss verb; for a captured experiment that was a duplicate or a mistake, the remove verb. To conclude a real experiment without evidence, prefer compass_opportunities_set_status REJECTED — that keeps the record. Ids come from compass_opportunities_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id, from compass_opportunities_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds value beyond that by disclosing that the delete is a soft delete (record preservation) and that the call may return `needs_confirmation`, hinting at an approval flow that the annotations do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its soft-delete qualifier are front-loaded, followed by routing guidance and the id source. Sentences earn their place, though the 'dismiss verb / remove verb' metaphor phrasing is slightly more elaborate than a terse statement would require.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly carries the behavioral burden: it explains the soft-delete semantics, the confirmation flow, and correct usage relative to siblings. It is nearly complete, only omitting any detail about downstream effects on linked records or workspace scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description adds provenance for opportunityId ("Ids come from compass_opportunities_list") and ties the needs_confirmation behavior to the approvalId parameter's purpose, adding meaning beyond the raw field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (removes) and resource (opportunity) and immediately qualifies it as a soft delete, which materially changes what the agent expects. It also names the sibling it must not be confused with (compass_opportunities_set_status) and the verb-family nuance against other opportunity operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: use this as the dismiss verb for unwanted AI proposals, the remove verb for duplicate/mistaken captured experiments, and prefer set_status REJECTED when concluding a real experiment without evidence. This is exactly the when/when-not/alternative guidance the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_listList Compass opportunitiesBRead-onlyInspect
The workspace's changes — fixes, chores, new steps, experiments. Each carries statusName (the workspace's own word for where it is) and statusCategory (TRIAGE undecided, BACKLOG not started, ACTIVE in progress, DONE, CANCELED dropped), plus the older lane key in status. experiment: true marks a change measured against the Ledger: ledgerEntryId null means no expectation registered; ledger.verdict carries confirmed/missed after settlement. Scores (value/feasibility/risk) and a workflow anchor are optional. Filter by lane key in status or by workflowPageId; compass_statuses_list has the status names.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter to one lane. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| workflowPageId | No | Only opportunities anchored to this workflow page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes well beyond that, disclosing the shape of returned items: statusName vs statusCategory semantics, the legacy `status` lane key, the `experiment`/`ledgerEntryId` null-means-no-expectation rule, and `ledger.verdict` values after settlement. This is meaningful behavioral context that an agent would otherwise have to discover empirically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is information-dense but not front-loaded: the opening sentence describes the resource rather than stating what the tool does, so an agent scanning the first clause does not immediately learn the operation. Most sentences carry real payload, but the heavy backtick-heavy prose and lack of a clear action-first structure hurt scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns and does so well — item fields, status semantics, experiment/ledger linkage, optional scores and workflow anchor. It is nearly complete for a zero-required-param list tool, though it omits pagination, result limits/ordering, and default-scope behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some value by explaining that `status` holds a 'lane key' and by mapping statusCategory stages (TRIAGE/BACKLOG/ACTIVE/DONE/CANCELED), but it does not clarify the relationship between the schema's lane enum values (NEW, QUALIFYING, EXPERIMENTING, SETTLED, REJECTED) and those categories, nor add format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines the returned resource ('the workspace's changes — fixes, chores, new steps, experiments') in rich detail, but never states the action itself — the fact that this enumerates opportunities is carried only by the name/title. It also does not differentiate this list operation from siblings such as compass_opportunities_propose or compass_opportunities_create. Purpose is inferable from the title but the description alone is vague about the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete filtering guidance ('Filter by lane key in `status` or by workflowPageId') and points to a companion tool for status names ('compass_statuses_list has the status names'), which is genuinely useful routing. However there is no when-to-use versus when-not-to-use statement, no mention of what it excludes, and no indication of when a caller should prefer a different listing tool (e.g. compass_pages_list) instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_mark_implementedRecord that the change landedAInspect
The measurement window's boundary: when the user says the experiment's change actually shipped / went live / rolled out, record the landing date. Readings before it are baseline; after it, evidence of effect. Recorded once — it cannot move afterward, so confirm the date. Attaches to the linked Ledger entry as evidence. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ISO date the change landed — omit for today. | |
| note | No | What shipped, if worth recording. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| applyToMap | No | Also move the map from the landing date: who does the change's steps, and how long they take, change as the change's effects say (automate, reassign, assist, relax a check, remove). Confirm with the user first; it can't be undone. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id, from compass_opportunities_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a non-destructive mutation. The description adds crucial behavioral context beyond annotations: the record is irreversible ('cannot move afterward'), it attaches to the linked Ledger entry as evidence, and it may return `needs_confirmation`, implying an approval flow. These are important for correct use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each carrying useful information. It is mostly front-loaded, though the opening phrase 'The measurement window's boundary' is slightly abstract before the concrete action is stated. No wasteful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation with irreversible effects and an approval flow, the description covers the core action, trigger, irreversibility, side effect (attaching evidence), and potential return value (`needs_confirmation`). It is complete enough for an agent to call correctly, though it does not explain every parameter's effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all parameters. The description does not add parameter-specific meaning beyond the general concept of recording a date, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: recording the landing date of an experiment's change, framed as the measurement window boundary. It clearly distinguishes this from status changes or accept/propose siblings by focusing on the irreversible landing date and its baseline/effect implications. However, it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger is clear: 'when the user says the experiment's change actually shipped / went live / rolled out.' It also advises confirming the date because it cannot move afterward. No alternatives or exclusions are mentioned, but the context is sufficiently defined for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_proposePropose an AI opportunityAInspect
File an AI-PROPOSED opportunity into the workspace's review queue — the scouting verb (the opportunity-scout routine's main move). Unlike compass_opportunities_create this needs NO approval: the proposal itself is the human gate — it lands in the Compass Inbox and the cockpit's Needs-you for accept/dismiss. Check compass_opportunities_list first so you never duplicate an idea. Anchor to a workflow page when one fits; score value/feasibility/risk 1–5.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ≤200 chars, the opportunity in one line. | |
| reasoning | No | One or two sentences on why you're proposing this. | |
| riskScore | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| valueScore | No | ||
| description | Yes | What it is and why it's worth trying, grounded in the map. | |
| workflowPageId | No | Workflow page to anchor to, when one fits. | |
| feasibilityScore | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real post-write context beyond them: the record lands in the Compass Inbox and Needs-you for accept/dismiss, and approval is not required because the proposal itself is the gate. It stops short of auth/rate-limit detail but meaningfully explains consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core purpose and the sibling distinction before moving to prerequisites and parameter guidance. Dense but every sentence carries actionable information; em-dash clauses are slightly packed but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param mutation tool with no output schema, the description covers purpose, when-to-use, dedup precondition, anchoring, and scoring semantics. The main residual gap is that it never states what the call returns (e.g., an ID), which an agent would need despite the inbox description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 63%, and the description compensates for the gap: valueScore/feasibilityScore/riskScore have no schema descriptions, yet the description explains them as 1–5 scores, and it explains workflowPageId as an optional anchor 'when one fits'. This adds meaning the schema does not carry, above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (file/propose) + resource (AI-PROPOSED opportunity) with an explicit scope note that it targets the review queue. It directly differentiates itself from the sibling compass_opportunities_create, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when to use this versus the alternative ('Unlike compass_opportunities_create this needs NO approval') and gives a precondition ('Check compass_opportunities_list first so you never duplicate'). Both the alternative and the exclusion condition are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_register_expectationPre-register an experiment's expectationAInspect
The honesty mechanism: write what the experiment is expected to change BEFORE evidence exists. Creates a Ledger decision entry and links it to the opportunity — never backfill an expectation to match an outcome. Bind a metric (ledger_metrics_list) + comparator + target when the expectation is measurable; readings then land on the entry as evidence automatically. One expectation per opportunity — revise by superseding in Ledger. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target value, in the metric's unit (hours for time). | |
| deadline | No | ISO date the expectation is due by. | |
| metricId | No | Ledger metric to bind (requires target). From ledger_metrics_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| comparator | No | ||
| fromRollup | No | Instead of metricId: measure it off the change's workflow roll-up — a step's (nodeId) or the whole workflow's hands-on time, waiting, labor, or hard cost, per run or per month. Creates a daily-fed metric with the last 30 days rebuilt from the map's history, so the before is on record. Needs a target; comparator defaults to <=. | |
| expectation | Yes | One sentence — what we expect this to change. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id, from compass_opportunities_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly=false, destructive=false). The description adds real behavioral context beyond that: it creates a linked Ledger decision entry, readings flow in automatically as evidence, revisions happen by superseding, and it may return needs_confirmation. It doesn't fully explain the confirmation/approval round-trip, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first clause, then layers conditions and mechanics in tight, waste-free sentences. No filler, and the honesty framing is placed where an agent reads first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does cover the notable return case (needs_confirmation) plus the downstream evidence behavior. For a 9-parameter tool with a nested object and an approval flow, it is nearly complete, lacking only explicit guidance on the approvalId sequencing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (89%), so baseline is 3, but the description adds meaning beyond the schema by tying metricId + comparator + target together as a binding unit and clarifying the evidence flow. The per-parameter details (target, deadline, fromRollup) are already well documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (pre-register/write) and resource (an experiment's expectation on an opportunity), and frames the unique value proposition ('the honesty mechanism') that no sibling offers. An agent can distinguish it from compass_opportunities_create or ledger_entries_create without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear timing ('BEFORE evidence exists', 'never backfill') and names the related tools (ledger_metrics_list) needed to make the expectation measurable, plus the one-per-opportunity rule with the supersede-in-Ledger alternative. It stops short of explicitly stating when to prefer this over a plain ledger entry or opportunity update, so it is clear context but without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_set_statusMove a change to another statusADestructiveInspect
Move a change to one of the workspace's statuses, by name (compass_statuses_list has them — e.g. "In review"). The old lane keys (NEW / QUALIFYING / BACKLOG / EXPERIMENTING / SETTLED / REJECTED) still work and land on that lane's default status. Only changes marked as experiments follow the Ledger: when an experiment enters an In progress status with no registered expectation, offer compass_opportunities_register_expectation; when it enters Done with its Ledger entry still open, offer ledger_entries_settle. Other changes just move. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | A lane key. Use this or `statusName`. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| statusName | No | A status name from compass_statuses_list. Use this or `status`. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id, from compass_opportunities_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the mutation risk is known; the description adds real value by disclosing the needs_confirmation/approvalId flow and the conditional Ledger side effects that follow a status move. It stops short of describing reversibility or permissions, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then branches into status-name sourcing, legacy keys, Ledger conditionals, and the confirmation signal. Every sentence carries distinct operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the confirmation handshake and downstream tool routing well. It does not state what a successful response contains, but in the absence of an output schema this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully clarifies the status/statusName relationship ('the old lane keys still work and land on that lane's default status') and directs where status names come from. This is more than the schema conveys about defaulting behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (move) and resource (a change/opportunity) plus the target (a workspace status), and names the sibling compass_statuses_list for obtaining status names. A reader can distinguish it from compass_opportunities_update and other siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use statusName from compass_statuses_list, legacy lane keys still work; only experiments follow the Ledger, with named follow-ups (compass_opportunities_register_expectation, ledger_entries_settle) and the exact conditions that trigger them, while 'Other changes just move.' It tells the agent when to reach for other tools and when to do nothing further.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_opportunities_updateEdit an opportunityADestructiveInspect
Corrects an opportunity's content: label, description, priority, what done means, the 1–5 value / feasibility / risk scores, the owner (a PERSON page), notes, tags, workflow anchor, external link, visibility. Fields you omit are untouched; the lane is NOT here — move it with compass_opportunities_set_status. Opportunity ids come from compass_opportunities_list. May return needs_confirmation — say what you're changing and wait.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tag set — replaces existing tags. | |
| label | No | New one-line label (2–200 chars). | |
| assignee | No | The workspace member doing the work, by email or user id; null unassigns. They're notified. | |
| doneWhen | No | What's true when it's done, that someone else could check (≤1,000 chars). | |
| priority | No | How soon it matters; null clears it, and the map's suggestion shows again. | |
| riskScore | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| experiment | No | Measure it against the Ledger (expectation when it starts, verdict when it's done). | |
| valueScore | No | ||
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New description (≤5,000 chars). | |
| externalUrl | No | Where the doing happens off-platform (URL); null clears. | |
| ownerPageId | No | PERSON page id who owns the work; null clears. | |
| opportunityId | Yes | The change's key (e.g. ACME-12) or id, from compass_opportunities_list. | |
| workflowPageId | No | Workflow page to anchor to; null un-anchors. | |
| feasibilityScore | No | ||
| qualitativeNotes | No | Free-form notes (≤20,000 chars) — replaces the current notes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=false, so the write profile is covered. The description adds genuinely useful behavior beyond that: partial-update semantics ('fields you omit are untouched') and the confirmation round-trip. It stops short of noting that tags/notes are replaced rather than merged, which the schema covers instead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the field list, then the constraints (partial update, sibling exclusion, id source, confirmation), with no filler. The single dense sentence is efficient, though slightly list-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation with no output schema, the description covers partial-update behavior, id sourcing, the status-tool boundary, and the confirmation flow. Only the replacement-vs-merge nuance for tags/notes is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents nearly every parameter. The description's field list largely mirrors the schema and adds little new syntax, though flagging ownerPageId as 'a PERSON page' is a helpful clarification. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (corrects/edits) and resource (an opportunity's content) and enumerates the editable fields, so the scope is unambiguous. It explicitly distinguishes itself from compass_opportunities_set_status by declaring the lane is NOT handled here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use compass_opportunities_set_status to move the lane, and get ids from compass_opportunities_list. It also prescribes the interaction protocol for the needs_confirmation response (say what you're changing and wait).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_page_links_listList a page's connectionsARead-onlyInspect
All typed edges touching one page, both directions, each hydrated with the other endpoint's page summary. Use this to understand a subject's neighborhood before adding to it. Current connections only, unless includeEnded — then also relationships that have ended (validTo in the past), for questions like who handled this before.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeEnded | No | Also return connections that have ended. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, so safety is covered; the description goes further with edge directionality, hydration with endpoint summaries, and the temporal filtering rule for includeEnded (validTo in the past). This is meaningful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. Return shape and the includeEnded toggle are front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially explains return content (edges hydrated with endpoint summaries), which is what an agent needs. Minor: it doesn't detail pagination or the summary fields, but that is a small gap for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning to includeEnded beyond the schema's terse wording—clarifying that ended relationships have validTo in the past and are useful for historical questions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the typed edges touching one page), explicitly notes scope (both directions, hydrated with the other endpoint). An agent can distinguish this from compass_links_create/update/delete at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: 'understand a subject's neighborhood before adding to it' and 'who handled this before' for includeEnded. No alternative sibling is explicitly named, so it stops short of a 5, but the when-to-use scenarios are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_createCreate a Compass pageAInspect
Creates a typed page in the workspace's Compass compendium. Check compass_pages_list first — don't create a page for a subject the map already has; link to it instead. May return needs_confirmation — if so, tell the user what you're proposing, wait for their approval, then re-call with the approvalId. Only record what the human has actually told you.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Markdown body shaped to the type (steps for WORKFLOW, role/contact sections for PERSON, etc.). | |
| tags | No | Optional tags. | |
| type | Yes | Page type for this subject. PERSON = a specific individual; ROLE = a job, separate from whoever holds it (people hold roles); VALUE = something the business won't sacrifice; PRIORITY = an outcome it's pushing toward; AUDIENCE = who the work is for; OFFERING = what the business delivers. | |
| title | Yes | ≤80 chars, sentence case, no filler verbs. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the description isn't needed for the safety profile. It adds real non-annotated behavior: the possible needs_confirmation response, the requirement to get user approval and re-call with approvalId, and a data-fidelity constraint ('only record what the human has actually told you'). It doesn't describe the created return shape, but no output schema exists so a full 5 isn't warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the create action, followed by the dedupe check, the approval flow, and the fidelity constraint. Every sentence earns its place with no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param create tool with no output schema, the description covers purpose, routing, and the non-obvious confirmation round-trip well enough to call correctly. It stops short of explaining downstream effects of the created page or the full type taxonomy usage, but the schema fills those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters (including the enum for visibility and the type taxonomy) are already fully documented. The description only ties the approvalId to the confirmation flow, which the schema explains anyway, so it adds little beyond structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates) plus resource and scope (a typed page in the workspace's Compass compendium), which cleanly separates it from compass_pages_update/list/search. It even names compass_pages_list as the sibling to consult first, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not guidance: 'Check compass_pages_list first — don't create a page for a subject the map already has; link to it instead.' It also documents the confirmation flow and what to do when needs_confirmation is returned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_deleteDelete a Compass pageADestructiveInspect
Moves a page to the trash (soft delete — its connections and anchored opportunities go with it, and compass_pages_restore brings the whole set back). Use this to REMOVE a page you or an extraction created wrongly, or one the user says no longer belongs on the map; to fix a wrong title or body, use compass_pages_update instead. Page ids come from compass_pages_list / compass_pages_search. May return needs_confirmation — name the page and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Id of the page to delete. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description adds substantial context beyond that: it is a soft delete, connections and anchored opportunities are cascaded with it, restore reverses the whole set, and it may return needs_confirmation requiring the page to be named and approval awaited. That is rich behavioral disclosure covering scope of destruction and reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core behavior (trash/soft delete) before the routing guidance, and every clause earns its place: scope of cascade, alternative tool, id provenance, confirmation protocol. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers what an agent needs: the mutation's effect, cascading scope, reversibility, id source, and the needs_confirmation approval loop. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents pageId, workspace, and approvalId, and the description adds provenance ('Page ids come from compass_pages_list / compass_pages_search') plus the confirmation/approval flow context. Useful beyond the schema, though it does not restate the workspace-scoping semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Moves a page to the trash') and immediately qualifies it as a soft delete. It explicitly contrasts itself with siblings compass_pages_restore and compass_pages_update, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('REMOVE a page you or an extraction created wrongly, or one the user says no longer belongs') and an explicit alternative ('to fix a wrong title or body, use compass_pages_update instead'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_getGet a Compass pageARead-onlyInspect
Fetches one Compass page by id, including its full Markdown body, header fields, and any attached Napkin sketches — view an attached sketch's actual drawing with napkin_boards_view (its boardId) before discussing it.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page id (from compass_pages_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it discloses the payload contents (full Markdown body, header fields, attached sketches), which tells the agent what to expect in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the core action and result contents. The trailing em-dash aside about napkin_boards_view is useful but slightly crowded into the same sentence, costing a point on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns, and it does so adequately (body, header fields, sketches). Annotations cover the safety profile and the schema covers both parameters, so the remaining gaps (error behavior, page-not-found handling) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (pageId and workspace) are already fully documented in the schema, including the per-call workspace override rules. The description only restates 'by id' and references boardId for a sibling tool, adding little beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetches) and resource (one Compass page by id), and enumerates what is returned (Markdown body, header fields, attached Napkin sketches). This clearly distinguishes it from compass_pages_list and compass_pages_search, which handle collections or querying rather than single-page retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage cue — view an attached sketch via napkin_boards_view before discussing it — which routes the agent to the right sibling for the sketch sub-task. It does not, however, state when to use this vs. compass_pages_list or compass_pages_search, so primary-tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_listList Compass pagesARead-onlyInspect
Lists pages in the active workspace's Compass compendium. Optional type filter narrows to one node type (WORKFLOW, PERSON, ROLE, SYSTEM, PAIN_POINT, DOCUMENT, VALUE, PRIORITY, AUDIENCE, OFFERING). Returns summaries, 50 at a time (limit / offset, total and nextOffset in the result) — fetch one with compass_pages_get for the full body. When you know what you're looking for, compass_pages_search is the better first call.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Narrow to a specific page type (WORKFLOW, PERSON, ROLE, SYSTEM, PAIN_POINT, DOCUMENT, VALUE, PRIORITY, AUDIENCE, OFFERING). | |
| limit | No | Page size, default 50. Prefer compass_pages_search when you know what you're looking for. | |
| offset | No | Skip this many, for the next page. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 real behavioral context beyond that: results are summaries (not full pages), paginated at 50 with limit/offset, and the response carries total and nextOffset. It does not mention workspace-scoping behavior, but the schema covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose and scope, then the type filter, then pagination and routing. No sentence is expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description compensates by stating that the return is summaries with total/nextOffset, so an agent knows both the shape and the paging loop. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the type enum and the limit/offset pagination model, which largely duplicates the schema rather than adding format or syntax detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists pages in the active workspace's Compass compendium') and immediately distinguishes the tool from compass_pages_get (full body) and compass_pages_search (better first call when you know the target). An agent can select it confidently 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use compass_pages_search when you know what you're looking for, use compass_pages_get to fetch a full body, and this tool otherwise. Both alternatives are named with the conditions that favor them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_restoreRestore a deleted Compass pageAInspect
Puts a trashed page back on the map, together with exactly the connections and opportunities its delete took. Use when the user wants a deleted page back (the pageId from the earlier compass_pages_delete, or from the Compass trash). Fails with not_found when the page is already live or never existed. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Id of the deleted page. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, destructive=false, openWorld=false, which says little about what this write does. The description adds the crucial cascade behavior (connections and opportunities are restored along with the page), the not_found failure mode for already-live or nonexistent pages, and the needs_confirmation return path — all behavior beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the action and its cascade, the use condition, and the failure/confirmation semantics. Front-loaded with the operation before the routing advice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the restore semantics, cascade effects, error case, and confirmation path, which is nearly everything an agent needs. The only gap is that the needs_confirmation follow-up (gathering approval) is not spelled out in the description, though the approvalId schema field does cover it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds real value on top by explaining where pageId originates (a prior compass_pages_delete or the trash) rather than just 'Id of the deleted page'. It does not explain the approvalId follow-up flow, which the schema carries alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('puts a trashed page back on the map') and goes further by naming the scope of restoration — the connections and opportunities that the delete removed. An agent can distinguish this from compass_pages_delete and compass_pages_get without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (user wants a deleted page back) and where the pageId comes from (the earlier delete call or the Compass trash). It also implies when not to use it via the not_found conditions, but never names an alternative tool or states an exclusion rule directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_searchSearch Compass pagesARead-onlyInspect
Keyword search over page titles, bodies, and tags (case-insensitive substring match), paginated. The fast way to check whether a subject already has a page before creating or linking. Returns summaries with a 300-char body snippet — fetch full text with compass_pages_get.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search term. Use the most distinctive word or phrase for the subject ('Zendesk', 'invoice approval') — not full sentences. | |
| type | No | Narrow to one page type. | |
| limit | No | Results per page, 1-25. Default 10. | |
| offset | No | Pagination offset. Default 0. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, non-destructive, closed-world profile, so the bar is lower. The description adds genuinely useful behavior beyond that: match semantics, pagination, and the fact that results are truncated to a 300-char body snippet with a pointer to fetch full text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the operation and its scope, then the primary use case, then the return-format caveat. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to describe the return shape (summaries with a 300-char snippet) and the path to full content. Combined with the annotations and fully-described schema, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters (including `workspace` auth nuance and `q` guidance). The description adds nothing parameter-specific beyond noting the search fields and pagination, which is the correct baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Keyword search over page titles, bodies, and tags') and precisely characterizes matching semantics (case-insensitive substring). It also distinguishes itself from the sibling `compass_pages_get`, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('fast way to check whether a subject already has a page before creating or linking') and an explicit alternative for full text (`compass_pages_get`). It does not differentiate from the other sibling `compass_pages_list`, which is a plausible source of confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_pages_updateUpdate a Compass pageADestructiveInspect
Edits an existing page's title, description, body, tags, header fields, or visibility — use this to FIX what you (or an extraction) got wrong instead of creating a duplicate. Fetch the current page with compass_pages_get first and preserve what the human wrote; title / body / tags replace the field wholesale, while headerFields MERGES over the current ones (send only the keys you're changing — 'set the owner' leaves status alone). Page ids come from compass_pages_list. May return needs_confirmation — tell the user what you're changing, wait for approval, then re-call with the approvalId.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | New Markdown body — replaces the whole body. | |
| tags | No | New tag set — replaces existing tags. | |
| title | No | New title (≤200 chars). | |
| pageId | Yes | Id of the page to edit. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New one-line gallery summary (≤2,000 chars). | |
| headerFields | No | Partial header fields for the page's type (PERSON: role, email, …; WORKFLOW: owner, status, …) — merged over the current values; the server validates the merged result against the type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds the crucial nuance that title/body/tags replace wholesale (data loss) while headerFields MERGES, plus the needs_confirmation/approvalId flow. This is real behavioral context beyond the annotation. Minor gap: no statement of required permissions/scopes for editing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and field list; every clause is informative. Slightly dense with em-dashes and parentheticals, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the workflow, field-replacement semantics, the confirmation return path, and prerequisite fetches. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the replace-vs-merge distinction with a concrete example ('set the owner leaves status alone') and explains approvalId re-call semantics. It reinforces and slightly extends the schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Edits) and resource (an existing page), enumerates the editable fields, and explicitly distinguishes itself from compass_pages_create by telling the agent to fix rather than duplicate. An agent can select this over siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use this to FIX mistakes instead of creating a duplicate, fetch current state with `compass_pages_get` first, and get page ids from `compass_pages_list`. It also names the alternative and the condition that selects it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_priority_steps_findFind the steps behind a priority or valueAInspect
Reads every mapped workflow against one PRIORITY (or VALUE) and proposes the steps that move it (or where the business lives the value), one marked as what holds a priority back. Proposals wait for a person to keep them on the priority's page or in the Inbox, except in workflows someone tied to it (a serves link), where they're kept at once. Steps already tied or proposed aren't proposed again, so it's safe to run as the map grows. Use it after a priority is named and workflows are mapped, or when someone asks what moves a priority.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The PRIORITY or VALUE page id. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: proposals wait for a human unless a serves link ties the workflow (then kept at once), and dedup/idempotency ('steps already tied or proposed aren't proposed again, so it's safe to run as the map grows'). Annotations only cover read/write and destructiveness, so this human-confirmation workflow is genuinely new information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, but the long opening sentence is overloaded with nested parentheticals ('(or VALUE)', '(or where the business lives the value)') that hurt readability. The subsequent sentences are efficient, but it is denser than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the mutation semantics, the confirmation flow, and idempotency well enough for correct invocation. Return format is left implicit, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters documented, so baseline 3 applies. The description clarifies that pageId is a PRIORITY or VALUE page, which is a marginal semantic addition already implied by the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reads every mapped workflow against one PRIORITY/VALUE and proposes the steps that move it. This is clearly distinguishable from generic page/step siblings, though the parenthetical hedging ('or VALUE', 'or where the business lives the value') slightly muddies the single core action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions: 'Use it after a priority is named and workflows are mapped, or when someone asks what moves a priority.' Clear when-to-use context, but it never names an alternative tool (e.g. why not compass_step_suggestions_build), so it stops short of full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_process_diagram_ensureGive a workflow its steps diagramAInspect
Returns the Napkin diagram that holds a WORKFLOW page's steps, creating it when the page has none. If the page body has a ```mermaid block, it moves into the diagram verbatim (node ids kept, so changes anchored to a step still point at it) and leaves the body. Then edit the steps with napkin_diagrams_update using the returned diagramId. One diagram per workflow holds every step anyone has described — when two people describe the same process differently, add the steps to this one diagram rather than making a second. A step that is itself a workflow is a node whose meta ref is { type: 'page', id: <that workflow's page id> }. compass_pages_get returns processDiagramId when one exists. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The WORKFLOW page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response, after the user has approved. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false and destructiveHint=false, the description adds rich behavioral context: it creates the diagram when absent, moves any existing mermaid block verbatim into the diagram and leaves the page body, preserves node ids for step anchoring, enforces one diagram per workflow, and may return needs_confirmation. This goes well beyond the safety hints and explains side effects and approval flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and scope, then uses each subsequent sentence to add necessary edge-case rules, routing advice, and approval signaling. There is no filler or repetition; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential return signals (diagram, diagramId, needs_confirmation), idempotent creation, mermaid migration, and multi-user consolidation. The only minor gap is that it does not describe the full return payload shape beyond the diagram and diagramId, but it provides enough for an agent to call and handle the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 pageId, workspace, and approvalId in detail. The description adds only indirect context for approvalId via 'May return `needs_confirmation`' and does not elaborate on workspace behavior, leaving this at the baseline level for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Returns the Napkin diagram that holds a WORKFLOW page's steps, creating it when the page has none.' It distinguishes itself from siblings by describing get-or-create semantics and explicitly routing edits to napkin_diagrams_update, so an agent can tell it apart from napkin_diagrams_create or compass_pages_get without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: call this to obtain a workflow's steps diagram, then edit the returned diagramId with napkin_diagrams_update. It also names an alternative for checking existence ('compass_pages_get returns processDiagramId when one exists') and instructs adding steps to the single diagram rather than creating a second.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_roles_overviewRead how work is moving across every roleARead-onlyInspect
Every role in the workspace in one row each, changed or not: hours documented against its working month, hours a month saved, saved hours by stage (looking into, agreed, in place, confirmed, not placed yet), judgment work before and now, new work, and why a role wants attention (unproven savings, saved hours nobody is placing, no documented steps, no headcount). Plus totals. Use compass_role_story for one role's detail. Talk about roles, never about people.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/non-open-world, so the description focuses on payload substance: what each row contains, that unchanged roles are included too, and that totals are appended. It doesn't cover ordering, pagination, or size behavior for very large workspaces, which is a real gap for an 'every role' read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core scope statement is front-loaded, and every clause carries information about the returned fields. The stage enumeration and attention-reason list make the sentence long and dense, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return shape and it does: per-role row fields, totals row, inclusion of unchanged roles, and the sibling for drill-down. What's missing is operational detail — result ordering, volume limits, and whether attention reasons are always populated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspace parameter is fully documented in the schema, so the description adds no syntax or format detail. The phrase 'in the workspace' only echoes scope already stated by the parameter. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact resource (every role in the workspace, one row each) and enumerates the metrics produced: documented hours vs. working month, saved hours, saved-hours by stage, judgment work before/now, new work, and attention reasons. It is immediately distinguishable from compass_role_story, which is explicitly named as the single-role alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (compass_role_story) and the selection rule (one role's detail vs. all roles), and adds a framing constraint ('talk about roles, never about people'). It lacks an explicit when-not-to-use or prerequisite statement, but the routing guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_role_storyRead how a role's job is changingBRead-onlyInspect
One ROLE page's story: hands-on hours a month by kind of work (rote, judgment, relationship, sign-off) before its first change or Task landed and now; what landed and when; new work it took on (checks inside Tasks, Tasks it looks after, work a change added), with whether each has settled; the role's size (people × hours each, hoursAssumed when the hours are a full-time default) and how much of its month is documented; and the latest analysis, when someone ran one: options for where saved hours could go, each with the stage of its change (proposed = looking into, agreed, done = in place, confirmed, dropped), and skills. Saved hours in a role with under half its month documented are unproven: say so. Talk about the role, never about a person.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| rolePageId | Yes | The ROLE page's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe, closed-world read, so the description's job is to add interpretation context — and it does: it warns that saved hours are 'unproven' when under half the month is documented and it flags `hoursAssumed` as a full-time default rather than measured data. Those are real caveats an agent would otherwise get wrong. It says nothing about failure modes (unknown rolePageId, wrong page type) or the cost/size of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope statement is front-loaded, which is good, but the core is a single sprawling sentence built from semicolon-chained nested lists (kinds of work, new-work subtypes, stage values) that is hard to parse on first read. Every element is arguably load-bearing for a tool with no output schema, but the structure could be broken into scannable clauses or a short list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe returns, and it does so thoroughly — baseline vs current hours, event timing, adopted work and settlement, role sizing, documentation coverage, and analysis stages with their enum meanings. The main omission is error/edge behavior and confirmation of what identifies a valid ROLE page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only two parameters at 100% schema description coverage, the schema already carries the semantics, including the personal-token/workspace rule. The description adds no meaning about rolePageId beyond the schema's 'The ROLE page's id.'. `hoursAssumed` is referenced but it is a response field, not a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title plus opening phrase 'One ROLE page's story' gives a specific resource and scope, and the body enumerates exactly what data the page story contains (hours by work kind, what landed, new work, role size, latest analysis). An agent can tell this is a per-role read rather than a listing tool. It stops short of naming the near neighbors it differs from (compass_roles_overview, compass_pages_get, compass_transformations_read).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 compass_roles_overview, compass_pages_get, or compass_transformations_read, and no preconditions (e.g. that rolePageId must reference a ROLE-type page). The closing directives ('say so' when documentation is thin, 'talk about the role, never about a person') guide how to narrate the output, not when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_scenario_changesList the changes that reach a workflowARead-onlyInspect
Changes whose effects reach a WORKFLOW's steps — or any nested workflow's — plus changes anchored to it with no effects yet, each with what it does per step. Pass their ids to compass_workflow_rollup's changeIds to project the workflow after them.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The WORKFLOW page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower. The description adds real behavioral content beyond them: results include changes affecting nested workflows and changes anchored to the workflow with no effects yet, and each entry carries its per-step effect. That materially shapes what the agent expects back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned and followed by the actionable next step. The em-dash clause about nested workflows is slightly tangled but every sentence earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return content, and it does so reasonably (changes with per-step effects, including nested and anchored ones). It omits ordering/pagination expectations and any workspace-param caveat, but for a two-parameter read tool this is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so pageId and workspace are already fully documented in the schema. The description adds nothing about either parameter (no format hints for the workflow page id, no workspace behavior), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (list changes reaching a workflow's steps) and adds scope detail about nested workflows and anchored-but-inert changes, so the agent knows this is a change-discovery query rather than a mutation. It differentiates from siblings partly through the rollup cross-reference, but does not contrast itself with nearby tools like compass_changes_upsert or compass_workflow_steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a genuine downstream instruction (pass returned ids to compass_workflow_rollup's changeIds to project the workflow), which names a sibling and a concrete next action. However, it never states when to call this tool versus alternatives, nor any prerequisites for the workflow state, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_statuses_listList the workspace's change statusesARead-onlyInspect
The statuses this workspace's changes move through, in board order — the names people use. Each sits in a group: Undecided (TRIAGE), Not started (BACKLOG), In progress (ACTIVE), Done (DONE), Dropped (CANCELED). Groups are stable across workspaces; names aren't, so use the names when talking to people and the groups when reasoning about progress. Move a change with compass_opportunities_set_status.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, non-destructive, closed-world profile, so the bar is lower. Beyond that, the description discloses genuinely useful behavior: the fixed group taxonomy (TRIAGE/BACKLOG/ACTIVE/DONE/CANCELED) and the key invariant that groups are stable across workspaces while names are customisable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is densely front-loaded: it states the resource, the return ordering, the group taxonomy, the stability caveat, and the routing pointer in a compact set of sentences. The parenthetical group codes are load-bearing rather than filler, though the sentence is fairly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with no output schema, the description supplies what an agent needs: what is returned (statuses, their names, their groups and ordering) and how to reason about the values. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single workspace parameter, so the schema already carries the semantics and baseline 3 applies. The description only alludes to workspace scoping indirectly ('this workspace's changes') without adding format or override details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource — listing the change statuses of a workspace — and clarifies that they come back in board order. It also distinguishes itself from the mutating sibling compass_opportunities_set_status, so an agent can pick this tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance on how to interpret and use the returned values (names when talking to people, groups when reasoning about progress) and routes the agent to compass_opportunities_set_status for the mutating counterpart. It stops short of an explicit when-to-call-this-vs-another-list-tool exclusion, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_step_claims_listList what's been said about a workflow's stepsARead-onlyInspect
Every claim about a WORKFLOW's steps, oldest first: the step (nodeId; null = the workflow as a whole), the role or person (subject), the relation, who says so (sourceKind + sourceLabel), when it was true (validFrom/validTo), and origin — AI_PROPOSED claims are waiting for a person to review. Claims that disagree coexist; each keeps its source.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | Narrow to one step. | |
| pageId | Yes | The WORKFLOW page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed world), so the description correctly focuses on behavior instead: oldest-first ordering, coexistence of disagreeing claims, source retention, and the AI_PROPOSED review state. These are real traits beyond the annotations, with only pagination/result-size behavior left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence plus a compact colon-delimited field list; every clause carries information about the returned shape. It is dense but not padded, and the ordering guarantee appears early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing the return shape, and it does so well (step, subject, relation, source, validity window, origin). Missing only minor operational detail such as result limits or pagination for large claim sets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: nodeId of null means 'the workflow as a whole' rather than a specific step, which materially affects how the filter is used. The workspace parameter semantics are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource – listing every claim about a WORKFLOW's steps – and the title reinforces it. It does not explicitly distinguish itself from the sibling compass_step_claims_propose, but the read/list scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is the read path for claims, and the note that AI_PROPOSED claims await human review hints at where the data comes from. However there is no explicit when-to-use, no mention of the propose sibling as the alternative, and no guidance on when the nodeId filter should be applied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_step_claims_proposePropose who does a workflow's steps and what inAInspect
Propose claims about who does what in a WORKFLOW, and what each step is done in, from what someone said. Each claim names a step (nodeId from compass_workflow_steps), a page (subjectPageId: a ROLE or PERSON, or an AUDIENCE when a customer or partner does the step; for uses a SYSTEM or DOCUMENT; for impacts a PRIORITY; for holds_to a VALUE), and a relation: owns (accountable for it), does (does the work), approves (signs off), consulted (asked for input), does_not_do (says they don't do it — an answer, not a gap), uses (the step is done in this SYSTEM, or with this DOCUMENT; a step a system runs on its own gets uses and no doer), impacts (the step moves this PRIORITY: where the priority is won or lost; pass limits: true on the one step holding it back most), holds_to (the business lives this VALUE at the step). Propose who and what in together, in one call per workflow. Claims land as proposals for a person to accept in Compass; they don't count until then, except in a conversation about the map's questions, where what the person tells you (sourceKind 'user') is kept straight away. Always say who said it: sourceKind 'interview' + the interview id, 'email_thread' + the thread id, 'prism_report' + the desk-research report id, or 'page' + the DOCUMENT or PERSON page id. Prefer the ROLE when the person speaks for their role, the PERSON when it's specific to them. Record a disagreement as its own claim rather than skipping it. When someone says a step happens that isn't in the diagram, add the step with napkin_diagrams_update first. Re-proposing an existing claim from the same source returns it.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | ||
| pageId | Yes | The WORKFLOW page id. | |
| sourceId | No | The interview, email thread, Prism report or page id, for those kinds. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| sourceKind | No | Who says so: 'interview', 'email_thread', 'prism_report', 'page', or 'user' (the person you're talking with). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: claims land as proposals pending acceptance, except sourceKind 'user' in a map-questions conversation which is kept immediately, and re-proposing from the same source returns the existing claim (idempotency). This is strong behavioral detail, though it doesn't describe limits like maxItems=50 coupling to error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and highly information-dense; nearly every clause earns its place. The nested parenthetical enumerating relation meanings is dense and slightly run-on, but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-parameter, no-output-schema mutation tool, the description covers attribution, idempotency, missing-step handling, and the 'user' exception, leaving nothing an agent needs in order to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, yet the description still adds real meaning: it decodes each relation, explains the subjectPageId type mapping per relation, and clarifies sourceKind/sourceId pairing and the 'user' special case. Substantially more than the schema alone conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (propose) and resource (step claims about who does what in a workflow), and the parenthetical detail about relations and subject page types makes it unmistakable against siblings like compass_step_claims_list or compass_step_measures_propose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use rules: one call per workflow for who and what together, add the step via napkin_diagrams_update first when a step is missing, record disagreements as their own claim rather than skipping, and prefer ROLE vs PERSON depending on context. Alternatives and exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_step_measures_proposePropose what a workflow's steps takeAInspect
Propose estimates from what someone said, as ranges — people know "20 minutes to an hour", not "37 minutes"; when they give one number, use it for both ends. Each item is either a measure or a gate on a step (nodeId from compass_workflow_steps):
measure.metric
working: hands-on minutes per run (low/high).measure.metric
waiting: minutes the work sits idle before or inside the step — ask about this separately; it's usually most of the waste.measure.metric
hardCost: money that isn't anyone's time (amount, currency, per run or month).measure.metric
frequencywith nodeId null: how often the workflow runs (low/high per day, week, month, or year); with variantId, how often that variant runs.gate: approval, handoff, rekey (typing the same data into another system), or rework, with returnRate (0–1) when they know how often it sends work back. Pass subjectPageId (a ROLE or PERSON) when the time is one person's or role's — it prices the time through that role's rate. Always say who said it. Proposals count once someone accepts them in Compass.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| pageId | Yes | The WORKFLOW page id. | |
| sourceId | No | The interview, email thread, Prism report or page id, for those kinds. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| sourceKind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish this is a write (readOnlyHint=false) that is non-destructive and closed-world, and the description adds meaningful lifecycle context beyond that: proposals 'count once someone accepts them in Compass', i.e. they are staged rather than committed. It doesn't detail auth requirements, limits on item count beyond the schema, or error behavior, but the acceptance-gate disclosure is valuable extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded intent followed by dense, example-driven bullets that each carry new information (unit, currency, per period, returnRate range). It is long, but the length tracks real complexity of the item union; little is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, nested-item, no-output-schema mutation tool, the description covers the semantics that matter most for correct invocation and even explains the acceptance lifecycle. Gaps remain on temporal fields (validFrom/validTo) and source attribution params, which prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, and the description compensates well: it defines the item union semantics (working, waiting, hardCost, frequency), the frequency-with-null-nodeId vs variantId distinction, and explains subjectPageId's pricing-through-role behavior, which the schema leaves undocumented. validFrom/validTo and sourceId/sourceKind get no extra explanation, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — proposing estimates (measures/gates) for a workflow's steps — and anchors it to `compass_workflow_steps` for nodeId, so an agent knows the object graph. It does not explicitly differentiate from near siblings like compass_step_claims_propose or compass_step_suggestions_build, which keeps it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage context: propose ranges (not point estimates), 'ask about waiting separately', pass subjectPageId when the time belongs to one role/person, and 'Always say who said it.' What's missing is explicit when-not or alternative-tool routing against sibling propose/build tools, so it lands at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_step_suggestions_buildBuild what a step suggestion namesAInspect
Builds a step suggestion the way Compass's Build button does: makes its change if it isn't one yet, then the thing in Workbench — a flow drafted from the step itself (who does it, its times, systems, write-up, attachments, interview notes) and its checklist; a shim named for the decision; or a task whose sentence is the steps. Use this, not workbench_flows_scaffold, whenever the work came from a step suggestion. Returns what was built and, for a flow, what the draft still needs. Fails if something's already built for it.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The WORKFLOW page id the suggestion is on. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| suggestionId | Yes | The suggestion id, from compass_step_suggestions_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false and destructiveHint=false already declared, the description usefully adds that the tool fails if something is already built for the suggestion and that a flow draft may still need work. These are behavioral traits beyond the annotations. It does not mention permissions or auth requirements for a mutation, which keeps it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and reasonably sized, but the em-dash clause listing flow contents ('who does it, its times, systems, write-up, attachments, interview notes') is a slog and the 'the way Compass's Build button does' analogy assumes external product knowledge. Information density is good; parseability is not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description covers the return ('what was built and, for a flow, what the draft still needs') and the failure condition. The one real gap is approvalId, which is undefined everywhere, plus no statement of what gets created/overwritten at the workspace level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%; suggestionId and pageId already carry descriptions, and the description adds no format or syntax detail beyond pointing at compass_step_suggestions_list (which the schema already does). approvalId remains undocumented in both places. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Builds') and resource ('a step suggestion') and enumerates the three artifacts it can produce (a flow draft with checklist, a shim, or a task), which is far more than a restatement of the title. The middle clause is a tangled run-on that assumes familiarity with 'the Build button,' keeping it from being a crisp 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use this, not workbench_flows_scaffold, whenever the work came from a step suggestion.' That names the alternative and the selecting condition. It does not spell out when-not to use it beyond the failure precondition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_step_suggestions_listList which of a workflow's steps something could doARead-onlyInspect
Your earlier read of a WORKFLOW's steps: for each suggestion, the steps it covers (nodeIds, labels), what could do them (proposal.doer: a flow and its mode, a shim, or a task), whether it does the step or helps (reach), why, and what it would take (checklist, each item met or not). state OPEN is waiting for a person; APPLIED made a change (opportunityId), and built is what was built for it in Workbench, if anything. Pass changeId instead of pageId to get the one suggestion a change came from. To build one, use compass_step_suggestions_build — not workbench_flows_scaffold.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | The WORKFLOW page id. | |
| changeId | No | A change (opportunity) id: the suggestion it came from. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description goes beyond that by explaining what the returned data means — state OPEN waits for a person, APPLIED produced a change with an opportunityId, and `built` reflects what was constructed in Workbench. It omits pagination, result limits, and auth requirements, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every clause carries information, and the sibling routing is placed last where it is most actionable. The opening sentence is a long, heavily parenthesized run-on ('for each suggestion... (nodeIds, labels)... (proposal.doer)... (reach)... (checklist, each item met or not)') that is dense rather than front-loaded, costing some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 must carry the return-value burden, and it does: it enumerates the fields of each suggestion record (nodeIds, labels, proposal.doer, reach, rationale, checklist) and defines the state vocabulary. For a read-only, zero-required-parameter list tool, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds real routing semantics the schema does not convey: pageId and changeId are alternative modes that return different cardinality (all suggestions for a page vs. the single suggestion a change came from). The `workspace` parameter's token-dependent behavior is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (step suggestions for a workflow), and the title/description both make the resource unambiguous. It explicitly distinguishes itself from the two nearest siblings, naming compass_step_suggestions_build and warning off workbench_flows_scaffold.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternate invocation mode: 'Pass changeId instead of pageId to get the one suggestion a change came from.' It also routes the agent to the correct tool for the follow-up action ('To build one, use compass_step_suggestions_build — not workbench_flows_scaffold'), which is a genuine when-not instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_transformations_getRead a priority's transformationsARead-onlyInspect
What the workflows behind a PRIORITY could become, at five levels (Assist, Automate, Re-form, Invert, Dissolve): for each, whether it fits, is already reached, or what it needs; what changes; what it does to the priority; time freed; and the change made from it, if any. Also the recommended level, or settled when the work is good as it is. state 'running' means a read is under way; null means none has been read (compass_transformations_read starts one).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| priorityPageId | Yes | The PRIORITY page id. |
TDQS
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 content beyond annotations: it explains what the response contains (the five levels, whether each fits/is reached/what it needs, time freed, change made), names the recommended level, defines 'settled', and explains 'running' vs null state with the sibling that starts a read. This is rich disclosure about return content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence followed by a shorter state-explanation sentence. It is front-loaded with the core content, but the first sentence is very long and packs many clauses together, which reduces readability. It earns its length given the complexity, but structure could be clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 must explain the return content, and it does so thoroughly: levels, per-level status, changes, time freed, the change made, and the recommended level. It also explains the state values and the companion tool. It is largely complete for a two-parameter read tool, though it could say a bit more about the overall object structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (workspace, priorityPageId) are already documented in the schema. The description adds no parameter-level syntax or semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (the workflows behind a PRIORITY) and the extracted structure (five levels with fit/reached/needs, changes, time freed, change made, recommended level). It is a read tool and the verb is implied by the title 'Read a priority's transformations'. It does not explicitly distinguish itself from compass_transformations_read, though it hints at the relationship via the state field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by referencing compass_transformations_read as the tool that 'starts one', giving a hint about the ordering. But there is no explicit when-to-use-this-vs-alternatives guidance, nor any statement of exclusions or prerequisites beyond that one parenthetical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_transformations_make_changeMake a change from a transformation levelAInspect
Creates a Change from one level of a priority's transformations, with its step effects and the priority it serves, and starts drafting in Workbench up to three flows for what the level says to build (builds, each drafting until ready). Only a level that fits, once per level. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | 1 Assist, 2 Automate, 3 Re-form, 4 Invert, 5 Dissolve. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| priorityPageId | Yes | The PRIORITY page id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive, closed-world write. The description adds real context beyond that: it drafts up to three flows in Workbench ('builds', each 'drafting' until ready), enforces a once-per-level rule, and can return a needs_confirmation envelope. This goes well past what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Effectively a single dense sentence, front-loaded with the core action ('Creates a Change...'), followed by supporting detail. Compact and largely waste-free, though the run-on nature makes it slightly harder to parse at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-destructive mutation tool with annotations present, no output schema, and fully documented params, the description covers the key behavioral outcomes (drafting flows, per-level constraint, confirmation return). Nothing critical for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters (level enum, workspace, approvalId, priorityPageId). The description reinforces that approvalId ties to a needs_confirmation result and that level drives which flows get built, but adds little syntax beyond the schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — 'Creates a Change from one level of a priority's transformations' — with the source level and priority clearly identified. It is distinguishable in intent from siblings like compass_changes_upsert, but it never names or contrasts an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an implied usage constraint ('Only a level that fits, once per level') and notes that the tool 'May return needs_confirmation', which hints at the confirmation flow. However, it offers no explicit guidance on when to choose this versus compass_changes_upsert or the transformations_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_transformations_readRead a priority's transformations againAInspect
Starts reading the five levels for a PRIORITY in the background (a minute or two). Needs at least one kept step that impacts the priority. A read under way is left to finish. Check back with compass_transformations_get.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| priorityPageId | Yes | The PRIORITY page id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, which is surprising for a tool named "read"; the description reconciles this by explaining it kicks off an asynchronous background job. It further discloses the rough latency ("a minute or two") and dedupe behavior for in-flight reads, adding real value beyond the structured hints. It stops short of describing failure modes or what invalidates a run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and its async nature, then the precondition, then the follow-up. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async job-starter with no output schema, the description supplies what an agent actually needs: it's a background kickoff, it takes time, don't re-trigger an in-flight read, and poll with compass_transformations_get. Only error/edge-case behavior is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description references the PRIORITY target that maps to priorityPageId but adds no format or semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ("Starts reading the five levels for a PRIORITY in the background") that is distinct from the sibling compass_transformations_get, which it names as the polling counterpart. The terminology ("five levels", "transformations") is domain-specific but the verb+resource pairing is clear enough to identify intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete precondition ("Needs at least one kept step that impacts the priority") and explains the concurrency rule ("A read under way is left to finish"). It also names the follow-up tool explicitly, though it doesn't contrast itself against the mutation siblings like transformations_make_change.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_transformations_respondRecord what's true about a transformation levelAInspect
Records what someone told you about one level of a PRIORITY's current transformations, in their words or a faithful summary: that they already do it, what rules it out, a system that isn't ready, work still done on paper, and so on. Compass works out what it means in the background: a label for the level, facts kept on the steps they're about (every later reading of those workflows sees them), and open questions to confirm. Then it reads the priority again. Use it whenever a conversation settles something about a level, so it lands on the priority's page, not only in this chat.
| Name | Required | Description | Default |
|---|---|---|---|
| said | Yes | What's true about the level, as the person said it. | |
| level | Yes | 1 Assist, 2 Automate, 3 Re-form, 4 Invert, 5 Dissolve. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| priorityPageId | Yes | The PRIORITY page id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-destructive/closed-world; the description goes well beyond by disclosing the actual side effects: Compass derives a level label, stores facts on the steps they concern (visible to every later reading of those workflows), raises open questions, and re-reads the priority. That is exactly the propagation and post-write behavior an agent needs to know before calling a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and the sentence structure separates input, background processing, and usage trigger. The middle list of examples ('work still done on paper, and so on') is slightly loose but each item aids recognition, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what happens after the call, and it does: labels, step-attached facts, open questions, and a priority re-read. It stops short of stating return shape or error/permission conditions, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so params are already documented (level meaning, said, priorityPageId, workspace). The description adds only a light gloss on 'said' ('in their words or a faithful summary'), which is useful but not beyond the schema's own description. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: recording what a person said about one level of a PRIORITY's current transformations, and it enumerates the kinds of content (already do it, what rules it out, work on paper). It does not explicitly distinguish itself from near siblings like compass_transformations_make_change or compass_transformations_read, so an agent must infer the boundary, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger: 'Use it whenever a conversation settles something about a level,' plus the rationale that the result lands on the priority's page rather than only the chat. It does not name alternatives or exclusions (e.g., when to use make_change instead), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_workflow_learningWhat we've learned about a workflowARead-onlyInspect
Newest first: steps added to or dropped from the diagram (and by whom), and claims about who does what or what a step takes — said, corrected (with what they replaced), withdrawn, or accepted from a proposal — each with its source. This is when we LEARNED things; when they were true is each claim's validFrom/validTo. Use it to brief someone on what changed in the picture, or to see what an interview added.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Only what was learned on or after this date. | |
| pageId | Yes | The WORKFLOW page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe-read profile, and the description adds genuinely non-structured behavior: newest-first ordering, the composition of the feed (step additions/removals plus claim events with replacement text), inclusion of source per item, and the key distinction that timestamps reflect when something was LEARNED versus when it was true (validFrom/validTo). It omits pagination/limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content and ordering lead, with only two sentences and no filler. The em-dash-heavy run-on in the first sentence is dense and slightly hard to parse, but every clause adds information rather than restating the name or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so in reasonable detail (event types, sources, ordering, temporal framing). It is nearly complete; only absent details like pagination or the default behavior of `since` keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns above baseline by disambiguating the temporal semantics of the `since` filter—clarifying it bounds learning-time, not claim validity. That directly resolves the ambiguity the schema's one-line parameter description leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description concretely states what the tool returns: a newest-first feed of steps added/dropped and claim lifecycle events (said, corrected, withdrawn, accepted), each with its source. That is a specific resource and clearly more than a restatement of the name. It stops short of naming the overlapping siblings (compass_step_claims_list, compass_workflow_steps, compass_scenario_changes), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two concrete use cases—briefing someone on what changed, and seeing what an interview added—which implies when to reach for it. However it never contrasts with the natural alternatives (a plain step list or claims list), and there are no when-not-to-use notes. Usage is implied rather than dictated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_workflow_rollupRoll up what a workflow takesARead-onlyInspect
Per run and per month: hands-on minutes, waiting minutes, labor cost (hands-on time priced through each role's hourly rate), and hard costs, each as a low–high range, with every step's share and its gates (approvals, handoffs, re-keying, rework). A step that is itself a workflow uses that workflow's roll-up unless it has its own estimate. coverage says how many steps are timed — always say how much of the total rests on estimates before quoting it, and never present a range as one number. unpricedRoles are roles doing timed work with no hourly rate; their time counts and its cost doesn't. Where the waiting dwarfs the hands-on time, or a gate rarely sends anything back, is usually where the improvement is. at reads the estimates as of a date; variantId rolls up one variant.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | How things were on this date (YYYY-MM-DD). Default today. | |
| pageId | Yes | The WORKFLOW page id. | |
| knownAt | No | Count only what had been said by this date — the picture as we knew it then. | |
| changeIds | No | Project the workflow as these changes would leave it (ids from compass_scenario_changes). Compare with a call without them: before vs after, what stays human, overlapping changes. | |
| variantId | No | A variant id from compass_workflow_steps. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint/openWorldHint already covering the safety profile, the description adds substantive behavior: nested-workflow recursion ('a step that is itself a workflow uses that workflow's roll-up unless it has its own estimate'), the meaning of coverage, and the unpricedRoles edge case where time counts but cost does not. These are non-obvious computation semantics an agent could not infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The output spec is front-loaded and the caveats follow in a logical order, so an agent can parse intent from the first sentence. The prose is dense with em-dashes and parentheticals, but every sentence carries content (recursion, coverage, unpriced roles, interpretation). Slightly heavy, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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: it enumerates the metric families, the low-high range format, per-step shares, gates, coverage, and unpricedRoles. What it does not sketch is the top-level response shape or how per-run vs per-month sections are organized, a modest remaining gap for a six-parameter analytical tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates 'at' and 'variantId' in prose ('at reads the estimates as of a date; variantId rolls up one variant'), which is roughly equivalent to what the schema already documents, and adds no syntax or default detail beyond it. It does not compensate for anything, but nothing is missing either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause gives a precise spec of the resource and its output: per run and per month, hands-on minutes, waiting minutes, labor cost, and hard costs as ranges with per-step shares and gates. It is unmistakably the cost/time rollup rather than the step list or learning tools. It never names a sibling explicitly, so it stops short of the 5 bar of differentiating itself from compass_workflow_steps or caliper_flow_performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives reporting rules ('always say how much of the total rests on estimates before quoting it, and never present a range as one number') and interpretive direction ('where the waiting dwarfs the hands-on time... is usually where the improvement is'). What is missing is explicit routing: nothing says when to call this versus compass_workflow_steps, compass_flow_performance, or compass_workflow_learning. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compass_workflow_stepsList a workflow's steps and who does themARead-onlyInspect
Every step in a WORKFLOW page's steps diagram, in diagram order, with its phase, whether it is itself a workflow (subWorkflowPageId), and who the map says owns, does, approves, is consulted on, or doesn't do it, and uses: the systems or documents it's done in. unknown: true means nothing that counts says who does the step or what it's done in — those are the questions worth asking in an interview. A step with uses and nobody on it is one a system runs; don't ask who does it. disputed lists roles or people with conflicting claims; ask about those rather than picking a side. proposals counts claims waiting for review. variants are named subsets of the steps ("rush job", "enterprise client"); each step lists the variants it belongs to. Returns no steps when the workflow has no diagram yet (compass_process_diagram_ensure makes one).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The WORKFLOW page id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety is covered; the description adds the non-obvious behavior that it 'Returns no steps when the workflow has no diagram yet' and resolves subWorkflowPageId nesting. No mention of pagination or result-size limits, but for a scoped read-only list this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the primary noun phrase (steps in diagram order) before field semantics, and each following sentence earns its place by decoding output fields. It is one dense run-on block rather than cleanly segmented, but with no output schema the field explanations are justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well, explaining unknown, uses, disputed, proposals, and variants. It stops short of describing the top-level response envelope, but an agent has enough to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents pageId and the workspace slug/default behavior. The description implies pageId ('a WORKFLOW page's steps diagram') but adds no syntax or format detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Every step in a WORKFLOW page's steps diagram') and enumerates exactly what each step carries: phase, subWorkflowPageId, ownership claims, and `uses`. Precise scope makes it distinguishable from compass_priority_steps_find or compass_step_claims_list, though it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance on when/how to act on results: 'unknown: true ... those are the questions worth asking in an interview', 'A step with `uses` and nobody on it is one a system runs; don't ask who does it', and 'ask about disputed rather than picking a side'. It also names compass_process_diagram_ensure as the path when no diagram exists, though it doesn't frame a when-to-use-this-vs-that comparison among the listing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_tags_browseBrowse the workspace's tagsARead-onlyInspect
Without a tag: every tag in use across the workspace with how many entities carry it, most-used first — the vocabulary the team already organizes by. With a tag: everything filed under it across every tool, each with its kind, id, title, and path. Use it to reuse existing labels instead of inventing near-duplicates, and to answer 'show me everything about X' when X is a label.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | A tag to expand into its items. Omit to list tags. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds non-annotation behavior: result ordering ('most-used first') and the fields returned in each mode (tag name + count; kind, id, title, path), but says nothing about result limits or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the two modes that matter most before the usage advice. It is efficient, though 'the vocabulary the team already organizes by' is slight editorial padding for an agent-facing definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so for both modes, which is the key gap an agent would otherwise face. It omits pagination/size limits, the only remaining incompleteness for a browse tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, and the schema already documents omitting the tag. The description goes beyond that by spelling out what each mode actually produces, which clarifies the semantics of the tag parameter's presence/absence rather than just restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely and separates the two operating modes: no tag lists all workspace tags with usage counts, a tag expands to all items filed under it across every tool. That mode split makes it trivially distinguishable from entity_tags_get and entity_tags_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage triggers: 'reuse existing labels instead of inventing near-duplicates' and answering 'show me everything about X' when X is a label. It stops short of naming alternatives (entity_tags_get, search_workspace) or stating when not to use it, so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_tags_getRead the tags on entitiesARead-onlyInspect
Returns the tags on a batch of entities of one kind — the labels galleries organize by. Ids come from the kind's list/get tool or from search_workspace. Use it before entity_tags_set so you replace the full set knowingly, and to answer 'what is this filed under'. Entities the user can't see are omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| entityKind | Yes | Which kind the ids belong to. |
TDQS
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 useful behavior beyond that: results are batch-scoped to one entityKind and 'Entities the user can't see are omitted', i.e. permission-based filtering of results. It does not describe pagination or the shape of the returned tag set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the return value before the usage guidance. The gloss 'the labels galleries organize by' earns its place by disambiguating 'tags' in this domain. Slightly dense but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of describing the return, which it does at a high level ('returns the tags on a batch of entities'). Combined with the permission-omission note and the id-sourcing guidance, an agent has enough to call it correctly, though the exact tag object shape remains unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: workspace and entityKind are documented in the schema, but ids is not. The description compensates by explaining where ids come from (the kind's list/get tool or search_workspace) and that they belong to a single kind, which is the key constraint linking ids and entityKind. It does not mention the 100-item batch ceiling, which the schema already enforces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the tags on a batch of entities of one kind') and immediately distinguishes itself from entity_tags_set, which it names explicitly. An agent can tell it apart from the sibling tag tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong context: ids come from the kind's list/get tool or from search_workspace, and it should be run before entity_tags_set so the full set is replaced knowingly. It also frames a concrete question it answers ('what is this filed under'). It stops short of naming when NOT to use it versus entity_tags_browse, so it is not a full when/when-not/alternative spec.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_tags_setSet an entity's tagsADestructiveInspect
Replaces the FULL tag set on one entity (an empty list clears it). Read the current tags with entity_tags_get first and pass the merged list — this is not additive. Tags are lowercase letters, numbers, spaces, and hyphens; prefer labels already in use (entity_tags_browse) so the workspace's vocabulary stays small. The id comes from the kind's list/get tool or search_workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | ||
| entityId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| entityKind | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds the crucial nuance annotations cannot: that this is a full replacement rather than an append, that an empty list clears tags, and how to avoid accidental data loss by reading first. It also discloses the tag format constraints and workspace-vocabulary preference, which are real behavioral characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the destructive replacement semantic that matters most. Every sentence carries distinct, non-redundant information: replacement behavior, read-then-merge workflow, format/vocabulary rules, and id sourcing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 not explain what the call returns (e.g. the resulting tag list), and it does not mention the needs_confirmation/approvalId flow that the schema implies for a destructive operation. Otherwise it is complete: mutation semantics, safety guidance, format constraints, and id sourcing are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, so the description must compensate, and it does so for the highest-risk parameter: tags format (lowercase/numbers/spaces/hyphens) and replace semantics. It also explains where entityId comes from. It does not explain entityKind's 20 enum values or workspace/approvalId semantics, which the schema carries on its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause 'Replaces the FULL tag set on one entity' gives an exact verb, resource, and scope, and the parenthetical '(an empty list clears it)' nails the edge case. It is clearly distinguished from the read-oriented siblings entity_tags_get and entity_tags_browse, which it names directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when and how to use it: read current tags with entity_tags_get first, merge, then pass the full list, and warns that the call is not additive. It also directs the agent to entity_tags_browse for vocabulary and to the kind's list/get tool or search_workspace for the id, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docFetch ZeroWidth doc by slugARead-onlyInspect
Fetch the full Markdown body of a specific docs page by its slug. Use this after search_docs when the user needs the complete content of a page. No authentication required.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Page slug. Accepts 'compass/api', '/compass/api', or 'docs/compass/api'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds two things beyond that: the return payload is the 'full Markdown body' (valuable because there is no output schema) and that no authentication is required. It does not discuss rate limits or caching, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler; the core action is front-loaded and the sequencing hint and auth note each carry distinct information. Nothing could be removed without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description supplies exactly the missing pieces: what is returned (full Markdown body), when to reach for it versus search, and the absence of an auth barrier. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema documents it at 100% coverage including accepted slug formats ('compass/api', '/compass/api', 'docs/compass/api'). The description adds nothing about the slug beyond restating it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (full Markdown body of a docs page) plus the retrieval key (slug). An agent can immediately distinguish this from search_docs (search) and list_docs (enumerate) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself in a workflow: 'Use this after search_docs when the user needs the complete content of a page,' which names the alternative and the condition that selects this tool. It does not mention list_docs as the other plausible sibling, so it stops just short of exhaustive routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postFetch a Distributed Cognition essayARead-onlyInspect
Fetch the full Markdown body of one Distributed Cognition essay by slug (from list_posts). Link the public URL when citing it to the user. No authentication required.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Essay slug, e.g. from `list_posts`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds two useful facts: the return shape is the full Markdown body, and no authentication is required — the latter is genuine behavioral context not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb-resource pairing and the identifier; every clause carries information (source of slug, citation behavior, auth status). No padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with no output schema, the description covers the return format, the identifier source, and the auth requirement, which is enough to call it correctly. A note on what happens for an invalid or unknown slug would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single slug parameter, so the schema already documents format and provenance. The description restates the slug origin from list_posts and adds no syntax or constraint beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch), a specific resource (one Distributed Cognition essay), the scope (full Markdown body), and the key identifier (by slug). This cleanly separates it from list_posts and the generic get_doc sibling without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Points to list_posts as the source of the slug and gives a concrete usage instruction (link the public URL when citing). It stops short of stating when *not* to use it or naming an alternative for retrieving multiple essays, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_add_evidenceAttach evidence to a Ledger entryAInspect
Records what happened against an open decision — a manual observation the user reports ('the pilot team says triage feels faster'), an implementation note, or a reference to a Caliper run. Evidence is what settlement later reads, so attach it as it arrives and cite it in the lesson. Metric readings attach themselves via ledger_metrics_record_reading — don't duplicate them here. Fails with conflict on superseded entries. Ids come from ledger_entries_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Structured detail worth keeping with the summary. | |
| kind | No | Usually `manual`; `caliper_eval_run` with refId for a run; `implementation` when the change shipped. | manual |
| refId | No | Source record id (a Caliper run id, …) when there is one. | |
| entryId | Yes | The entry the evidence is about. | |
| summary | Yes | What happened, in one or two sentences. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read, non-destructive, closed-world write, so the description adds context beyond that: it discloses the conflict failure on superseded entries and that the call may return a needs_confirmation envelope. It does not spell out auth/permission requirements or idempotency, but for an annotated mutation tool this is solid behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core action and each following sentence earns its place (routing to the metric-reading sibling, settlement rationale, conflict failure, id source, confirmation). It is dense and slightly long, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-behavior burden and does reasonably: it discloses the conflict failure and the possible needs_confirmation response (which ties to the approvalId parameter). Combined with full schema coverage and annotations, an agent has enough to call it correctly, though a fuller picture of the confirmation flow would be ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 every field including the kind enum defaults. The description still adds value by clarifying the provenance of entryId ('ids come from ledger_entries_list') and by grounding summary/kind usage in examples, which is slightly above the baseline-3 that pure schema coverage would justify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb and resource (records/attaches evidence against an open Ledger entry) and enumerates the concrete forms evidence takes (manual observation, implementation note, Caliper run reference). It explicitly separates itself from the metric-reading path by naming ledger_metrics_record_reading, so an agent can route correctly without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to attach ('attach it as it arrives'), why ('evidence is what settlement later reads'), and an explicit when-not plus alternative ('metric readings attach themselves via ledger_metrics_record_reading — don't duplicate them here'). It also notes the conflict failure on superseded entries and that ids come from ledger_entries_list, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_createRecord a decision, lesson, or observation in the LedgerAInspect
Records a memory entry. Every entry is a TITLE (summary: one short plain sentence) over a BODY (rationale: the detail, markdown welcome) — never put the detail in the title. Three kinds: decision — a change being made now; PRE-REGISTRATION IS THE POINT, so prediction (what we expect) must be written NOW, before any evidence exists, and never backfilled to match an outcome. lesson — a distilled belief the team already holds (lesson text required, no prediction). observation — a durable fact worth remembering (no prediction): something already true, never something planned. Ideas, pitches, backlog items, and upcoming work are NOT entries — a dated piece of work that carries out a decision is a plan item (ledger_plan_add on that decision), and a running list you keep across runs belongs in a Napkin doc or sheet. When a user states something durable about their business in conversation, offer to capture it as a lesson or observation. When a user shares MEETING NOTES, propose the decisions you find with ledger_entries_draft so they keep or drop each one in Ledger; use this tool for an entry they've asked you to record. Link the Compass pages the entry touches so future consult-before-acting finds it. May return needs_confirmation — summarize the entry and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | decision = a change with a pre-registered expectation; lesson = a belief arriving already settled; observation = a fact that is already true (not a plan, idea, or pitch). | decision |
| lesson | No | What we learned — required for kind=lesson, optional for kind=observation, forbidden on decisions (their lesson is written at settlement). | |
| summary | Yes | The entry's TITLE: one short plain sentence naming what we did (decision) or the fact itself (lesson, observation). Plain text, no markdown, at most 280 characters — e.g. "Newsletter moves to a biweekly cadence". Everything longer goes in rationale. | |
| rationale | No | The entry's BODY: the detail under the title — why, context, lists, steps. Markdown is fine here and renders as formatted text. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| prediction | No | Decisions ONLY. What we expect: a list of `claims` plus one shared `deadline`, or `freeform` for room decisions nothing can settle. A claim either REACHES a value (comparator + target, e.g. CTA clicks >= 400) or HOLDS one (`hold`, e.g. newsletter reads no more than 5% below the 28 days before this). Name every number the change is expected to move AND every number it shouldn't cost — a decision that claims only what it hopes will rise gets to pick its own evidence. Set `watch: true` on a number worth following that the decision isn't committing to. When the change aims at part of an event metric ("new users in Germany"), narrow the claim with `slice` ({ country: ["DE"] }) using label values from ledger_metrics_get — a claim on an event metric settles on the total counted since landing (reach) or events per day (hold). | |
| compassPageIds | No | Where — Compass page ids this decision touches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the sparse annotations by disclosing the pre-registration rule (prediction written now, never backfilled), the needs_confirmation response and summarize-and-wait behavior, the workspace-slug requirement for personal tokens, and the approvalId retry path. These are operational behaviors an agent must know and are not in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the title/body model and the three kinds before routing guidance, so the essentials come first. However it is a dense wall of prose with heavy ALL-CAPS emphasis and several long clauses that could be tighter; it earns most but not all of its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter write tool with nested prediction objects and no output schema, the description covers the entry model, kind-specific requirements, alternative tools, the confirmation/approval return path, and page-linking. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents fields, but the description adds real framing: TITLE vs BODY mapping for summary/rationale, the rule that prediction is decisions-only and must precede evidence, and compassPageIds as the linking target for future consult-before-acting. Meaningful but partly duplicative of the verbose schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Records a memory entry') and clearly delineates the three kinds (decision/lesson/observation) with what each means. It actively differentiates from siblings, stating ideas/pitches/plans are NOT entries and pointing to ledger_plan_add and Napkin docs instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use ledger_entries_draft to propose meeting-note decisions for keep/drop, use this tool for an entry the user has asked to record, use ledger_plan_add for dated work, and Napkin for running lists. Covers both when-to-use and when-not-to-use with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_draftPropose Ledger entries for reviewAInspect
Writes up to 50 entries as DRAFTS: proposals that stay out of the record until a person confirms each one in Ledger's Drafts view. Use it for entries you found rather than were told — decisions in meeting notes, or a team's past changes read from its tracker, pull requests or launch posts (set fromHistory: true). For history: take each claim from what the source said AT THE TIME, set landedAt to when it shipped, attach the source URL, and leave rollout as full unless the source says otherwise. These read as low confidence because they were written down after the fact; say so plainly rather than overstating them. Tell the person how many drafts are waiting and that they review them under Decisions → Drafts. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| drafts | Yes | ||
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| approvalId | No | ||
| fromHistory | No | True when the drafts come from a team's past work, not the conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a non-read-only, non-destructive, non-open-world call. The description goes much further: entries remain drafts until a human confirms each one in the Drafts view, they read as low confidence because they were written after the fact, the caller should report how many drafts are waiting and where to review them, and the call 'may return needs_confirmation'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool produces before prescribing history conventions, and each sentence carries operational content. Some prescriptive prose ('say so plainly rather than overstating them') is stylistic guidance rather than tool semantics, but for a tool with 50 nested draft objects the length is defensible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, nested, no-output-schema tool this covers the draft/confirmation model, the history workflow and the key field conventions well. The two auxiliary parameters (workspace, approvalId) and the shape of a normal success response beyond needs_confirmation remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description compensates substantially: fromHistory's meaning, that landedAt should be the ship/launch date taken once from the source, that source URL should be attached, and that rollout stays 'full' unless the source says staged or held-out. workspace and approvalId are still unexplained in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: writes up to 50 ledger entries as DRAFTS that stay out of the record until confirmed. That draft semantics is exactly what separates it from the sibling ledger_entries_create, so an agent can discriminate without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition — 'entries you found rather than were told', such as decisions in meeting notes or a team's past changes read from its tracker, PRs or launch posts — and ties it to the fromHistory flag. It never names ledger_entries_create as the alternative for direct writes, so the when-not is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_getRead one Ledger entry in fullARead-onlyInspect
One entry's full anatomy — the six fields, attached evidence (Caliper runs, measurements, observations), and the supersede chain (what replaced it, or what it replaced). Cite entry ids when telling the user about prior related decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | Entry id (from ledger_entries_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, non-destructive, non-open-world read, so the bar is lowered. The description earns credit for disclosing return content beyond annotations: the six fields, the evidence attachments (Caliper runs, measurements, observations), and the bidirectional supersede chain. It does not cover failure modes (e.g. unknown entryId) or the workspace-token semantics, which the schema handles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in one dense sentence; the em-dash list of evidence types is informative rather than padding. The second sentence about citing ids is a useful directive that earns its place, though 'full anatomy' is slightly decorative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-one-by-id tool with no output schema, the description is the only place return shape can be conveyed, and it does so concretely (fields, evidence, supersede chain). Combined with annotations covering safety and a fully documented two-parameter schema, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, so the schema fully documents entryId and the workspace override rules. The description adds no syntax, format, or constraint detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this returns a single entry's full contents, enumerating the six fields, attached evidence, and the supersede chain in both directions. It never states the verb outright (the title carries 'Read'), and it does not explicitly differentiate itself from ledger_entries_list or ledger_entries_draft, but the singular scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternative (e.g. ledger_entries_list for browsing). The only routing cue lives in the schema's entryId description '(from ledger_entries_list)', not in the description text. The closing sentence about citing ids governs how to relay the result, not when to call the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_listList Ledger decision entriesARead-onlyInspect
The workspace's memory: decisions (changes with pre-registered expectations), lessons (distilled beliefs), and observations (captured facts). CONSULT BEFORE ACTING — before proposing a flow change, prompt edit, or process decision, filter by the Compass page it touches (compassPageId) and check whether prior attempts exist and how they settled. Filter status=open for unsettled expectations awaiting evidence (each carries a derived lapsed flag — true when its deadline has passed; surface lapsed ones when the user asks what needs attention); kind=lesson for what the team already believes.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search across an entry's summary, rationale, and lesson (case-insensitive). Use it to find the entry about a topic before acting. | |
| kind | No | Filter by species: decision (pre-registered expectations), lesson (distilled beliefs), observation (captured facts). | |
| cursor | No | Pagination cursor from a prior page. | |
| origin | No | Filter by who wrote it (manual, workbench, …). | |
| status | No | Filter by lifecycle state (open = awaiting evidence). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| compassPageId | No | Compass page id — every decision touching that workflow / system / person. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, non-destructive, closed-world behavior, so the description focuses on deeper semantics: that open entries carry a derived `lapsed` flag set from deadline passing. This is real behavioral context beyond structured fields, though it doesn't discuss response shape, ordering, or pagination beyond the cursor param.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the resource definition, and the imperative "CONSULT BEFORE ACTING" follows immediately, which is well-structured. It is dense and somewhat run-on across a single long paragraph, but nearly every clause (species definitions, filter prescriptions, lapsed flag) carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter list tool with no output schema, the description covers the conceptual model, the high-value filters, and the primary consult-before-acting workflow, which is enough for correct invocation. It leaves the return shape and pagination behavior unstated, but annotations cover safety and the schema covers all parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine interpretive meaning to key filters — compassPageId is reframed as "every decision touching that workflow / system / person" and status=open is tied to "unsettled expectations awaiting evidence." It does not add semantics for q, cursor, origin, or workspace beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states what the resource is ("the workspace's memory") and enumerates its species — decisions, lessons, observations — so an agent knows it lists Ledger entries. It is specific about content but never contrasts itself with the sibling read tools (ledger_entries_get, ledger_plan_list) or states the listing/pagination nature, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: "CONSULT BEFORE ACTING — before proposing a flow change, prompt edit, or process decision," and names the concrete filter to use (compassPageId). It further prescribes status=open for unsettled expectations and kind=lesson for settled team beliefs, with edge-case routing ("surface lapsed ones when the user asks what needs attention").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_retractRetract a Ledger entryADestructiveInspect
Takes an entry out of the curated ledger — THE remedy when you recorded something wrong (a decision that wasn't made, a duplicate, a fact the user corrects). Reversible from Ledger and fully audited, so it is safe to offer as soon as the user says 'that's not right'. Not for overturning a settled claim the team once believed — a human supersedes that. Fails with conflict if already retracted. Ids come from ledger_entries_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | The entry to retract. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the description carries a lower burden. It still adds real value: reversibility, full audit trail, a conflict failure on double-retract, and a possible `needs_confirmation` return. However it does not disclose the permission model or what 'reversible from Ledger' technically requires, so it is additive but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, front-loaded with the primary use case before the exclusion, failure mode, id source, and return shape. Each sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by flagging the `needs_confirmation` envelope, which is exactly the return behavior an agent needs. Combined with the conflict-on-retract failure mode and id sourcing, nothing required to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it tells the agent where entryId comes from (ledger_entries_list) and links the `needs_confirmation` return to the approvalId parameter in the schema. That cross-reference is beyond what either the schema or annotations state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('takes an entry out of the curated ledger') and immediately scopes it against siblings like ledger_entries_settle and ledger_entries_update by naming the exact error scenario it fixes. An agent can distinguish retract from settle/update without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('THE remedy when you recorded something wrong') with concrete examples, explicit when-not ('Not for overturning a settled claim the team once believed — a human supersedes that'), an urgency cue ('safe to offer as soon as the user says that's not right'), and the id source (ledger_entries_list). Every routing question is answered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_settleSettle an open Ledger decisionADestructiveInspect
The ritual moment: evidence has landed, the expectation closes, the lesson is written. Only propose settlement when attached evidence actually answers the prediction — check ledger_entries_get first and cite the evidence in the lesson. lesson (what we now believe) is required and permanent; settlement happens exactly once. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| lesson | Yes | What we now believe — the distilled, citable lesson. | |
| entryId | Yes | The open entry to settle. | |
| verdict | No | Did the pre-registered expectation hold? `confirmed` every claim came out as hoped, `missed` none did, `mixed` some did and some didn't. Mixed is not a softer miss — "it worked and it cost us something" is usually the most informative result a change can produce, so use it rather than rounding to either side. Only when the entry carries an expectation and the evidence gives a clear answer. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real value beyond them: settlement is permanent, happens exactly once, requires citing evidence, and may return `needs_confirmation`. These are behavioral facts an agent needs and cannot infer from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and compact at three sentences, each carrying real content (precondition, permanence, return signal). The opening 'The ritual moment: evidence has landed...' is atmospheric rather than strictly informative, a minor waste of words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema, the description covers the key concerns: evidence prerequisite, required/permanent lesson, single-occurrence semantics, and the needs_confirmation return. Combined with 80% schema coverage, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents entryId, verdict enum semantics, workspace, and lesson. The description reinforces that `lesson` is required and permanent, but adds little beyond what the schema states. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — settling (closing) an open Ledger entry/decision — with a clear verb+resource. The 'ritual moment' framing is stylized but it does convey the operation's role. It stops short of differentiating from all siblings by name, though it does point at ledger_entries_get as the prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Only propose settlement when attached evidence actually answers the prediction') and names the alternative to check first ('check ledger_entries_get first'). It also discloses the one-shot constraint ('settlement happens exactly once'), which is important routing context. It doesn't mention retract/update fallbacks, keeping it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_entries_updateEdit a Ledger entryADestructiveInspect
Corrects an entry in place — its title (summary), body (rationale), the pre-registered prediction of an OPEN decision (null clears it), or its facet (filing category; editable even after settlement). Works on open decisions, and on lessons, observations, and beliefs (they carry no expectation, so fixing their wording is fine any time). Use to fix a typo, swapped fields, or a misrecorded detail. Never edits kind or lesson. Fails with conflict on a settled decision — its claim is corrected by a human superseding it in Ledger — and on superseded or retracted entries. Entry ids come from ledger_entries_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| facet | No | Filing facet; empty string = unassigned. | |
| entryId | Yes | The entry to edit: an open decision, or a lesson / observation / belief. | |
| summary | No | New title: one short plain sentence, no markdown, at most 280 characters. | |
| rationale | No | New body: the detail under the title; markdown is fine. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| prediction | No | Replacement expectation (claims + deadline, or freeform), or null to clear it. Correcting a misrecorded expectation is fine; rewriting one to match what happened is not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/readOnlyHint annotations, it discloses that edits fail with conflict on settled decisions, fail on superseded/retracted entries, that facet remains editable post-settlement, that null clears a prediction, and that a `needs_confirmation` envelope may be returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, leading with the in-place correction and field list before constraints. Every clause carries information, though the prediction-parenthetical is tightly packed and slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers what can be changed, what cannot, the conflict/confirmation behaviors, and id sourcing. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it maps friendly names to fields (title→summary, body→rationale), clarifies that nulling prediction clears the expectation, and notes facet editability after settlement. It stops short of explaining workspace/approvalId beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Corrects an entry in place') and enumerates the exact editable fields (summary, rationale, prediction, facet). It clearly differentiates from siblings like ledger_entries_settle, ledger_entries_retract, and ledger_entries_create by framing itself as in-place correction only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('fix a typo, swapped fields, or a misrecorded detail'), explicit exclusions ('Never edits kind or lesson', fails on settled/superseded/retracted), and it routes the agent to ledger_entries_list for ids. When-not conditions and failure modes are fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_backfillFill in a metric's history from its feedAInspect
Run the same frozen instruction over a past range, so a metric has history instead of starting the day it was set up. Offer this whenever you create a feed — a chart with a year behind it is worth far more than one that begins today, and an expectation can be judged against what normal looked like. Works when the source returns a series; a source that only ever reports 'right now' will write one point. Safe to repeat: overlapping ranges dedupe. Keep ranges to a few hundred points; a run that fills up says so. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Feed id, from ledger_feeds_list. | |
| to | No | End of the range. Defaults to now. | |
| from | Yes | Start of the range, ISO date or instant. | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-destructive/open-world, so the description carries the real behavioral load: idempotency ('overlapping ranges dedupe'), a size guardrail ('keep ranges to a few hundred points'), and a confirmation flow ('may return needs_confirmation'). This is meaningful context beyond the annotations, though it doesn't explain what is written or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the when-to-use cue early, and each clause carries operational information. The 'a chart with a year behind it is worth far more' line is motivational padding, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema and annotations covering only safety, the description is thorough: it explains idempotency, batching limits, series requirements, and the confirmation return. Only the meaning of approvalId and failure behavior remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents id, from, to, and workspace. The description adds the 'past range' framing and hints at confirmation (relevant to the undocumented approvalId), but provides no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (run the frozen instruction over a past range) and a clear outcome (give a metric history rather than starting today), which is distinct from ledger_feeds_run and ledger_feeds_preview. It doesn't explicitly name sibling tools, but the historical-vs-current framing makes the role legible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Offer this whenever you create a feed') and a meaningful precondition ('Works when the source returns a series; a source that only ever reports right now will write one point'). It lacks direct comparison to alternative feed tools, but the when-to-use guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_createSet up how a metric's numbers arriveAInspect
Freeze a tool call as a metric's standing source: it runs on the cadence you give and records what it finds, with no model involved. metric takes an id or a snake_case slug; an unknown slug starts tracking that metric. Confirm the mapping with ledger_feeds_preview first. Tell the user they can backfill history afterwards with ledger_feeds_backfill. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Short name for the feed, e.g. "Weekly signups". | |
| metric | Yes | Metric id, or a snake_case slug to start tracking. | |
| mapping | Yes | ||
| schedule | Yes | ||
| toolArgs | No | ||
| toolName | Yes | The tool's own name on that server. | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No | ||
| windowHours | No | How far back each run looks. Sensible per-cadence default. | |
| integrationId | Yes | From ledger_feed_sources_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds real behavioral context beyond that: the operation is model-free, an unknown slug silently starts tracking a new metric, and the call 'May return needs_confirmation'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then flow, then return behavior in a compact block with no filler. Dense but efficient; each sentence carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-param tool with nested objects and no output schema, the description covers the essential behavioral surface (purpose, preview/backfill sequencing, needs_confirmation return). It leaves detailed nested structure (mapping/schedule) to the schema, which is acceptable since annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so some params are documented but not all. The description meaningfully expands `metric` (accepts an id or snake_case slug; an unknown slug starts tracking), which the schema only partly conveys, but it says nothing about the other required/optional params (mapping, schedule, windowHours, approvalId, toolArgs).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Freeze a tool call as a metric's standing source') and immediately explains the mechanism ('runs on the cadence you give and records what it finds, with no model involved'). This clearly separates it from siblings like ledger_feeds_run (one-off) and ledger_feeds_preview (validate before creating).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names two alternatives with explicit conditions: validate first with 'ledger_feeds_preview' and offer backfill afterwards with 'ledger_feeds_backfill'. This routes the agent through the correct setup sequence rather than leaving it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_deleteStop a metric feedADestructiveInspect
Remove a feed. The readings it already wrote stay — the series is the record and outlives the instruction. Prefer pausing with ledger_feeds_update when the user might want it back. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Feed id, from ledger_feeds_list. | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is covered; the description adds real value beyond that by disclosing that already-written readings survive deletion (the series outlives the instruction) and that the call may return `needs_confirmation`. It still doesn't say whether the removal is reversible or what happens to scheduled future runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all earning their place: the action, the data-retention consequence, then the alternative route. The destructive consequence and the safer alternative are both front-loaded before any edge-case detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool this covers the essentials an agent needs: what is destroyed, what survives, when to avoid it, and the confirmation possibility. Missing only secondary details such as permission requirements and effect on pending/scheduled feed runs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description adds no parameter detail of its own. The mention of a `needs_confirmation` result loosely gestures at the otherwise-undocumented `approvalId` parameter, but syntax and usage for `workspace`/`approvalId` remain entirely on the schema side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a feed') and immediately differentiates itself from the neighboring mutation tool by naming `ledger_feeds_update` as the softer alternative. An agent can tell deletion from pausing without opening either schema, despite the somewhat softer title 'Stop a metric feed'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit conditional alternative: 'Prefer pausing with ledger_feeds_update when the user might want it back,' which tells the agent when NOT to use this tool. It stops short of stating prerequisites (permissions, workspace scoping) or the inverse condition for choosing delete outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_listList metric feedsARead-onlyInspect
The standing instructions for how metrics' numbers arrive — which tool each one calls, how often, and how the last run went. Check before proposing a feed so you don't duplicate one, and consult when a user asks why a metric is stale: a feed with a failing last run is usually the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| metricId | No | Narrow to one metric (id or slug). | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: the feed's last-run result explains metric staleness. It doesn't state pagination behavior, cross-workspace visibility, or ordering, so a 3 is appropriate – useful additions but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the definition then usage triggers. No wasted words, no redundancy with the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description goes beyond a bare return-value note to describe the shape of a feed (tool called, frequency, last-run outcome) – the essential information an agent needs. Given the readOnly annotations, safety is covered; minor gaps in workspace scoping and pagination keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines both metricId (narrow to one) and workspace (omit to use pinned). The description implies filtering by metric and workspace through the 'which metric' framing. Baseline is 3 with high coverage; the description nudges to 4 by explaining the purpose of these filters (checking before proposing), which adds intent beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('standing instructions for how metrics' numbers arrive') and enumerates the exact contents (which tool each calls, how often, last run status). An agent can immediately distinguish it from sibling feeds tools like ledger_feeds_create, ledger_feeds_run, and ledger_feeds_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides two concrete when to use triggers: 'check before proposing a feed so you don't duplicate one' and 'consult when a user asks why a metric is stale'. This is strong contextual guidance. It stops short of describing limitations (e.g., scope, pagination) that would round it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feed_sources_listList servers a metric feed could pull fromARead-onlyInspect
The connected servers this workspace exposes to you, with the id a feed needs. Their tools appear to you namespaced as ext__<name>__<tool> — call one directly to see what it returns before proposing a feed. A server the workspace has switched off for you is not listed and cannot be fed from here.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Omit to use the pinned workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower; the description still adds real behavioral context: namespacing of downstream tools as `ext__<name>__<tool>`, the ability to invoke them directly to probe returns, and the fact that disabled servers are silently omitted from results. It stops short of describing result shape or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool returns and what feeds need from it, followed by the namespacing tip and the exclusion note. Every sentence carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 must carry the return semantics — it does so at a high level (servers plus the id a feed needs) but not the exact fields. For a read-only, annotation-covered list tool with a single well-documented optional parameter, this is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and the schema documents it fully (workspace slug, omit to use the pinned workspace). The description adds nothing about the workspace argument, so it sits at the baseline of 3 for a fully-covered single-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource — connected servers exposed to this workspace, along with the id a feed requires — which is clearly distinct from sibling listers such as ledger_feeds_list or caliper_sources_list. The verb 'list' lives only in the title, so the action itself is inferred rather than stated, but the resource and its purpose (feeding a metric feed) are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete workflow hook ('call one directly to see what it returns before proposing a feed'), which tells the agent when to reach for this tool relative to creating a feed. It also states a when-not case (servers the workspace has switched off are not listed and cannot be fed from here), though no sibling is named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_previewTry a feed's mapping before creating itAInspect
Call a connected server's tool once and see what a mapping would pull out of the response — nothing is written and no feed is created. Send no mapping for a first look: you get a sample of the response plus the paths that hold numbers. Then send a mapping to confirm it finds the readings you expect. Always do this before ledger_feeds_create; proposing a feed whose mapping you haven't seen work is how a metric fills up with the wrong number. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| mapping | No | How to read the number. Omit on the first look. | |
| toolArgs | No | Arguments, exactly as the tool wants them. Use {{from}} / {{to}} (ISO instants) or {{date}} (YYYY-MM-DD) where a time range goes — those are substituted per run, and are what let one feed also backfill. | |
| toolName | Yes | The tool's own name on that server — NOT the ext__ namespaced form you call it by. | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No | ||
| windowHours | No | How far back the preview's window reaches. Default 24. | |
| integrationId | Yes | From ledger_feed_sources_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=false, openWorldHint=true, readOnlyHint=false) cover the raw safety profile, and the description adds real context on top: nothing is persisted, no feed is created, and a `needs_confirmation` result is possible. One tension is unresolved — readOnlyHint=false implies possible side effects, yet the description flatly says 'nothing is written'; it never clarifies that the outward tool call to the connected server is why the tool is not marked read-only. That ambiguity keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action, then the protocol, then the routing rule, then the possible return value. The rationale sentence about a metric filling up with the wrong number earns its place by motivating the ordering constraint; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, nested-object tool with no output schema, the description covers the critical decision points: the mapping-optional two-phase flow and the `needs_confirmation` return. It is nearly complete, though `approvalId` and the workspace/windowHours interactions are left entirely to the schema, and no return shape is sketched since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 86% (baseline 3), and the description adds genuine semantics beyond the schema: the meaning of omitting `mapping` on the first call versus supplying one on the confirm pass, which the schema only hints at with 'Omit on the first look.' The `approvalId` parameter is documented in neither place, a minor residual gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Call a connected server's tool once and see what a mapping would pull out of the response — nothing is written and no feed is created.' It explicitly separates itself from ledger_feeds_create and from the run/backfill siblings by making clear it creates nothing, so an agent can pick it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step protocol (send no `mapping` for a first look, then send a mapping to confirm), names the alternative workflow by ordering 'Always do this before ledger_feeds_create,' and states the consequence of skipping it. This is exactly the when/when-not/alternative guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_runRun a metric feed nowAInspect
Run a feed immediately over its own window and record what it finds. Use it right after creating one to prove the mapping works — a run that comes back empty names the path that missed, which is what you fix with ledger_feeds_update. Does not move the feed's schedule. Re-running is safe: readings dedupe per time bucket. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Feed id, from ledger_feeds_list. | |
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false) by disclosing that it does not move the schedule, that re-running is idempotent because readings dedupe per time bucket, and that it can return `empty` or `needs_confirmation`. It stops short of explaining what `needs_confirmation` means or how the `approvalId` parameter resolves it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, each earning its place: action, when to use, side-effect boundary, idempotency, possible return state. The core action is front-loaded and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 surfaces the two notable return states (`empty`, `needs_confirmation`) and the idempotency guarantee, which is enough to call the tool safely. The approval/confirmation flow around `approvalId` is the one unresolved piece an agent would still need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; `id` and `workspace` are documented in-schema while `approvalId` is bare. The description adds no parameter-level meaning at all, and its mention of `needs_confirmation` never connects to `approvalId`, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (run) plus resource (feed) plus scope ('immediately over its own window and record what it finds'). It is clearly distinguishable from ledger_feeds_backfill, ledger_feeds_preview and ledger_feeds_update without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing guidance ('right after creating one to prove the mapping works') and names ledger_feeds_update as the follow-up for a failed mapping. It does not, however, contrast with the sibling ledger_feeds_preview, which is the obvious alternative for a non-recording test run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_feeds_updateFix or pause a metric feedADestructiveInspect
Change a feed's arguments, mapping, cadence, or pause it. Reach for this when a feed's last run reports empty (the response shape moved, so the mapping needs a new path) or error. Changing the mapping changes what the number means, so say what you're changing and why. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Feed id, from ledger_feeds_list. | |
| label | No | ||
| enabled | No | false pauses it; the definition and history are kept. | |
| mapping | No | ||
| schedule | No | ||
| toolArgs | No | ||
| toolName | No | ||
| workspace | No | Workspace slug. Omit to use the pinned workspace. | |
| approvalId | No | ||
| windowHours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive mutation, and the description adds substantive context beyond them: changing the mapping alters what the number means, and the call may return `needs_confirmation`. It does not cover permissions, reversibility, or rate behavior, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and what changes, then the trigger and the caveat. Every sentence earns its place; the guarded phrasing ('say what you're changing and why') is guidance rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 10-parameter mutation with no output schema, the description covers the essential behavioral risks plus the `needs_confirmation` return signal. The main gap is that most parameters (toolName/toolArgs/windowHours/approvalId) remain unexplained anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 30% across 10 parameters, so the description must carry more weight. It maps conceptually to mapping/schedule/enabled but adds no syntax, path format, or meaning for toolName, toolArgs, workspace, approvalId, or windowHours.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A precise update verb on a specific resource, with the mutable surface enumerated (arguments, mapping, cadence, pause). It is distinguishable from siblings like ledger_feeds_run, ledger_feeds_preview, and ledger_feeds_delete without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger: reach for it when a feed's last run reports `empty` (shape moved) or `error`. That is real when-to-use guidance, but it never names an alternative tool or a when-not (e.g., delete vs pause), so routing is not fully closed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metric_presets_adoptStart tracking metrics from the starting catalogAInspect
Creates the named presets as real metrics the workspace owns, tagged from the catalog. Safe to repeat: a preset the workspace already has comes back already_present rather than creating a second series, and a workspace's own renames and targets are never overwritten. Adopt only what the user agreed to — a metric nobody reads is noise on the Metrics tab, and eight thoughtful ones beat forty. Tell them the metrics start empty and the next step is a feed (ledger_feeds_create) or a first reading. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | Yes | Preset slugs from ledger_metric_presets_list. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations (which only declare non-read-only, non-destructive, non-open-world). Discloses idempotent semantics (`already_present` on repeat), non-overwrite guarantee for renames and targets, empty starting state, and a possible `needs_confirmation` outcome — exactly the traits an agent needs to sequence the call correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation, then idempotency/non-overwrite, then adoption discipline, then next step. Four compact sentences, each earning its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers mutation semantics, idempotency, state after creation, and follow-on tools for a tool with no output schema. The only gap is that the `needs_confirmation`/approvalId flow and workspace-key interaction are not spelled out, though the schema covers the former.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the schema documents slugs (source, min/max, maxItems 40) and workspace. The description implies a slug list ('named presets') but adds no new syntax or format guidance, and approvalId (linked to `needs_confirmation`) is left for the schema. Baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (creates/adopt) and resource (named presets as real metrics the workspace owns, tagged from the catalog). Clearly distinguishes itself from ledger_metric_presets_list (catalog browsing) and ledger_metric_starters_adopt / ledger_metrics_create by describing catalog-sourced adoption into owned metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit adoption guidance ('Adopt only what the user agreed to', anti-pattern warning about noise, 'eight thoughtful ones beat forty') and a next-step handoff to ledger_feeds_create or a first reading. Does not name when to prefer ledger_metric_starters_adopt or ledger_metrics_create instead, so full alternative routing is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metric_presets_listBrowse the starting catalog of metricsARead-onlyInspect
Ready-made metrics a business can start tracking, each with a unit, a cadence, which direction is good, a business surface (facet), and cross-cutting tags. Reach for this when a workspace has few or no metrics, when someone asks what they should be measuring, or when a decision needs a number to settle against and none exists. Filter by facet (where it lives in the business) or tag (what kind of number it is). Suggest a SMALL set — three to six that fit what you know about this business — and say in one sentence why each one, rather than listing the catalog. Adopt with ledger_metric_presets_adopt. These are starting points: a workspace renames and retargets them freely afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Cross-cutting bucket, e.g. retention, cost, speed. | |
| facet | No | Business surface, matching the Ledger facet taxonomy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: what each returned item contains, that these are starting points which can be renamed and retargeted afterwards, and an interaction norm (suggest 3-6, don't dump the catalog).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the catalog is, then usage triggers, then filters, then interaction guidance. It is on the longer side, but nearly every clause carries actionable information; only the closing rename/retarget note is marginally soft.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly describes the shape of returned items (unit, cadence, good-direction, facet, tags). With usage conditions, filters, an adopt path and interaction norms all present, an agent has everything needed to call and apply this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with enum descriptions, so baseline is 3. The description adds semantic framing beyond the schema by explaining facet as 'where it lives in the business' and tag as 'what kind of number it is', clarifying how the two filters conceptually divide the catalog.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (ready-made metric presets) and enumerates the attributes each carries (unit, cadence, good-direction, facet, tags), so the agent knows exactly what is being browsed. It also distinguishes itself from the adopt sibling, which is the action tool, not this read tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names three triggering conditions: a workspace with few/no metrics, someone asking what to measure, and a decision needing a number to settle against when none exists. It also routes the follow-up action to ledger_metric_presets_adopt by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_archiveArchive or unarchive a metricADestructiveInspect
Takes a metric out of the gallery (archived: true) or puts it back (false). Readings stay, and entries that settled against it still read correctly — this is the cleanup for a metric minted once and abandoned, or one the workspace stopped watching. metricId accepts the id or slug from ledger_metrics_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| archived | Yes | true to archive, false to restore. | |
| metricId | Yes | Metric id or slug (from ledger_metrics_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: readings are retained, settled entries still read correctly, and a `needs_confirmation` envelope may be returned. This usefully clarifies the true (reversible) impact against the destructiveHint=true annotation rather than contradicting it. It doesn't cover auth/permission requirements or workspace-scoping behavior, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and direction semantics, followed by impact and the confirmation caveat. No filler; every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and partly discharges it by disclosing the possible `needs_confirmation` response. Combined with impact/reversibility notes and the id source, an agent has enough to invoke it correctly, though it doesn't describe the success payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters. The description's notes on `metricId` accepting an id or slug and the true/false meaning of `archived` restate what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (archive/unarchive) and resource (metric), and disambiguates the two directions via `archived: true`/`false`. An agent can tell this apart from siblings like ledger_metrics_update or ledger_metrics_list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: 'the cleanup for a metric minted once and abandoned, or one the workspace stopped watching.' It also points to ledger_metrics_list as the source of valid ids. It stops short of naming an explicit alternative to use instead, so it doesn't reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_createStart tracking a metricAInspect
Create a metric — a number the workspace watches (triage time, weekly signups, cost per run). Check ledger_metrics_list first; names are unique per workspace. When a user says they want to track or measure something, offer this. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | The thing the number counts, e.g. phone for calls, landmark for profit. | |
| name | Yes | e.g. "Triage time". | |
| unit | No | Display unit — "min", "%", "$", "tickets/day". | |
| level | No | outcome = what the business is judged on; driver = moves an outcome; activity = daily work. | |
| drives | No | Ids of existing metrics this one moves. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| description | No | What the number means and where it comes from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety flags (non-read-only, non-destructive), which the description cannot improve on. The description adds real behavioral context beyond them: per-workspace name uniqueness and the possibility of a `needs_confirmation` response, which warns the agent that creation may not complete in one call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with the definition of a metric, then the constraint, then the trigger, then the caveat. No wasted prose, though the 'offer this' instruction is arguably guidance rather than description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter write tool with no output schema, the description covers the key operational facts an agent needs: uniqueness, confirmation behavior, and the user-intent trigger. It does not explain the approvalId parameter or what a successful response returns, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so the schema already documents name, icon, unit, level, drives, workspace, and description in detail. The description only reinforces the name-uniqueness constraint and adds no syntax or format guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a metric — a number the workspace watches') with concrete examples (triage time, weekly signups, cost per run). This clearly separates it from ledger_metrics_update, ledger_metrics_list, and ledger_metrics_archive in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to check ledger_metrics_list first and why (names are unique per workspace), and gives a trigger condition ('When a user says they want to track or measure something, offer this'). Both the prerequisite and the invocation context are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_getRead one Ledger metric with its readingsARead-onlyInspect
One metric's definition (unit, kind, direction, target, cadence) plus its readings newest first and the open decisions bound to it. Use before answering 'how is X trending?' or before recording a reading against it. metricId accepts the id or the snake_case slug from ledger_metrics_list. For an event metric whose readings carry labels, labels lists each label and its values, largest total first. Pass slice to get the series for part of it ("new users in DE"), or by to split the series by one label ("new users by country"); either returns series, summed per bucket.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Event metrics only. A label name to split the series by. | |
| slice | No | Event metrics only. Per label, the values to keep: { country: ["DE", "AT"] } keeps readings from DE or AT; several labels must all match. Names and values come from `labels`. | |
| bucket | No | Series bucket when `slice` or `by` is set. Default week. | |
| metricId | Yes | Metric id or slug (from ledger_metrics_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 genuine behavior beyond that: readings returned newest first, decisions bound to the metric, labels ordered by largest total, and series summed per bucket. It stops short of disclosing limits, pagination, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the identity and return contents lead, followed by usage, then parameter guidance. Every sentence carries information, though the parameter clauses could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value explanation, and it does (definition fields, readings, decisions, labels, series). A complex tool with a nested slice object is handled well; only edge behaviors like limits or error cases are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further with worked examples for slice and by ('new users in DE', 'new users by country') and clarifies that either produces a series summed per bucket. That meaning is not fully derivable from the schema text alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read one Ledger metric) and enumerates what comes back: the definition fields, readings newest first, and bound open decisions. This is clearly distinguishable from the sibling ledger_metrics_list, which lists many metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete use contexts: before answering 'how is X trending?' and before recording a reading against it. It also points to ledger_metrics_list as the source of ids/slugs. No explicit when-not or exclusion cases are given, so it falls just short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_listList the workspace's Ledger metricsARead-onlyInspect
The numbers the workspace watches — each with unit, latest reading, and how many open decisions are bound to it. Consult when a user mentions a number that sounds like a tracked metric, and before recording a reading.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description usefully discloses the returned fields (unit, latest reading, open-decision count), which matters since there is no output schema, but says nothing about pagination, ordering, or empty-state behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what the resource is before the usage triggers. Slightly literary phrasing ('the numbers the workspace watches') costs a little precision but no real bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape and does so adequately (unit, latest reading, open-decision count). Combined with fully covered schema parameters and read-only annotations, an agent has enough to call it correctly; pagination/ordering details are the only real omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the workspace parameter is thoroughly documented in the schema itself (default handling, API-key behavior). The description adds no parameter-level information, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description characterizes the resource well (tracked metrics, each with unit, latest reading, and bound-decision count), which tells an agent what this returns. It is slightly indirect — it never uses a list verb and does not explicitly distinguish itself from ledger_metrics_get or ledger_metric_presets_list — but the title plus the payload description make the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggers: when a user mentions a number that sounds like a tracked metric, and before recording a reading (an implicit check-before-write rule). No alternatives are named, but the when-to-use conditions are specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_record_readingRecord a metric readingAInspect
Record one observation of a tracked metric. metricId accepts a metric id OR its snake_case slug from ledger_metrics_list; an unknown one is a not_found error — check ledger_metrics_list, create it with ledger_metrics_create, or pass createIfMissing: true to mint a "measure" metric at that slug in the same call (an "event" metric when the reading carries labels). The reading automatically lands as evidence on every open decision whose prediction is bound to this metric — so when a user reports a number ("triage is down to 12 minutes"), offer to record it. For event-kind metrics, omit value to count one occurrence. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ISO timestamp the reading is for. Defaults to now; set it when backfilling an earlier reading. | |
| key | No | Idempotency key (e.g. "2026-w32") — a repeat write with the same key returns the original reading instead of doubling the series. Use for scheduled/recurring recordings. The key is per set of labels, so one key per day can cover every country. | |
| note | No | Where the number came from, if worth recording. | |
| value | No | The observed value, in the metric's unit. Omit for event-kind metrics to record one occurrence. | |
| labels | No | Event metrics only. What this count is broken down by, e.g. { country: "DE", plan: "pro" } — snake_case names, string values. Lets the metric be read and claimed by slice later. Refused on a measure. | |
| metricId | Yes | Metric id or slug (from ledger_metrics_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| createIfMissing | No | Mint the metric when the slug is unknown. Default false — an unknown slug is an error, so a typo can't quietly start a second series. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-read-only, non-destructive write. The description adds substantive behavior beyond that: the reading auto-lands as evidence on every open decision bound to the metric, unknown slugs produce not_found rather than silently creating a series, and the call may return needs_confirmation. These are the side effects an agent must anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then resolution guidance, then the evidence/confirmation behavior. It is dense and parentheses-heavy but every sentence carries operational value; no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the important return behaviors (evidence attachment, needs_confirmation). For a 9-parameter mutation with nested labels, this is near-complete, though it does not tell the agent what needs_confirmation means for a subsequent retry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 89%, so the baseline is 3. The description still adds real semantics over the schema: metricId accepts an id or a snake_case slug, createIfMissing mints a 'measure' metric (or 'event' when labels are present), and labels presence switches metric kind. That cross-parameter interaction is not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Record one observation of a tracked metric') and clearly scoped resource, distinguishing it from ledger_metrics_create/list which it explicitly names for adjacent purposes. An agent immediately knows this writes a single data point rather than defining or reading a metric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use ledger_metrics_list to find a slug, ledger_metrics_create to mint one, or pass createIfMissing to do both, plus the not_found behavior on an unknown slug. It also states the trigger condition ('when a user reports a number ... offer to record it') and the event-metric near-alternative (omit value to count an occurrence).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metric_starters_adoptStart from a starter metric treeAInspect
Creates a starter's metrics at their levels and links them. Pass slugs to keep only some of its metrics; links are made only where both ends exist. Safe to repeat and safe after a different starter: metrics the workspace already has are left as they are and get linked into the tree. Adopt only what the user agreed to. Tell them the metrics start empty and the next step is connecting a source (ledger_feeds_create) or a first reading. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | No | The starter's metrics to keep. Omit for all of them. | |
| starter | Yes | Starter slug from ledger_metric_starters_list. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: idempotency ('safe to repeat and safe after a different starter'), non-destructive merge semantics ('metrics the workspace already has are left as they are'), the empty-start state, and a conditional return ('May return needs_confirmation'). These are exactly the mutation traits an agent needs and are not derivable from the schema or hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and dense with distinct facts (slugs filter, idempotency, empty state, next step, confirmation return). Every sentence earns its place; slightly list-like but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 75% param coverage, it covers lifecycle, idempotency, and the confirmation return well. The only real gap is that approvalId (the confirmation path) is not tied to the 'needs_confirmation' mention, leaving that flow slightly under-explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the schema already documents slugs ('The starter's metrics to keep. Omit for all of them') and starter. The description's 'Pass `slugs` to keep only some' largely restates that. The undocumented approvalId is never explained, so no real value is added over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Creates a starter's metrics at their levels and links them.' This is clearly distinct from ledger_metric_starters_list (read) and readable in the name. However it never explicitly contrasts itself with the closely related ledger_metric_presets_adopt, leaving the starter-vs-preset choice to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: 'Pass `slugs` to keep only some of its metrics' and 'Adopt only what the user agreed to', plus explicit next steps (connect a source via ledger_feeds_create). It does not state when NOT to use it or name the preset alternative, so it stops short of full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metric_starters_listBrowse starter metric treesARead-onlyInspect
Starter trees by shape of business or team (subscription software, services firm, online store, sales team, service operation). Each lists its metrics with a level (outcome / driver / activity) and the links between them (which number moves which). Reach for this before ledger_metric_presets_list when a workspace has no metrics yet or asks how its numbers fit together: pick the starter that matches what you know about the business, describe its tree in a sentence or two, and offer to adopt it with ledger_metric_starters_adopt, dropping any metric that doesn't fit.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the read-only safety profile is covered. The description adds that entries are non-persistent starters which adopt via ledger_metric_starters_adopt, but says nothing about output shape or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, then the usage trigger, then the adopt workflow. Slightly dense in the closing 'pick/describe/offer' instruction, but every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param read tool with no output schema, the description tells the agent what the trees contain (metric levels, links) and how to act on the result including the adopt hand-off. Missing only a hint of how large/varied the starter catalog is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing for the schema to document and nothing for the description to compensate for. It correctly does not fabricate parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-resource (starter metric trees by business shape) and screens off the likely-confused sibling ledger_metric_presets_list. An agent knows exactly what comes back: trees of metrics with levels and links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger: 'Reach for this before ledger_metric_presets_list when a workspace has no metrics yet or asks how its numbers fit together.' It names the alternative, the ordering, and the qualifying condition — nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_metrics_updateEdit a metric's definitionADestructiveInspect
Corrects a metric's name, unit, description, kind (measure / event), direction (which way is good), target, cadence, icon, level, or the metrics it drives (its place in the metric tree). Readings are untouched. Only what you pass changes. The slug is not editable here — external writers address metrics by slug. Fails with conflict when a rename collides with a live metric. metricId is the id from ledger_metrics_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | The mark the metric wears in every tool: the thing it counts (phone for calls, landmark for profit). "" goes back to the catalog's icon. | |
| kind | No | measure = a value each reading; event = a count of occurrences. | |
| name | No | ||
| unit | No | "min", "%", "$", "tickets/day". | |
| level | No | outcome = what the business is judged on; driver = a number that moves an outcome; activity = daily work. "" unplaces it. | |
| drives | No | Ids of the metrics this one moves. Replaces the current set; pass the full list. Loops are refused. | |
| target | No | Goal value in the metric's unit; null clears. | |
| cadence | No | How often a reading is expected. | |
| metricId | Yes | Metric id (from ledger_metrics_list). | |
| direction | No | up = higher is better, down = lower is better, none. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a write/destructive, closed-world operation, so the bar is lower — yet the description adds substantial behavior beyond them: partial-update semantics ("Only what you pass changes"), that readings are untouched, conflict-on-rename failure, and a possible needs_confirmation envelope. These are exactly the non-obvious traits an agent needs before invoking a 13-param mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the editable facets, then the operational constraints (readings untouched, partial update, slug locked, conflict, confirmation). Dense but every sentence carries distinct information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-param mutation with no output schema, the description covers the critical gaps: partial update, non-editable slug, conflict behavior, and the needs_confirmation return signal. It does not explain the approvalId/confirmation round-trip in detail, which is the only remaining loose end.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 85%, so the schema does most of the work (unit, kind, level, drives, target, cadence are all documented inline). The description still adds value by flagging the partial-update contract, the metricId provenance, and the non-editability of slug, which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Corrects a metric's definition") followed by the full list of editable facets, which pins down exactly what this tool mutates versus ledger_metrics_create/archive/record_reading. It also explicitly states what is NOT editable (the slug) and where metricId comes from, so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: metricId must be sourced from ledger_metrics_list, the slug is out of scope here, and renames collide with live metrics. It stops short of explicit when-to-use-this-vs-create/archive routing, but the scope statements make the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_plan_addAdd dated work to a Ledger decisionAInspect
Adds a plan item to an OPEN decision (the work that carries it out: a post, a launch step, an email). Omit entryId for a standalone date (a holiday, an event you're only watching). Items are all-day unless you pass startTime with timeZone (and optionally endTime), for a webinar, a scheduled post, or a launch at noon. If the date costs money or time and comes with an expectation, record it as a decision with ledger_entries_create instead. Use repeatWeeklyUntil for a weekly cadence: it writes one row per week (max 60), each movable on its own. Fails with conflict once the decision is settled. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Where the work lives (draft, deck, published post). | |
| note | No | ||
| tags | No | What kind of work it is: blog, video, social, event… Reuse the workspace's existing tags (see ledger_plan_list). | |
| dueOn | Yes | A calendar day, YYYY-MM-DD. | |
| title | Yes | ||
| endTime | No | Same-day end, after startTime. | |
| entryId | No | The open decision this carries out. | |
| timeZone | No | IANA zone the time is in (America/Chicago). Required with startTime; use the user's own zone. | |
| startTime | No | Omit for an all-day item. 24-hour HH:MM in timeZone. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| ownerUserId | No | A workspace member's user id. | |
| repeatWeeklyUntil | No | Also add a copy every 7 days through this day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description goes well beyond: it discloses that the tool fails with conflict once the decision is settled, may return a needs_confirmation envelope, and that repeatWeeklyUntil writes one row per week capped at 60, each movable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the primary alternative, and each sentence carries a distinct decision-relevant fact. It is dense and slightly run-on, but nearly every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description supplies the important return signals (conflict on settled decisions, needs_confirmation with a matching approvalId param). For a 13-parameter mutation tool this is close to complete, though a brief note on the success return shape would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 85%, so the schema already documents most parameters. The description nonetheless adds cross-parameter semantics the schema names only individually: all-day by default unless startTime accompanies timeZone, and the per-week row behavior of repeatWeeklyUntil.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds a plan item to an OPEN decision') and immediately clarifies what a plan item is ('the work that carries it out: a post, a launch step, an email'). It distinguishes itself from ledger_entries_create by explaining when the same date should be recorded as a decision instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use this for work, use ledger_entries_create if the date 'costs money or time and comes with an expectation'. It also names concrete conditions for omitting entryId, using repeatWeeklyUntil, and providing startTime/timeZone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_plan_deleteRemove a Ledger plan itemADestructiveInspect
Removes one plan item while its decision is open, for an item added by mistake or work that's no longer planned. If the work was planned and then dropped, prefer ledger_plan_update with status 'skipped' so settlement can see it. Fails with conflict once the decision is settled. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real behavioral detail beyond that: a conflict failure once the decision is settled, and the possibility of a needs_confirmation response envelope. It stops short of saying whether removal is reversible or what happens to the settled record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope before the alternative and failure modes. Efficient overall, though the alternative-tool sentence is slightly clause-heavy and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the main behavioral risks: the precondition (open decision), the failure mode, and the confirmation flow. It omits permissions requirements and whether the removal is permanent, but nothing critical to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; workspace and approvalId carry their own descriptions, while itemId is undocumented in the schema. The description ties the needs_confirmation return to the approvalId flow, which adds some meaning, but it never clarifies the itemId format or what identifying a plan item entails. Baseline 3 for partial coverage with modest added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes one plan item') and immediately scopes it ('while its decision is open'), which separates it from ledger_plan_add, ledger_plan_list and ledger_plan_update. An agent can identify the operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('added by mistake or work that's no longer planned') and when-not, naming the alternative tool and argument ('prefer ledger_plan_update with status "skipped"') with the reason ('so settlement can see it'). This is a complete routing rule, not an implied one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_plan_listRead the Ledger calendar or one decision's planARead-onlyInspect
Pass entryId for one decision's plan items, or from + to (YYYY-MM-DD, at most about a year apart) for the calendar: decision spans (recorded day → expectation deadline) plus every dated item inside the window, including standalone dates with no decision. Filter the calendar by ownerUserId to answer 'what's mine this week' or to find tomorrow's items to draft. Never use it to compare or rank people's output.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | A calendar day, YYYY-MM-DD. | |
| tag | No | Only items with this tag (blog, video, event…). | |
| from | No | A calendar day, YYYY-MM-DD. | |
| entryId | No | One decision's plan. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| ownerUserId | No | Only items owned by this member. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds real behavioral context beyond that: the ~1-year maximum window between `from` and `to`, and the fact that results include decision spans and standalone dates with no decision. It does not mention result size or pagination, which matters for a year-wide window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense block, but front-loaded with the mode-selection rule before the details, and every clause carries information (return shape, window limit, filter intent, exclusion). Slightly long and could be split for readability, but there is little dead weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 work of explaining what comes back — decision spans and every dated item in the window — which is exactly what an agent needs to interpret results. The remaining gap is the absence of any note on result volume or pagination for a window that can span a year.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it establishes that `entryId` and `from`/`to` are alternative modes, restates the YYYY-MM-DD format with the range constraint, and gives `ownerUserId` a purpose ('what's mine this week'). That is more than the schema's terse 'Only items owned by this member'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — reads the Ledger calendar or a single decision's plan — and spells out exactly what the two query modes return (decision spans plus every dated item, including standalone dates). It is clearly the read counterpart to ledger_plan_add/update/delete, but it never names those siblings, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing between the two modes (`entryId` for one decision vs `from`+`to` for the calendar), names concrete situations it answers ('what's mine this week', 'find tomorrow's items to draft'), and adds a hard exclusion — never use it to compare or rank people's output. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_plan_updateMove, rename, re-own, or mark a Ledger plan itemADestructiveInspect
Edits one plan item while its decision is open: move it (dueOn), rename it, change the owner (null clears), attach the link, or set status (planned | done | skipped). Mark done only when the user says it shipped; a link alone doesn't mean done. Fails with conflict once the decision is settled. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| note | No | ||
| tags | No | Replaces the item's tags. | |
| dueOn | No | A calendar day, YYYY-MM-DD. | |
| title | No | ||
| itemId | Yes | ||
| status | No | ||
| endTime | No | ||
| timeZone | No | Required when setting startTime. | |
| startTime | No | null makes it all-day again. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| ownerUserId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real behavioral context beyond them: the conflict failure on settled decisions, the possible `needs_confirmation` envelope, and the null-clears semantics for owner. It does not detail permissions or what a partial update leaves untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, fully front-loaded: core operation first, then the guardrail, then the failure/confirmation behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter destructive mutation with no output schema, the description covers the main edit semantics, the state gate, and the confirmation path, which is what an agent most needs. It stops short of explaining the time-zone/start-end time interaction and the note/tags fields, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 46%, so the description must compensate and does for several fields: it maps dueOn to move, title to rename, ownerUserId null to clearing, url to attaching a link, and lists the status enum. However it omits the timing trio (startTime/endTime/timeZone), note, and tags, so meaningful parameters remain undocumented in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Edits one plan item') and enumerates the exact edit operations (move via dueOn, rename, re-own, attach link, set status). This clearly separates it from the ledger_plan_add/delete/list siblings without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when ('while its decision is open'), a when-not with the failure mode ('Fails with conflict once the decision is settled'), and a strong operational rule ('Mark done only when the user says it shipped; a link alone doesn't mean done'). Little is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_docsList ZeroWidth docs pagesARead-onlyInspect
Enumerate all available docs pages, optionally filtered by product (e.g. 'compass', 'legal', 'overview'). Use this to discover what slugs exist before calling get_doc. No authentication required.
| Name | Required | Description | Default |
|---|---|---|---|
| product | No | Optional product slug filter (e.g. 'compass', 'legal', 'overview'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: 'No authentication required.' It stops short of describing pagination or result shape, but that gap is minor for a simple read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the scoping/workflow guidance is front-loaded before the operational note about authentication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 tell the agent what it will get conceptually (available pages, their slugs) and how it fits with get_doc. It omits return fields and pagination behavior, which an agent might want, but nothing prevents correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional 'product' parameter is already documented with the same example values in the schema. The description repeats the filter semantics and examples rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Enumerate all available docs pages') with scope and an optional filter named upfront. It is clearly distinguishable from sibling reads like get_doc, list_posts, and search_docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the use case: 'discover what slugs exist before calling get_doc', which gives the agent a concrete workflow position. It names one downstream sibling but does not contrast against search_docs, which is the closest overlapping discovery tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsList Distributed Cognition essaysARead-onlyInspect
Lists ZeroWidth's published Distributed Cognition essays (newest first): title, slug, excerpt, byline, public URL. Use this when the user asks what's been published, or when a workspace question might already have an essay behind it — then fetch the full text with get_post. No authentication required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max essays to return. Defaults to 10. | |
| cursor | No | Pagination cursor from a prior call's nextCursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds non-obvious context beyond that: results are newest-first, no authentication is required, and the exact field set returned. It does not state total counts or truncation behavior, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero padding: the resource and ordering come first, then the usage triggers, then the routing hint and auth note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description enumerates the returned fields (title, slug, excerpt, byline, public URL), and pagination is handled by the documented cursor parameter. For a two-parameter read-only list tool, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (limit default/max, cursor usage are all documented inline), so the schema already carries parameter meaning. The description adds nothing about limit or cursor semantics, making the baseline 3 appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (ZeroWidth's published Distributed Cognition essays), and names the exact return fields plus ordering. It is clearly distinguishable from siblings such as get_post (single essay) and list_docs/search_docs (different corpus).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit triggering conditions ('when the user asks what's been published', 'when a workspace question might already have an essay behind it') and routes the agent to the alternative for the other need: fetch full text with `get_post`. This is explicit when-to-use plus named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_boards_createCreate a Napkin boardAInspect
Creates a blank Napkin board — a sketch (free canvas) or a deck (slides). NOT for written documents: 'draft/write a doc, note, memo' is napkin_docs_create. Use when the user asks for one, or proactively when a sketch/deck would carry the conversation better than words; hand it over with [[board:ID]] alone on its own line. For a deck with content, prefer napkin_deck_write (one call, whole deck).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Defaults to "sketch". | |
| name | Yes | Board name. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds genuinely non-structured behavior: that the board is created blank, the hand-off convention (`[[board:ID]]` alone on its own line), and the preference to use napkin_deck_write when content exists. It doesn't discuss rate limits or the response shape, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then routing, then usage, then hand-off syntax. Dense but every clause (the doc exclusion, the proactive trigger, the deck_write alternative, the `[[board:ID]]` format) carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A create tool with no output schema and full param coverage needs only purpose, sibling routing, and invocation convention — all present. An agent has everything required to call it correctly and to hand the result back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 kind, name, and workspace (including the token/default-workspace rule). The description's mention of sketch/deck merely restates the kind enum, adding no syntax or format detail beyond structured data. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a blank Napkin board') and immediately scopes it to the two kinds (sketch/deck). It also explicitly excludes the closest-looking sibling, napkin_docs_create, so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (user asks, or proactively when a sketch/deck carries the conversation better) plus when-not (written documents → napkin_docs_create) and a named alternative for a specific case (napkin_deck_write for a deck with content). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_boards_getRead a Napkin board's shapesARead-onlyInspect
Returns a board's shapes as data — each with its id, kind, position, size, and text — so you can TARGET one to change or remove with napkin_draw (updates / deletes take these ids and absolute board coordinates). Pen strokes come back as a point count, not the points. For what the board LOOKS like, use napkin_boards_view instead. Board ids come from napkin_boards_list.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | Napkin board id (from napkin_boards_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only safety, but the description adds real behavioral detail: the exact return fields (id, kind, position, size, text) and the limitation that pen strokes come back as a point count rather than points. It omits things like result size limits or error behavior, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the purpose and return shape, then the pen-stroke caveat and sibling routing. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the returned shape fields and the pen-stroke truncation; read-only safety is covered by annotations. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both boardId and workspace are already documented, and the description's note that ids come from napkin_boards_list duplicates the schema text. Baseline 3 applies since the description adds no new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Returns a board's shapes as data") and enumerates the returned fields, immediately distinguishing it from napkin_boards_view (visual) and napkin_draw (edits). An agent can tell it apart from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use this to target a shape for change/removal via napkin_draw, use napkin_boards_view for appearance, and get board ids from napkin_boards_list. Both the when and the when-not alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_boards_listList Napkin sketchesARead-onlyInspect
Lists sketch boards in the active workspace — name, id, kind (sketch / deck), shape count, last activity. Boards are SPATIAL canvases (drawing, diagrams); the markdown DOCUMENTS are docs — napkin_docs_list. Archived boards are hidden unless includeArchived; q narrows by name. When the user mentions a sketch, drawing, whiteboard, or napkin, find it here, then LOOK at it with napkin_boards_view before discussing its contents. When referring the user to a sketch in your reply, put [[board:ID]] alone on its own line — it renders as a clickable card with a live thumbnail.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Name contains (case-insensitive). | |
| kind | No | Only sketches or only decks. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No | Also list archived boards (default false). |
TDQS
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 real behavioral context beyond annotations: archived boards are hidden by default, and the [[board:ID]] citation convention renders a clickable card. This is useful, non-obvious behavior that the schema and annotations do 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is front-loaded with high-value information: scope, return fields, sibling disambiguation, filter behavior, and the two-step find-then-view workflow. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four optional parameters with full schema coverage and no output schema, the description supplies the missing behavioral layer: default archiving visibility, the view-before-discussing workflow, and the citation format. An agent can invoke this tool correctly and follow the intended downstream behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a semantic nuance not captured in the schema: includeArchived reveals hidden archived boards specifically, and q narrows by name. The workspace parameter's default-workspace behavior is left to the schema, which handles it thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists sketch boards') and immediately enumerates the returned fields (name, id, kind, shape count, last activity). It explicitly differentiates itself from the sibling napkin_docs_list by contrasting spatial canvases with markdown documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: when the user mentions a sketch, drawing, whiteboard, or napkin, find it here, then view it with napkin_boards_view before discussing contents. It also names napkin_docs_list as the alternative for documents, leaving no ambiguity about when 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.
napkin_boards_updateRename, describe, archive, or share a Napkin boardADestructiveInspect
Edits a board's details: name, description, visibility, or archived (true takes it out of the gallery; false brings it back — the recovery move for a board you created by mistake or the user no longer wants). Board ids come from napkin_boards_list. Boards are working material: no approval card, every change attributed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| boardId | Yes | Napkin board id (from napkin_boards_list). | |
| archived | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds material context beyond them: it discloses that archiving is reversible ('false brings it back'), which softens the destructive flag, and notes the governance model ('no approval card, every change attributed'). Still silent on auth requirements or rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and the field list, with the operational detail (archive semantics) in the middle and provenance last. The parenthetical about archiving is dense but earns its place; slightly overstuffed for a single tool but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation with no output schema, the description covers mutation semantics, reversibility, id provenance, and governance. The only gap is the workspace parameter, which the description ignores but the schema documents, so an agent has what it needs to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema coverage the description has to carry weight, and it does: it explains the semantics of name, description, visibility, and archived, plus the id provenance (napkin_boards_list). Only the workspace parameter is left entirely to the schema, so it adds real value over structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (edits) and resource (board details) and enumerates exactly which fields can change: name, description, visibility, archived. This separates it cleanly from the napkin_boards_create/get/list/view siblings without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the archived-field explanation gives a clear scenario ('recovery move for a board you created by mistake') and 'Board ids come from napkin_boards_list' supplies the prerequisite. But there is no explicit when-to-use/when-not-to-use statement or named alternative tool, so guidance remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_boards_viewView a Napkin sketch (rendered image)ARead-onlyInspect
Renders the sketch board to an image and returns it so you can SEE what's drawn — layout, arrows, handwriting-style strokes, sticky notes — not just data about it. Use this before answering any question about a sketch's contents, and cite the board when you do — [[board:ID]] alone on its own line embeds the sketch card in your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | Napkin board id to render. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds the key non-obvious behavior the schema cannot convey: the tool returns a rendered image (layout, arrows, strokes, sticky notes) rather than structured data, plus the required citation format. It omits render size/latency limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the core capability and the 'SEE' contrast front-loaded before the usage and citation guidance. Slightly long due to the embed syntax, but every clause is actionable and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining exactly what comes back (a rendered image of the drawing). Combined with when-to-use and citation guidance, and with safety covered by annotations, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 2 parameters at 100% schema description coverage, the schema already fully documents boardId and workspace (including the personal-token workspace requirement). The description alludes to boardId via the [[board:ID]] citation example but adds no new parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb (renders the board to an image and returns it) and resource (sketch board), and explicitly distinguishes itself from the data-only sibling by saying 'not just data about it.' An agent can tell this apart from napkin_boards_get without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear selection rule: 'Use this before answering any question about a sketch's contents,' and adds the citation convention ([[board:ID]]) for replies. It stops short of naming the alternative tool (napkin_boards_get) or stating exclusions, so it is clear context rather than fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_add_filesAdd pictures to a brand kitAInspect
Adds pictures to a brand kit section — logo versions, product marks, example screenshots, imagery. Each file comes from a public https url (fetched by the server) or, for a small file that isn't online, base64 data with a filename. PNG, JPEG, WebP, GIF and SVG, up to 20 MB each. Every file becomes a workspace file and an asset on the section, appended after the ones already there. Give each a name and a note saying what it's for; on logo sections set backdrop to the hex of the ground it's made for (#ffffff for a dark logo, #000000 for a reversed one), which is how pages pick the right version. Same rule as napkin_brand_draft: you can change any kit except the workspace's brand. Files that fail are reported and the rest still land.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only when no section has that title yet: the kind of section to make. | |
| files | Yes | ||
| kitId | Yes | The kit to add to (napkin_brand_list). | |
| section | Yes | Title of the section to add them to, like Logo, Imagery or Examples. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnly=false, destructive=false, openWorld=true, the description carries the real behavioral weight: files are appended (not replaced), each becomes both a workspace file and a section asset, failures are reported while the rest still land, and the workspace-brand edit restriction. These are non-obvious side effects and partial-success semantics beyond what annotations state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then formats/limits, then naming and backdrop guidance, then the permission rule and failure behavior. Dense and largely waste-free, though the parenthetical backdrop example and repeated cross-reference make it a touch long for a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the definition covers inputs, limits, side effects, permission constraints, and partial-failure reporting. It omits the auto-create-section behavior of the kind parameter (left entirely to the schema), a minor gap for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents most parameters. The description still adds meaning: url is server-fetched, data is base64 for offline small files, and backdrop is explained functionally ('how pages pick the right version') rather than just as a hex pattern. The kind/auto-create-section parameter is left to the schema, keeping this at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource ('Adds pictures to a brand kit section') and immediately enumerates the concrete sub-cases (logo versions, product marks, screenshots, imagery). An agent can distinguish this from sibling napkin_brand_fonts/napkin_brand_draft without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: which source forms are valid, size/format limits, and an explicit constraint ('you can change any kit except the workspace's brand'), cross-referenced to napkin_brand_draft for the shared rule. It does not name an explicit 'use X instead' alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_applyApply the brand to a pieceADestructiveInspect
Restyles a piece in the brand — the workspace's brand unless you name a kit. deck (a board id): every slide gets the brand's background, typefaces, and text colors; sizes are kept. interface (an interface id): rewrites its brand.css, so anything styled with var(--brand-*) updates. accent makes one of the kit's colors the piece's accent — use it when the piece is about one product or campaign that has its own color in the brand (read the kit's Colors section to see which). Docs need nothing — they read the brand when exported. Check a deck afterwards with napkin_slide_view.
| Name | Required | Description | Default |
|---|---|---|---|
| deck | No | Board id of a deck. | |
| kitId | No | A brand kit id from napkin_brand_list. Omit for the workspace's brand. | |
| accent | No | Name of one of the kit's colors to use as this piece's accent. | |
| interface | No | Interface id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, but the description goes well past them: it specifies what actually changes per mode (every slide's background, typefaces, text colors), what is preserved (sizes are kept), and the mechanism for interfaces (rewrites brand.css so var(--brand-*) consumers update). That is exactly the kind of mutation-scope detail the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the opening clause, then each sentence maps to one mode and one actionable instruction. Dense but every clause carries information; no restating of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden lightly and appropriately (it points to napkin_slide_view for verification instead). For a 5-parameter, zero-required-parameter tool with three behavioral modes, the only gap is what happens when no target is supplied or when multiple mode parameters are combined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nonetheless adds meaning beyond the schema: it explains that omitting kitId yields the workspace brand, that deck takes a board id, and — most valuably — the semantic selection rule for `accent`. It does not clarify whether deck and interface are mutually exclusive, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (restyles a piece in the brand) and then disambiguates the three target types — deck, interface, accent — with concrete effects for each. An agent can tell exactly what the tool does and how it differs from siblings like napkin_deck_set_theme or napkin_interfaces_write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the condition for using `accent` (piece is about one product/campaign with its own brand color, and tells you to read the kit's Colors section), states a when-not case (docs need nothing because they read the brand at export), and names a verification follow-up (napkin_slide_view). This is the rare case of explicit when/when-not/next-step guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_checkCheck writing against the brandARead-onlyInspect
Finds words the brand says to avoid in a piece of writing, with what to say instead and why. Pass text, or a deck (boardId) or doc (docId) to check its words. Run it on your own drafts before handing them back.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text to check. | |
| docId | No | A doc to check. | |
| kitId | No | A brand kit id from napkin_brand_list. Omit for the workspace's brand. | |
| boardId | No | A deck or sketch to check. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 real value beyond that by disclosing what the operation returns ('what to say instead and why'), which matters because there is no output schema, and by pointing to which inputs select which target. It says nothing about rate limits, empty-brand behavior, or result size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the core purpose front-loaded before the input options and the usage nudge. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Read-only safety comes from annotations, source selection and return content come from the description, and all five parameters are documented in the schema; with no output schema, the description's note about returning the offending words plus replacements and rationale fills the remaining gap. An agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a relationship the schema cannot express: that text, boardId, and docId are alternative ways to supply the content to check (the schema merely lists all five as optional with no exclusivity). It does not clarify kitId or workspace, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Finds words the brand says to avoid in a piece of writing', and it clarifies the return payload (what to say instead and why). This is clearly distinguishable from siblings like napkin_brand_get, napkin_brand_list, or napkin_brand_apply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage occasion: 'Run it on your own drafts before handing them back', which tells the agent when to reach for this tool. It does not name explicit alternatives (e.g., versus another review/check tool) or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_draftDraft a brand kitADestructiveInspect
Creates a new brand kit, or edits one that is NOT the workspace's brand. Use it when someone asks you to put their brand together (from their site, a deck, or what they tell you) or to try a variation. You can't change the workspace's brand itself — make a draft and tell the user they can choose it in Napkin's Brand section. A kit is a document of sections, each with title, kind (overview, voice, colors, typography, logo, imagery, motion, layout, examples, custom), markdown body, and rules ({rule, why}); colors sections hold swatches ({name, value: 6-digit hex, note}), typography sections hold faces ({name: what it's for, family: a font name or sans / serif / mono / rounded / marker, note}), voice sections hold use and avoid ({term, instead, why}), and any section can hold assets ({fileId: an image already in the workspace's files, name, note, backdrop: hex}) — logo versions, example images — and links ({url, title, note}). An examples section holds work that gets the brand right: screenshots as assets and pages as links, each with a note on what makes it good. Exact numbers (timings, spacing) go in the section's prose. New kits start with empty standard sections plus the workspace's colors. content.sections upserts by title (or id): fields you pass replace, lists inside replace, sections you don't mention are kept; removeSections drops by title. content.uses says how Napkin uses the brand — color roles (ink, muted, background, surface, accent, accent2) and fonts (heading, body, mono) — by swatch or face NAME. Give every rule a why: the reason is what lets people decide cases the rule doesn't cover.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| kitId | No | Kit to edit. Omit to create a new kit. | |
| content | No | ||
| fromKitId | No | New kits only: start from this kit's values. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses the upsert contract in detail: 'fields you pass replace, lists inside replace, sections you don't mention are kept; removeSections drops by title,' plus new-kit defaults ('empty standard sections plus the workspace's colors'). This is exactly the mutation semantics an agent needs to avoid clobbering data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The information is mostly load-bearing for a deeply nested schema, but it is delivered as one dense, unbroken paragraph that mixes usage, data model, and upsert semantics. Front-loading is good, yet the wall-of-text formatting hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested-object tool with no output schema, the description is largely complete: it covers creation/editing rules, defaults, section kinds, and destruction semantics. Gaps remain around the top-level name/description/fromKitId parameters and any return shape, but the core invocation contract is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the description compensates well by explaining the section data model (title/kind/body/rules, swatches, faces, use/avoid, assets, links), the hex format, and how content.sections/uses/removeSections behave. It omits meaning for name, description, and fromKitId, which the schema only partially covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pairing, 'Creates a new brand kit, or edits one that is NOT the workspace's brand,' which immediately scopes it apart from the other napkin_brand_* siblings (get, list, apply, view). An agent can tell this is the drafting/mutation tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger conditions — 'Use it when someone asks you to put their brand together (from their site, a deck, or what they tell you) or to try a variation' — and states a clear negative boundary plus the workaround for the workspace brand. It stops short of naming the alternative tool (e.g. napkin_brand_apply) by name, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_examplesLook at the brand's examplesARead-onlyInspect
Shows you the pictures in a kit's Examples sections — screenshots of work that gets the brand right — with each one's note on what makes it good, plus the example links. Look before you design a deck, page or interface in the brand, and hold your work to the same bar: the layouts, density, type sizes and use of color you see there.
| Name | Required | Description | Default |
|---|---|---|---|
| kitId | No | Kit to look at. Omit for the workspace's brand. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds real value beyond that by disclosing what the return contains — screenshots, per-example notes on what makes them good, and the example links — which is meaningful behavioral context. It says nothing about count limits or pagination, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core action front-loaded in the first. The second sentence is longer and prescriptive but does earn its place by conveying the intended workflow. Slightly verbose in its closing clause, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-optional-parameter tool with no output schema, the description covers what it returns (images, notes, links) and when to use it. The main omission is any indication of volume/pagination behavior, but otherwise an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both kitId and workspace are already fully documented (including the 'omit for workspace brand' and token rules). The description adds no parameter-level meaning beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — it shows the pictures inside a kit's Examples sections, along with each one's note and links — which is concrete and distinguishable from general brand tools. It does not, however, name or explicitly contrast itself with the nearby siblings (napkin_brand_get, napkin_brand_view, napkin_brand_fonts), so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: 'Look before you design a deck, page or interface in the brand.' That is a strong contextual cue. It stops short of any when-not or named-alternative routing (e.g. when to use brand_get instead), so it is a clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_fontsGet a brand's font filesAInspect
Gets the font files for a kit's typefaces from Google Fonts and keeps them in the kit, so decks, slide pictures and the canvas draw the brand's real typefaces instead of a stand-in. Only typefaces that name a family (like Poppins) and don't have files yet are fetched. Works on any kit, including the workspace's brand: it adds the files for the typefaces the kit already names and changes nothing else. A typeface Google doesn't have is reported back; the user can upload its files in the kit's typography section.
| Name | Required | Description | Default |
|---|---|---|---|
| kitId | No | Kit to fetch fonts for. Omit for the workspace's brand. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag readOnlyHint=false and openWorldHint=true; the description independently supplies useful behavior beyond them: it fetches externally from Google Fonts, stores the files in the kit, is idempotent ('only typefaces ... that don't have files yet are fetched'), is non-destructive ('changes nothing else'), and reports missing typefaces. Missing only details like failure/rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with supporting constraints following. Four sentences are mostly earned (idempotency, scope, error handling), though the phrasing is somewhat wordy and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, externally-calling tool with no output schema, the description covers what it writes, what it leaves untouched, and what happens on failure. The main gaps (return shape, failure modes) are minor given annotations carry the safety profile and no output schema is declared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 kitId and workspace, including that omitting kitId targets the workspace's brand. The description's line about working on any kit adds context but no syntax or format detail beyond the schema, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (gets/fetches font files) plus resource (a kit's typefaces from Google Fonts) and scope (adds files for typefaces the kit already names). It is distinguishable from neighbors like napkin_brand_add_files (manual upload) and napkin_brand_get (reads brand data), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when the tool applies: it fetches only typefaces that name a family (e.g. Poppins) and lack files, on any kit including the workspace's brand, and reports typefaces Google doesn't have so the user can upload them. It never explicitly names a sibling tool to prefer, so no exclusions are stated – clear context but no alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_getRead the brandARead-onlyInspect
Reads a brand kit — the workspace's brand unless you name another. READ THIS BEFORE writing or designing anything for the workspace: a deck, a doc, an interface, copy. Returns brief (the whole kit as markdown: every section — overview, voice, colors, typography, imagery, motion, and whatever else the team wrote — with the reason behind each rule; follow the reasons when a case isn't covered), css (the --brand-* variables; interfaces already link it as brand.css, so style with var(--brand-accent) etc. rather than hex values), and tokens (the resolved values Napkin uses). Before any kit exists it returns values from the workspace's colors with kit: null.
| Name | Required | Description | Default |
|---|---|---|---|
| kitId | No | A brand kit id from napkin_brand_list. Omit for the workspace's brand. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the generic read-only/closed-world profile. The description adds real behavioral context: the three return sections (brief, css, tokens), the fact that interfaces already link css as brand.css so callers should use var(--brand-*) rather than hex, that the brief carries the reasons behind each rule, and that before any kit exists it returns workspace colors with kit: null. That is meaningful disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the when-to-use directive, then the return breakdown, so the important material leads. It is dense and packs several ideas into one sentence, but with no output schema each clause carries information an agent needs, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only two optional parameters, the description carries the burden of describing returns and does so thoroughly: the three fields, their shapes (markdown brief, --brand-* variables, resolved tokens), the consumer convention for css, and the no-kit fallback with kit: null. An agent has enough to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both kitId (sourced from napkin_brand_list, omit for workspace brand) and workspace (slug, required for personal tokens without a default, ignored for API keys). The description's 'unless you name another' largely restates the kitId default rather than adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Reads a brand kit') plus a clear default scope ('the workspace's brand unless you name another'), and it routes to napkin_brand_list as the source of kitId. It does not, however, distinguish itself from sibling napkin_brand_view, which could plausibly also read a brand, leaving one ambiguity unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is stated forcefully and concretely: 'READ THIS BEFORE writing or designing anything for the workspace: a deck, a doc, an interface, copy.' It also names napkin_brand_list as the way to obtain a kitId. It stops short of stating when not to call it (e.g., when the brief is already in context), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_listList brand kitsARead-onlyInspect
Lists the workspace's brand kits: id, name, description, and which one is the workspace's brand (isDefault). Most workspaces have one. Use napkin_brand_get to read a kit.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real context beyond them with the cardinality note ('Most workspaces have one'), which tells the agent not to expect a paginated multi-page result or a large collection. It does not mention pagination or ordering, but that gap is minor given the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, front-loaded with what is returned and followed immediately by the sibling pointer. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the exact fields returned (id, name, description, isDefault), so the agent knows the response shape. With one fully documented optional parameter and full annotation coverage, nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the workspace parameter's description already explains the slug semantics, token defaults and the API-key exception in detail. The description adds no parameter-level meaning beyond that, so the baseline 3 for a fully documented schema applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) plus resource (workspace's brand kits) and enumerates the returned fields (id, name, description, isDefault). It also distinguishes itself from the sibling napkin_brand_get, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to napkin_brand_get for reading a single kit, giving a clear use-vs-alternative boundary. It stops short of stating when a brand kit listing is or isn't the right call (e.g. to discover a brand before applying it), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_brand_viewLook at a brand's picturesARead-onlyInspect
Look at the pictures in a brand kit — logos, product marks, footage stills, layout references, examples — before you use them. Without section or names it lists every picture by section with its note, so you know what exists. With section (a section title, like Imagery) or names (pictures' names as the brief lists them) it shows you those pictures, up to 8 at a time. Look before you build a design around a picture: whether a photo has room for text, which part of it carries the color, and whether it suits texture inside type are things you can only tell by seeing it.
| Name | Required | Description | Default |
|---|---|---|---|
| kitId | No | A kit from napkin_brand_list. Omit for the workspace's brand. | |
| names | No | Show these pictures, by name. | |
| section | No | Show the pictures in this section. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 genuinely useful behavior beyond that, namely that the no-argument form enumerates every picture by section along with its note, and that a targeted call returns at most 8 at a time. It says nothing about auth or workspace/token handling, so it is not complete enough for a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the list-vs-show mechanics are front-loaded, and the closing rationale about checking whether a photo has room for text or is suited to texture inside type earns its place as decision guidance. The three sentences are dense but not padded, though they could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only viewer with no output schema and four fully documented params, the description supplies what an agent needs: what is returned (pictures by section with notes), how to filter, and the 8-per-call limit. It omits any mention of kitId/workspace resolution, a minor gap given those live in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: section is a section title ("like Imagery"), names are the picture names "as the brief lists them," and the two modes have distinct list-vs-show behavior with an 8-item cap. kitId and workspace are left to the schema, which is acceptable since both are already documented there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look at) and a well-enumerated resource (logos, product marks, footage stills, layout references, examples in a brand kit), so the agent knows exactly what object it retrieves. It does not explicitly contrast itself with nearby siblings such as napkin_brand_get, napkin_brand_fonts, or napkin_brand_examples, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use framing ("before you use them", "Look before you build a design around a picture") and explains the two invocation modes: no section/names lists everything by section with notes; section or names shows specific pictures. It never names an alternative tool or an exclusion case, so it stops at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_deck_composeBuild a designed deckADestructiveInspect
Builds a designed deck: each slide is a layout with its slots filled, or HTML and CSS you write; a real browser lays it out, and it becomes an ordinary Napkin deck people can edit. Use this whenever a deck should look designed — it's how to get layout, big numbers, color blocks, and pictures right.
LAYOUTS FIRST
For ads, posts, carousels and title slides, start from a layout (napkin_layouts_list): give
layoutandslotsinstead ofhtml. Layouts adapt to every size, fit their text, keep to each size's safe zones, and use the brand's own logos. A slide made from a layout remembers it, so when someone resizes it, it's laid out again instead of scaled.A set of ads is one slide with
sizes: ["1:1","4:5","9:16","1.91:1"] — each size gets its own arrangement.Write HTML only for something no layout does.
HOW TO WRITE A SLIDE
htmlis the inside of one slide: a.slidebox 960×540 px (the deck's own size if it has one). Margins are reset; lay out with flexbox or grid, padding and gap. Put each slide's CSS in a block inside its html, or shared CSS incss.Read the brand first (napkin_brand_get). Style ONLY with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Headings already use the heading face.
Pictures from the brand kit: , sized with CSS; object-fit: cover crops to fill, contain fits whole. Any workspace image: src="file:".
What carries over: boxes with a solid background, border, and rounded corners; text, including bold, italic, color, and size changes inside a line; pictures. What doesn't: gradients, shadows, background images, inline SVG — use solid color boxes instead.
Design like a designer: one idea per slide, a clear hierarchy, big numbers set large in the accent color, generous space, text 18px or larger (never under 14px), and something visual on most slides — a color panel, a photo, the logo. Keep every slide on the brand's own palette and voice.
Use the brand's own pictures. Put the logo on the title and closing slides (the reversed one on dark color), and use the kit's photos and icons where they carry the point — the brief lists every file under "Files", by name.
Say only what's true. Facts, figures, prices, eligibility, and how things work come from the brand kit and from what the user told you — never invent them. When a slide needs a fact you don't have, leave it out or ask.
HOW TO USE IT
New deck: pass
nameand allslides. Rebuild a deck: passboardIdand allslides(replaces everything on it).Ads, posts and other non-slide pieces: pass
size— a key like1:1(square post, 1080×1080),4:5(portrait post),9:16(story or reel),1.91:1(LinkedIn or Facebook landscape),og(link preview),300x250or728x90(display ads). The.slidebox is then that shape with its long side 960 px, so type sizes mean what they do on a slide, and the deck exports at the size's real pixels. A single ad is a one-slide deck; a carousel is a deck at1:1or4:5.A set of ads — the same ad at several sizes, or several headlines — is one deck: give each slide its own
size. Lay each size out for its own shape rather than squeezing one layout into all of them (a 9:16 story stacks what a 1.91:1 landscape puts side by side), and keep text out of the outer 7% of every edge and the top and bottom 14% of a 9:16. The deck's PNG export names each file by its pixels. Fix one slide:boardId,slide(1-based), and a single slide. Add slides:append: true.The result lists each slide's
warnings— text that overflows its box or the slide, overlapping text, text too small, low contrast, pictures that didn't load — and shows you a picture of every slide it made. Fix every warning and anything that reads badly in the pictures by recomposing just that slide. The contrast check is the standard one (4.5:1 for small text, 3:1 for large or bold text), so a contrast warning is real: darken the color, lighten the background, or set the text larger; never explain it away. You don't need napkin_slide_view afterwards: the pictures are the slides.Cite the deck with [[board:ID]] alone on its own line.
| Name | Required | Description | Default |
|---|---|---|---|
| css | No | CSS shared by every slide. | |
| name | No | Name for a new deck. | |
| size | No | The size of every slide, for a new deck or a whole rebuild: 16:9 = Widescreen slide 1920×1080; 16:10 = 16:10 slide 1920×1200; 4:3 = Standard slide 1024×768; 1:1 = Square 1080×1080; 4:5 = Portrait post 1080×1350; 9:16 = Story and reel 1080×1920; 1.91:1 = Landscape post 1200×628; x-post = X post 1600×900; og = Link preview 1200×630; pin = Pin 1000×1500; youtube-thumb = YouTube thumbnail 1280×720; linkedin-page = LinkedIn page cover 1128×191; linkedin-profile = LinkedIn profile banner 1584×396; x-header = X header 1500×500; youtube-banner = YouTube channel banner 2560×1440; facebook-cover = Facebook cover 851×315; 300x250 = Medium rectangle 300×250; 336x280 = Large rectangle 336×280; 728x90 = Leaderboard 728×90; 970x250 = Billboard 970×250; 300x600 = Half page 300×600; 160x600 = Wide skyscraper 160×600; 320x50 = Mobile banner 320×50; 320x100 = Large mobile banner 320×100; email-header = Email header 600×200; letter = Letter page 2550×3300; a4 = A4 page 2480×3508. Omit for a 16:9 deck or to keep a deck's size. | |
| slide | No | Replace just this slide (1-based) with the one slide given. | |
| accent | No | Name of one of the brand's colors to use as var(--brand-accent) for this deck — for a deck about one product or campaign that has its own color in the brand. | |
| append | No | Add these slides after the existing ones. | |
| slides | Yes | ||
| boardId | No | Deck to rebuild or change. Omit to make a new deck. | |
| previews | No | Default true: the result includes a picture of every slide made. Pass false to skip the pictures — the call returns sooner, which helps with long decks; look at slides afterwards with napkin_slide_view. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the destructive path directly: passing boardId with slides 'replaces everything on it', which matches destructiveHint=true, and it explains the response shape (per-slide warnings plus a rendered picture of every slide) despite no output schema. It does not cover permission requirements or what happens to a deck's prior theme/notes on rebuild, but the main mutating risk is stated plainly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and sectioned (LAYOUTS FIRST, HOW TO WRITE A SLIDE, HOW TO USE IT), and the operational facts each earn their place. Some prescriptive design advice — 'design like a designer,' palette and font-size coaching — is quality guidance rather than invocation guidance and stretches an already long definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter composition tool with no output schema, the description covers everything an agent needs: sizing model, layout vs HTML, brand variables and image references, destructive rebuild semantics, warning remediation, and the [[board:ID]] citation convention. The remaining gap is only the absence of a formal return schema, which the prose compensates for.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 90%, yet the description still adds real meaning: layout-vs-html exclusivity, `sizes` producing one arrangement per size, `slide` being 1-based for a single-slide recompose, `append` for adding, and worked examples of size keys and their pixel implications. The slots contract (kit: vs file: references, `points` one item per line) is also explained in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a concrete verb and artifact ('Builds a designed deck') and immediately defines the two composition modes: a layout with filled slots, or HTML/CSS the caller writes, rendered by a real browser into an editable Napkin deck. That is enough to separate it from the plain drafting/editing siblings like napkin_deck_write or napkin_slide_add, which do not claim designed rendering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes between alternatives and modes: start from a layout (napkin_layouts_list) for ads/posts/title slides, write HTML only when no layout fits, and it lists the exact call patterns for new deck, full rebuild, single-slide fix, and append. It also sets the threshold for when a size-specific variant should be used instead of one squeezed layout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_deck_exportExport a deck as imagesAInspect
Exports a deck's slides as PNG files at each slide's real pixels — a square post at 1080×1080, a story at 1080×1920, a leaderboard at 728×90 — ready to upload to an ad platform or a social post. One slide comes back as a PNG; several as a .zip named by deck, slide and size. Hidden slides are left out. The file is saved to the workspace's files; give the user downloadUrl (it opens for anyone signed in to the workspace) and say it's also in their files. Slide numbers and the workspace mark aren't drawn. For a PDF or PowerPoint, the user exports from the deck's File menu.
| Name | Required | Description | Default |
|---|---|---|---|
| slides | No | Just these slides (1-based, as the deck shows them). Omit for every slide. | |
| boardId | Yes | The deck to export. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly=false, destructive=false, openWorld=false, so the description must add substance — and it does: it explains hidden slides are excluded, slide numbers and watermark aren't drawn, units are real pixels per layout, and the result is saved to workspace files vs returned as a download. That's meaningful behavioral detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, each earning its place: output format/resolution, single vs multi behavior, hidden-slide rule, where the file lives, and the PDF/PPT exclusion. Front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 3-parameter export tool with no output schema: it covers output type, size/dimensions, file count behavior, storage location, download URL semantics, and the alternative for other formats. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaning: slide numbers are '1-based, as the deck shows them' and omitted = every slide, and constrains the range for ad-unit use (post/story/leaderboard sizes). It also implies boardId semantics. Slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (exports) and resource (a deck's slides) and output format (PNG files). Distinct from napkin_deck_outline/napkin_deck_compose siblings, and it explicitly clarifies it is image export, not PDF/PPT, routing to the File menu for those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when NOT to use it: 'For a PDF or PowerPoint, the user exports from the deck's File menu.' It also pre-empts outputs (what a single vs multiple slide result looks like) with concrete conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_deck_outlineRead a deck's outline (markdown)ARead-onlyInspect
Returns a Napkin deck as a markdown outline — one section per slide in presentation order, with slide titles, text content (bold + bullets preserved), empty layout stubs still awaiting content, and a summary of drawn marks. This is the cheap way to know what a deck SAYS; use napkin_slide_view when you need to see how a specific slide LOOKS. Works on any board that has slides. Cite the deck with [[board:ID]] alone on its own line.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | Napkin board id (a deck). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: the output shape (one section per slide, presentation order), the presence of empty layout stubs, and the `[[board:ID]]` citation requirement. It omits return-size/pagination behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences ordered by importance: what it returns, when to use it vs the alternative, then the citation convention. Dense but every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only tool with no output schema, so the description carries the burden of describing the return value, which it does thoroughly (sections, titles, formatting, stubs, marks summary). The only gap is absence of any note on sizing or ordering guarantees beyond 'presentation order', which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `boardId` and `workspace` are documented in the schema itself, including the workspace-default nuance for personal tokens. The description adds nothing about parameter meaning or format, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns a Napkin deck as a markdown outline') and enumerates the exact content the outline contains (slide titles, bold+bullets, empty layout stubs, drawn-mark summary). It explicitly distinguishes itself from sibling `napkin_slide_view`, so an agent can pick it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: 'the cheap way to know what a deck SAYS; use `napkin_slide_view` when you need to see how a specific slide LOOKS.' Also states the applicability precondition ('Works on any board that has slides') and the citation convention. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_deck_set_themeSet a deck's themeADestructiveInspect
Paints every slide of a deck with a theme — slide background, heading and body typefaces, and text colors — in one call, the same as picking it in the deck's theme menu. Font sizes are kept. Prefer "brand" (the workspace's own brand kit) unless the user asks for something else. Built-in themes: plain (Helvetica on white. Gets out of the way.); editorial (Garamond headings on cream. Reads like a document.); stage (Helvetica, light on dark, for a projected room.); blueprint (Consolas headings on mist. For technical decks.); warm (Rounded on amber. Softer than it sounds.); notebook (Marker headings. Keeps the sketchbook feel.). For one-off colors or sizes on a single shape, use napkin_draw's updates instead. Check the result with napkin_slide_view.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | Yes | `brand` for the workspace's brand kit, `brand:<kit id>` for a particular kit (napkin_brand_list), or a built-in theme key. | |
| accent | No | Brand themes only: the name of one of the kit's colors to use as this deck's accent instead of the kit's own — for a deck about one product or campaign that has its own color in the brand. | |
| boardId | Yes | Napkin board id (a deck). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive mutation, and the description corroborates by saying it repaints every slide in one call. It adds a genuinely useful preservation rule ('Font sizes are kept') and a verification tip (napkin_slide_view). However it never states explicitly that existing per-slide customizations beyond font size are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action before the theme catalog, and the catalog is justified because the schema carries no enum. The parenthetical character notes ('Gets out of the way', 'Softer than it sounds') are slightly decorative, but each still helps a model pick a theme, so waste is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, annotation-covered mutation with a fully documented schema and no output schema, the description supplies everything needed: scope of change, what is preserved, the full theme vocabulary, defaults, alternatives, and how to verify the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value the schema lacks: it enumerates the six built-in theme keys (the schema exposes no enum and only says 'a built-in theme key') and explains the brand/brand:<kit> distinction and the accent concept. That is meaningful beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Paints every slide of a deck with a theme') and enumerates exactly what changes: slide background, heading/body typefaces, and text colors. It also distinguishes itself from siblings by pointing to napkin_draw for one-off shape edits, so an agent can tell it apart from the other napkin_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit default ('Prefer "brand" ... unless the user asks for something else'), names the alternative for a different job ('For one-off colors or sizes on a single shape, use napkin_draw's `updates` instead'), and points to napkin_slide_view to verify. When-to-use, when-not, and alternatives are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_deck_writeWrite a whole deck from a markdown outlineAInspect
Creates a deck from a markdown outline — the SAME dialect napkin_deck_outline reads back, so any deck you've read shows the format. Decks are SLIDES for presenting; a prose document ('write this up', 'draft a doc') is napkin_docs_create instead. Rules: ## Heading starts a slide (heading becomes the slide title and its biggest text block); optional trailing [layout: title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank]; body lines fill the layout's remaining text areas in order, split into areas by a line containing only ---; - bullets are kept as bullets. Slides default to title-body (or title, when bodyless). Layout text areas you don't fill stay as visible prompts for the user. Example:
Q3 Review [layout: title]
What happened, what's next
Revenue [layout: title-body]
up 40% QoQ
churn flat
Bets [layout: two-column]
Double down on decks
Sunset legacy plans
After writing, cite the deck with [[board:ID]] alone on its own line — the user opens it from there.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Deck name. | |
| outline | Yes | The markdown outline (dialect above). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the description adds real behavioral detail beyond them: defaults to title-body/title layouts, unfilled layout areas remain as visible user prompts, and the board-citation convention. It does not say whether reusing an existing deck name overwrites or errors, which is a meaningful omission for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but front-loaded with purpose and the doc-vs-deck fork, then rules, then a worked example. The example and layout list justify their length given the non-obvious dialect, though the rules block is dense enough that a reader must parse carefully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description closes the loop by telling the agent how to surface the created deck ([[board:ID]]), and the required/optional parameter split is clear. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by fully specifying the outline's mini-language (slide delimiters, layout options, area splitting, bullet handling) that the schema only gestures at as 'the markdown outline (dialect above)'. It adds genuine meaning over the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('creates a deck from a markdown outline') and immediately distinguishes itself from siblings: it is the writing counterpart to napkin_deck_outline and explicitly not napkin_docs_create. An agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-NOT-to-use guidance: decks vs prose documents ('write this up' → napkin_docs_create), and states that the outline dialect matches the reader tool. It even specifies the post-write step of citing the deck with [[board:ID] on its own line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_diagrams_createCreate a Napkin diagramAInspect
Create a Napkin diagram — an interactive FLOWCHART (process, decision tree, system map), not a doc (napkin_docs_create) or drawing canvas (napkin_boards_create). Pass the mermaid source. Use for process maps the user asked you to draw. After creating, cite it as [[diagram:ID]] alone on its own line — it renders as a clickable card. NEVER cite it as [[board:ID]].
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| source | No | Mermaid flowchart source. Start with `flowchart TD` (top-down) or `flowchart LR` (left-right). Declare shaped nodes — `A["Rect"]`, `B("Rounded")`, `C{"Decision"}`, `D(["Stadium"])`, `E(("Circle"))`, `F{{"Hexagon"}}` — and link them with `A -->|label| B`, `A -.-> B` (dotted), or `A ==> B` (thick). Group steps with `subgraph Name["Title"] ... end`. Color a node with a trailing `style A fill:#fee2e2` line. Only the flowchart subset is supported. Each label is a short name on one line, written plainly: no `\n`, no backslashes before quotes. A step's label is its name everywhere in Compass. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write/non-destructive profile is covered. The description adds genuinely non-obvious behavioral context: the mermaid-only input expectation and the post-creation citation protocol (cite as [[diagram:ID]] on its own line, never as [[board:ID]]). It stops short of stating auth/workspace requirements beyond what the schema already notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly four tight sentences, front-loaded with the identity/exclusion before the input format and the post-create citation rule. No filler or repeated annotation data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description reveals the artifact's identity (the returned ID) via the citation format, so the agent knows what comes back. With 0 required parameters the tool is tolerant, and schema handles the input format; only a note on auth/workspace defaults is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; the 'source' parameter carries a rich schema description covering node shapes, link syntax, subgraphs and styling, and 'workspace' documents token behavior. The description only says 'Pass the mermaid source', adding a pointer rather than new semantics, and 'title' stays undocumented in both places. Baseline 3 for a schema doing most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource, then pins down the artifact type ('interactive FLOWCHART — process, decision tree, system map') and explicitly names the two siblings it is not (napkin_docs_create, napkin_boards_create). An agent can distinguish it from every other napkin_* create tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a positive trigger ('Use for process maps the user asked you to draw') and explicit exclusions routed to alternatives by name. Nothing about when to pick this over the doc/board create tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_diagrams_getRead a Napkin diagramARead-onlyInspect
Fetch one Napkin diagram's mermaid source by id (from napkin_diagrams_list). Read before editing — napkin_diagrams_update replaces the whole source.
| Name | Required | Description | Default |
|---|---|---|---|
| diagramId | Yes | Diagram id from napkin_diagrams_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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, but the description adds genuine context: it returns mermaid source and, importantly, discloses that the sibling update performs a full-source replacement rather than a patch. It stops short of noting error behavior for a missing id or workspace-resolution edge cases, but the replacement semantics are a meaningful non-obvious disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the read purpose and id provenance come first, the editing workflow cue second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does identify the return as the diagram's mermaid source, plus the id provenance and a mutation warning. It is essentially complete for a simple single-record read, though a hint about not-found behavior would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented, including that diagramId comes from napkin_diagrams_list — which the description merely repeats. The workspace parameter's token/default rules exist only in the schema and are not echoed in the description, so no value is added beyond structured data. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch), resource (one Napkin diagram's mermaid source) and lookup key (by id), and explicitly differentiates from siblings by naming napkin_diagrams_list as the id source and napkin_diagrams_update as the mutation counterpart. An agent can distinguish this from the other napkin_diagrams_* tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow condition — 'Read before editing — napkin_diagrams_update replaces the whole source' — naming the alternative and the reason it must precede it. This is exactly the when/why guidance that prevents a destructive blind overwrite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_diagrams_listList Napkin diagramsARead-onlyInspect
Lists the workspace's Napkin diagrams (interactive flowcharts — processes, decision trees, system maps) newest first. Archived diagrams are hidden unless includeArchived; q narrows by title. Fetch one's mermaid source with napkin_diagrams_get. When referring the user to a diagram in your reply, put [[diagram:ID]] alone on its own line — it renders as a clickable card. NEVER cite a diagram as [[board:ID]]; boards are sketches.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Title contains (case-insensitive). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No | Also list archived diagrams (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, non-destructive, closed-world read. The description adds behavior beyond them: default ordering (newest first) and the default exclusion of archived diagrams, plus the citation rendering convention. It stops short of describing pagination or result limits, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, and the core purpose is front-loaded before the parameter notes and the cross-tool pointer. The citation rule is separated into its own high-salience clause ('NEVER cite a diagram as [[board:ID]]'), which is the right structure for a formatting constraint the agent must obey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden, and it does convey that diagram records (with IDs, per the [[diagram:ID]] convention) come back in a defined order. It omits pagination or result-size behavior and says nothing about the `workspace` parameter, which is a real gap for a no-required-parameter listing tool, but overall an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 `q`, `workspace`, and `includeArchived`; the description restates the effect of `q` and `includeArchived` without adding format or syntax detail. The `workspace` parameter, with its non-obvious token/default rules, is not mentioned in the description at all. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists), resource (the workspace's Napkin diagrams), defines what the resource is with examples (interactive flowcharts — processes, decision trees, system maps), and specifies ordering (newest first). It also disambiguates from the adjacent napkin_boards concept by warning that boards are sketches, so an agent can separate the two resource families without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for the optional behaviors: archived items are hidden unless `includeArchived`, and `q` narrows by title. It routes to the sibling that supplies more detail ('Fetch one's mermaid source with napkin_diagrams_get'), which is exactly the when-to-use-the-other-tool guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_diagrams_updateEdit a Napkin diagramADestructiveInspect
Edit a Napkin diagram: retitle, describe, REPLACE the whole mermaid source, set visibility, or archived (true takes it out of the gallery, false brings it back — the recovery move for a diagram created by mistake). Read the diagram first (napkin_diagrams_get) so your new source keeps the parts the user wants. Diagram ids come from napkin_diagrams_list.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| source | No | Mermaid flowchart source. Start with `flowchart TD` (top-down) or `flowchart LR` (left-right). Declare shaped nodes — `A["Rect"]`, `B("Rounded")`, `C{"Decision"}`, `D(["Stadium"])`, `E(("Circle"))`, `F{{"Hexagon"}}` — and link them with `A -->|label| B`, `A -.-> B` (dotted), or `A ==> B` (thick). Group steps with `subgraph Name["Title"] ... end`. Color a node with a trailing `style A fill:#fee2e2` line. Only the flowchart subset is supported. Each label is a short name on one line, written plainly: no `\n`, no backslashes before quotes. A step's label is its name everywhere in Compass. | |
| archived | No | ||
| diagramId | Yes | Diagram id from napkin_diagrams_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | Short gallery summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description reinforces this by emphasizing that source REPLACE-es the whole mermaid source, plus explains archived semantics (removes/restores from gallery). It discloses what is overwritten and a recovery path, adding real context beyond the annotations, though it does not describe auth or approval flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and effects, then the read-first workflow, then the id source. Dense but every clause carries actionable information; the archived parenthetical earns its length by explaining recovery semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param destructive mutation with no output schema, it covers what can change, the read-before-write prerequisite, id sourcing, and the archive recovery path. Approval/workspace mechanics are left to the schema descriptions, which is acceptable, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 75% the baseline is 3, and the description earns above that: it maps each mutable operation to a field (retitle→title, describe→description, source replacement, visibility) and adds the crucial 'whole source is replaced' semantics and archived recovery behavior that the bare enum/boolean schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (edit) and resource (Napkin diagram) and enumerates the exact mutable fields (title, description, mermaid source, visibility, archived). This clearly separates it from napkin_diagrams_create, napkin_diagrams_get and napkin_diagrams_list without the agent opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow: read via napkin_diagrams_get first so the new source preserves wanted parts, and get ids from napkin_diagrams_list. It also frames archived=false as the recovery move for a mistaken diagram. It stops short of explicit when-not/alternatives routing, but the prerequisite guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_docs_createCreate a Napkin docAInspect
Create a Napkin doc — a markdown DOCUMENT (prose, structure, code blocks), not a drawing canvas (that's napkin_boards_create) and not slides (napkin_deck_write). Optionally pass a title and initial markdown body. Use for drafts the user asked you to start. After creating, cite it as [[doc:ID]] alone on its own line — it renders as a clickable card. NEVER cite it as [[board:ID]].
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Initial markdown body. Write each paragraph as ONE long line — the editor wraps text to the reader's column, and hard-wrapped source shows up as narrow ragged lines when someone opens the paragraph to edit it. | |
| title | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (not read-only, not destructive, closed world). The description adds genuinely non-derivable behavioral context: the citation format [[doc:ID]] and the prohibition on citing as [[board:ID]]. It does not cover auth/workspace caveats or return shape, but with annotations carrying the safety profile this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the disambiguation, then usage, then citation rule. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param create tool with no output schema, the description covers purpose, alternatives, and the critical citation convention. Only gaps are the return value / resulting ID surface and workspace caveats, which the schema partially handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; the schema already documents body (with the hard-wrap rationale) and workspace (token behavior), while title has only min/max length. The description adds only that title and body are optional initial values, so it neither compensates for the title gap nor adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (create a Napkin doc) and explicitly distinguishes it from two siblings by name (not a drawing canvas like napkin_boards_create, not slides like napkin_deck_write). The agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names alternatives and the condition that selects them ('Use for drafts the user asked you to start'), and gives post-creation citation guidance including a hard NEVER rule. Nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_docs_getRead a Napkin docARead-onlyInspect
Fetch one Napkin doc's full markdown body by id (from napkin_docs_list). Read before editing — napkin_docs_update replaces or appends against the current body.
| Name | Required | Description | Default |
|---|---|---|---|
| docId | Yes | Doc id from napkin_docs_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the return shape ('full markdown body') and the mutation model of the related update tool (replace or append against current body), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and identifier source, followed by the one piece of workflow advice that actually changes agent behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the return value ('full markdown body'), and it covers the edit relationship. What an agent needs to call it correctly is present; only deeper behavioral detail (e.g. permissions, missing-doc behavior) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and docId's description already says it comes from napkin_docs_list, so the description largely repeats the schema on that point. It adds nothing about the workspace parameter, relying on the schema for the token/default-workspace rules, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one Napkin doc's full markdown body') plus the identifier source ('by id (from napkin_docs_list)'). It distinguishes itself from the list tool that produces ids and the update tool that consumes the body, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing guidance ('Read before editing') and names the downstream alternative (napkin_docs_update) along with its semantics ('replaces or appends against the current body'). It lacks an explicit when-not condition, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_docs_listList Napkin docsARead-onlyInspect
Lists the workspace's Napkin docs (quick markdown documents — drafts, notes, working text; the LINEAR surface, distinct from boards which are drawing canvases) newest first, with excerpts. Archived docs are hidden unless includeArchived; q narrows by title. Fetch one with napkin_docs_get. When referring the user to a doc in your reply, put [[doc:ID]] alone on its own line — it renders as a clickable card. NEVER cite a doc as [[board:ID]]; boards are sketches.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Title contains (case-insensitive). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No | Also list archived docs (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, non-destructive profile. The description adds real behavioral context beyond that: newest-first ordering, excerpt inclusion, and the default-hide-archived rule with its override. It omits pagination/result-limit behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scoping rules before the citation-format instructions. The [[doc:ID]] guidance is slightly verbose but is a genuinely useful output convention that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does a good job explaining what comes back (excerpts, ordering) and the archive/search behavior. Missing pagination or limit details, but complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so includeArchived and q semantics are already documented in the schema. The description restates them in prose and never covers the workspace parameter, so it adds little beyond the structured fields – baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (Napkin docs), defines what they are (quick markdown documents), and explicitly distinguishes them from the sibling surface (boards are drawing canvases). An agent can identify this tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly routes the agent to napkin_docs_get for fetching a single doc and explains the filtering conditions (includeArchived, q). It does not name content-search alternatives like search_workspace, but for the doc-listing domain the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_docs_updateEdit a Napkin docADestructiveInspect
Edit a Napkin doc. For a change to existing prose use edits — a list of exact find/replace pairs, which is the SAFEST option and the one to reach for by default: it leaves everything you did not target untouched, and it fails loudly rather than clobbering a doc somebody else is typing in. append adds a section at the end. body replaces the WHOLE document and should be a last resort. Also retitle, describe, set visibility, or archived (true takes it out of the gallery, false brings it back). Read the doc with napkin_docs_get first — edits match the current text exactly. Doc ids come from napkin_docs_list.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full replacement markdown body. Prefer `edits` — this overwrites everything. Write each paragraph as ONE long line; the editor wraps it for the reader. | |
| docId | Yes | Doc id from napkin_docs_list. | |
| edits | No | Targeted find/replace pairs, applied in order. All must match or none are applied. | |
| title | No | ||
| append | No | Markdown appended to the end (own paragraph). | |
| archived | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | Short gallery summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructiveHint=true; the description goes far beyond by explaining WHY and HOW: edits 'leaves everything you did not target untouched' and 'fails loudly rather than clobbering a doc somebody else is typing in', while body 'replaces the WHOLE document'. The archived true/false round-trip semantics are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the primary recommendation (edits) leads, riskier modes follow, prerequisites and id provenance close it out. No filler sentences and every clause carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-param mutation tool with no output schema, the description covers the decision logic, the safety model, the read-first prerequisite, and where ids come from. An agent has everything needed to call it correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3, but the description adds interpretation the schema lacks: the default-vs-last-resort ranking of edits/append/body and the gallery/archive round-trip behavior of archived. It maps none of the less-obvious params (visibility enum, approvalId) beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Edit a Napkin doc') and then breaks down the distinct mutation modes (edits, append, body, retitle, visibility, archived). It clearly differentiates itself from sibling napkin_docs_get (read) and napkin_docs_list (ids), so an agent can place it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes edits as 'the SAFEST option and the one to reach for by default', labels body a 'last resort', and states the prerequisite 'Read the doc with napkin_docs_get first'. This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_drawDraw on a Napkin boardADestructiveInspect
Draws shapes, strokes, and labels on a board — diagram on a sketch, annotate a deck slide — and, via updates / deletes, changes or removes shapes that are already there (ids from napkin_boards_get; the fix for something you drew wrong). For NEW elements never compute absolute board coordinates: with slide, coordinates are slide-local — (0, 0) top-left to (960, 540) bottom-right of that slide. Without slide (sketches), (0, 0) is the top-left of the existing content — the same area napkin_boards_view renders, so place by what you saw there; on an empty board just start at (0, 0). Example — circle a slide's title and margin-note it:
{"boardId": "…", "slide": 2, "elements": [ {"type": "ellipse", "x": 60, "y": 40, "w": 400, "h": 90, "color": "#dc2626"}, {"type": "arrow", "x": 560, "y": 140, "x2": 470, "y2": 90, "color": "#dc2626"}, {"type": "text", "x": 575, "y": 130, "w": 260, "text": "tighten this claim", "color": "#dc2626"} ]}
After drawing, cite the board with [[board:ID]] alone on its own line.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | No | 1-based slide number (decks only) — makes coordinates slide-local. | |
| boardId | Yes | Napkin board id. | |
| deletes | No | Ids of existing shapes to remove (from napkin_boards_get). | |
| updates | No | Existing shapes to change — move, resize, retext, restyle. Read napkin_boards_get first for ids and current geometry. | |
| elements | No | New elements to draw, painted in order. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and readOnly=false, and the description adds real context on top: that deletes remove existing shapes permanently, that updates patch live shapes by id, and that ids must come from napkin_boards_get. It stops short of saying whether edits are undoable or what happens when an id is stale.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core verb and the coordinate rule before the example, and every sentence carries information (coordinate origin, id source, citation format). The embedded JSON example is long but earns its space by demonstrating multi-element composition; the parenthetical asides add minor noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, nested-schema mutation tool with no output schema and destructive annotations, the description covers the risky parts: coordinate frames, id sourcing, update/delete semantics, and the citation follow-up. It omits return behavior and failure modes for invalid ids, but nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics the schema lacks — the slide-local (0,0)-(960,540) coordinate frame versus board-relative origin for sketches, and the placement rule for empty boards. The worked JSON example also clarifies element field usage in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-and-resource statement ('Draws shapes, strokes, and labels on a board') and extends it to the mutate path ('via updates / deletes, changes or removes shapes that are already there'). It also names the sibling helpers (napkin_boards_get, napkin_boards_view) so an agent can place it in the board-tool family immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: read napkin_boards_get for ids before updating, and use napkin_boards_view's rendered area as the coordinate frame. It does not explicitly state when to prefer this over other drawing surfaces (napkin_diagrams_create, napkin_deck_write, napkin_slide_fill), so routing between draw tools still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_createCreate a Napkin interfaceAInspect
Create an interface — a small screen of its own the user can open and send to people. Use when someone asks for a custom chat UI, a little tool, or a prototype of how something would feel in their product. It starts with a working index.html you then edit. It can reach NOTHING in the workspace until a flow is granted with napkin_interfaces_grant. Cite it in your reply as [[interface:ID]] alone on its own line — it renders as a card the user can click. Do NOT paste an image URL or try to embed the picture yourself; that renders as a broken image. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. Put styles in a block. LIBRARIES: there is no build step and no CDN, and a to any other site is blocked. A fixed shelf of libraries is served from the interface's own origin instead; load them with exactly these tags (the versions are pinned, and any other /lib/ path is not found): PREACT + HTM, for a page with several screens or a lot of state — components and hooks with no build: then var html = htm.bind(preact.h); var useState = preactHooks.useState; function App(){ var s = useState(0); return html<button onClick=${function(){ s[1](s[0] + 1) }}>${s[0]}</button> } preact.render(html<${App}/>, document.getElementById("app")). Templates are tagged strings (html…), not JSX. CHART.JS, for a chart: then new Chart(canvasElement, { type: "bar" | "line" | "doughnut" | …, data: { labels: [...], datasets: [{ label, data: [...] }] }, options: {} }). Color the datasets from the brand variables, read with getComputedStyle(document.documentElement).getPropertyValue("--brand-accent"). LUCIDE, for icons: . In plain markup, write and call lucide.createIcons() once it's on the page (again after adding more). In a Preact page DON'T — createIcons swaps elements Preact owns; draw the icon from its shapes instead: lucide.icons.Calendar is a list of [tag, attributes], so render with preact.h(tag, attributes) for each (the app starter has an Icon component that does this). Names are lucide.dev's: kebab-case in markup, PascalCase in lucide.icons. A one-screen page needs none of these: plain HTML, CSS and JavaScript is still the default. React, Tailwind and every other library are not available. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-) (napkin_interfaces_view lists the exact names this brand defines), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with the context { viewer, grants, flows, tables, metrics, tasks }; ctx.flows lists the flow grants, each with its id, name and variables. zw.flows.run(flow.id, input) runs one. Call it inside zw.ready().then(...), and handle the rejection — it rejects only when the page isn't open in ZeroWidth, so show "Open this from ZeroWidth" there instead of a dead button. A run can take up to two minutes; show it working (stream it, below), and show the error's message when one fails — err.message is a sentence written for the person using the page. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. SOURCES: when the flow searches a knowledge base, zw.sources(result) lists the documents the run actually read, as [{ name, documentId }], once each. Show those under the answer for "where did this come from" — never ask the model to write a sources line and parse it out of the text. The flow needs the knowledge base attached BEFORE it is published (workbench_flows_attach_knowledge_base, then workbench_flows_publish, then re-grant the new version here); the interface runs the published version it was granted. FEEDBACK: to let someone rate an answer or flag a wrong one, call zw.feedback.send(result, { rating: "up" | "down", correction, comment }) with the result zw.flows.run returned. It goes to Caliper, into the flow's feedback dataset, with the question and the answer taken from the run itself; correction is what the answer should have been. Needs no extra grant and no table — never make a table to log flagged answers. It returns a promise: say it was sent only once it resolves, and show the error's message if it rejects. Tell the user flagged answers are in Caliper, in the dataset named after the flow, under Datasets. VARIABLES: a flow grant lists variables — the values the flow reads besides the conversation, usually the {{key}} tokens in its prompt (who the user is, their plan, the page they are on). Send them on the same chat run: {kind:"chat", messages:[…], values:{: value}}, using each variable's exact name and its type (string, number, boolean, array, object). A variable left out reaches the prompt empty. Read them from napkin_interfaces_get while you write the page, or at run time from ctx.flows[i].variables. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. DATA: an interface can be granted a sheet TABLE or a Ledger METRIC with napkin_interfaces_grant_data. ctx.tables lists each table with its fields (name, type, options) and access ("read", "add" or "edit"); ctx.metrics lists each metric with its unit and access ("read" or "record"). Records travel keyed by field NAME, choices by option NAME. zw.tables.query(table, { where: [{ field, op, value }], sort: [{ field, dir }], limit }) resolves { records: [{ id, fields }], total }; zw.tables.add(table, { Field: value }) or a list adds records; zw.tables.update(table, id, fields) and zw.tables.remove(table, ids) need "edit". zw.metrics.read(metric, { from, to }) resolves { metric, readings: [{ value, at, note }] }; zw.metrics.record(metric, value, { note }) needs "record". Name a table or metric by its id or its name. Through a share link a guest can read and add, never change or delete — so an intake form works when shared, a triage board needs a signed-in viewer. A granted Workbench TASK (ctx.tasks; each says whether it takesInput) starts with zw.tasks.start(task, input), which resolves { runId, status } at once — the run carries on after the page closes — and zw.tasks.get(task, runId) reads { status, output } for runs this page started. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. THE KIT: every new interface also has kit.css, components built only from the brand's variables — link it after brand.css () and build from its classes rather than styling from scratch: layout (.page, .page.wide, .header, .stack, .row, .grid), type (h1, h2, h3, .muted, .small, .label, .num, .stat), buttons (.btn, .btn.secondary, .btn.quiet, .btn.sm, .btn.icon), fields (.field with a .label, then .input / .select / .textarea, then a .hint or .error; .check for a checkbox), .chips and .chip, .badge (.up, .down, .accent), .card, .list, .meter, states (.empty, .skeleton, .spinner, .notice, .notice.error), chat (.thread, .bubble.me, .bubble.them, .typing, .composer), and .icon for a Lucide icon. Its tokens are var(--ink), var(--muted), var(--bg), var(--surface), var(--accent), var(--line), var(--tint), var(--radius) and spacing var(--s1)…var(--s7). The starters show the kit used well; read one before writing a page of your own. Design it the way a good product is designed: a clear hierarchy, real spacing, states for loading, empty and failure, and a layout that works on a phone first. Use the brand kit (napkin_brand_get) for what the brand looks like and how it sounds.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| starter | No | Which worked example to start from — a whole working page, written well, that you then shape to what was asked. `blank`: a title and the client library. Start here unless one of the others is exactly the shape you want. `chat`: a conversation against one flow, streamed, keeping the history client-side so the flow sees the whole thread. `form`: labelled fields sent as a form run, with the answer underneath. `decision`: text in, a shim's answer out, with its confidence and the action it recommends. `app`: an app with several screens (Preact, htm and Lucide from the shelf): tabs along the bottom on a phone and the top on a wide screen, the screen kept in the address, a home screen and a streamed chat. For a member app or a tool with a few views. `dashboard`: cards over the granted data (Chart.js from the shelf): each Ledger metric's latest reading and a line of its history, each table's count, a bar of how it splits on its first choice column, and its latest records. `intake`: a form built from a granted table's columns that adds a record to it, with a done state and 'add another'. Works through a share link. `board`: a granted table's records in lanes by its first choice column, moved a lane at a time by someone who may edit. Needs a signed-in viewer to move cards. Take `blank` (the default) when none of the others is the shape you want, rather than deleting one you didn't need. The data starters (dashboard, intake, board) read what's granted with napkin_interfaces_grant_data, so grant the table or metric too. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this writes (readOnlyHint=false) and is not destructive; the description goes far beyond that, disclosing that the interface reaches nothing until napkin_interfaces_grant, that external images/CDNs/web fonts are blocked, that libraries are a pinned same-origin shelf, the 5 MB file limit, the two-minute flow run window, that tasks continue after the page closes, and that feedback lands in Caliper. This is exactly the extra context the dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is genuinely long, but the density is warranted for a tool that generates an arbitrary HTML/CSS/JS app, and the purpose plus the critical citation rule (`[[interface:ID]]` on its own line) are front-loaded before the reference material. The all-caps section headers (LIBRARIES, THE BRAND, DATA, STREAM) give it navigable structure, though the volume sits at the upper limit of what a description should carry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the full burden and meets it: it explains the grant model, the client library (/zerowidth.js) and its zw.* APIs, table/metric/shim/task access shapes, streaming, markdown rendering, and how results surface in the reply. An agent has everything needed to produce and hand over a working interface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the enum description for `starter` is already exhaustive, so the schema carries the parameter burden. The description only gestures at that parameter ('It starts with a working index.html you then edit'; 'The starters show the kit used well') and says nothing new about `name` or `workspace`. Baseline 3 fits: the schema does the heavy lifting and the description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource: 'Create an interface — a small screen of its own the user can open and send to people.' That distinguishes it cleanly from napkin_boards_create, napkin_docs_create, and napkin_deck_compose without requiring the schema. The follow-on examples (custom chat UI, little tool, prototype) sharpen the intent further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the triggering condition ('Use when someone asks for a custom chat UI, a little tool, or a prototype'), names the companion tools (napkin_interfaces_grant for reaching workspace data, napkin_interfaces_view to look before handing over, napkin_interfaces_get for variables, napkin_brand_get for brand truth), and routes edits elsewhere by saying it 'starts with a working index.html you then edit.' Nothing about when-to-use is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_getRead a Napkin interfaceARead-onlyInspect
Read one interface: its name, the flows it may run (with the published version each is pinned to), and the contents of its files. READ BEFORE EDITING — napkin_interfaces_write matches text exactly against what is there now. Pass a path to read one file when the interface has several. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. Put styles in a block. LIBRARIES: there is no build step and no CDN, and a to any other site is blocked. A fixed shelf of libraries is served from the interface's own origin instead; load them with exactly these tags (the versions are pinned, and any other /lib/ path is not found): PREACT + HTM, for a page with several screens or a lot of state — components and hooks with no build: then var html = htm.bind(preact.h); var useState = preactHooks.useState; function App(){ var s = useState(0); return html<button onClick=${function(){ s[1](s[0] + 1) }}>${s[0]}</button> } preact.render(html<${App}/>, document.getElementById("app")). Templates are tagged strings (html…), not JSX. CHART.JS, for a chart: then new Chart(canvasElement, { type: "bar" | "line" | "doughnut" | …, data: { labels: [...], datasets: [{ label, data: [...] }] }, options: {} }). Color the datasets from the brand variables, read with getComputedStyle(document.documentElement).getPropertyValue("--brand-accent"). LUCIDE, for icons: . In plain markup, write and call lucide.createIcons() once it's on the page (again after adding more). In a Preact page DON'T — createIcons swaps elements Preact owns; draw the icon from its shapes instead: lucide.icons.Calendar is a list of [tag, attributes], so render with preact.h(tag, attributes) for each (the app starter has an Icon component that does this). Names are lucide.dev's: kebab-case in markup, PascalCase in lucide.icons. A one-screen page needs none of these: plain HTML, CSS and JavaScript is still the default. React, Tailwind and every other library are not available. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-) (napkin_interfaces_view lists the exact names this brand defines), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with the context { viewer, grants, flows, tables, metrics, tasks }; ctx.flows lists the flow grants, each with its id, name and variables. zw.flows.run(flow.id, input) runs one. Call it inside zw.ready().then(...), and handle the rejection — it rejects only when the page isn't open in ZeroWidth, so show "Open this from ZeroWidth" there instead of a dead button. A run can take up to two minutes; show it working (stream it, below), and show the error's message when one fails — err.message is a sentence written for the person using the page. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. SOURCES: when the flow searches a knowledge base, zw.sources(result) lists the documents the run actually read, as [{ name, documentId }], once each. Show those under the answer for "where did this come from" — never ask the model to write a sources line and parse it out of the text. The flow needs the knowledge base attached BEFORE it is published (workbench_flows_attach_knowledge_base, then workbench_flows_publish, then re-grant the new version here); the interface runs the published version it was granted. FEEDBACK: to let someone rate an answer or flag a wrong one, call zw.feedback.send(result, { rating: "up" | "down", correction, comment }) with the result zw.flows.run returned. It goes to Caliper, into the flow's feedback dataset, with the question and the answer taken from the run itself; correction is what the answer should have been. Needs no extra grant and no table — never make a table to log flagged answers. It returns a promise: say it was sent only once it resolves, and show the error's message if it rejects. Tell the user flagged answers are in Caliper, in the dataset named after the flow, under Datasets. VARIABLES: a flow grant lists variables — the values the flow reads besides the conversation, usually the {{key}} tokens in its prompt (who the user is, their plan, the page they are on). Send them on the same chat run: {kind:"chat", messages:[…], values:{: value}}, using each variable's exact name and its type (string, number, boolean, array, object). A variable left out reaches the prompt empty. Read them from napkin_interfaces_get while you write the page, or at run time from ctx.flows[i].variables. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. DATA: an interface can be granted a sheet TABLE or a Ledger METRIC with napkin_interfaces_grant_data. ctx.tables lists each table with its fields (name, type, options) and access ("read", "add" or "edit"); ctx.metrics lists each metric with its unit and access ("read" or "record"). Records travel keyed by field NAME, choices by option NAME. zw.tables.query(table, { where: [{ field, op, value }], sort: [{ field, dir }], limit }) resolves { records: [{ id, fields }], total }; zw.tables.add(table, { Field: value }) or a list adds records; zw.tables.update(table, id, fields) and zw.tables.remove(table, ids) need "edit". zw.metrics.read(metric, { from, to }) resolves { metric, readings: [{ value, at, note }] }; zw.metrics.record(metric, value, { note }) needs "record". Name a table or metric by its id or its name. Through a share link a guest can read and add, never change or delete — so an intake form works when shared, a triage board needs a signed-in viewer. A granted Workbench TASK (ctx.tasks; each says whether it takesInput) starts with zw.tasks.start(task, input), which resolves { runId, status } at once — the run carries on after the page closes — and zw.tasks.get(task, runId) reads { status, output } for runs this page started. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. THE KIT: every new interface also has kit.css, components built only from the brand's variables — link it after brand.css () and build from its classes rather than styling from scratch: layout (.page, .page.wide, .header, .stack, .row, .grid), type (h1, h2, h3, .muted, .small, .label, .num, .stat), buttons (.btn, .btn.secondary, .btn.quiet, .btn.sm, .btn.icon), fields (.field with a .label, then .input / .select / .textarea, then a .hint or .error; .check for a checkbox), .chips and .chip, .badge (.up, .down, .accent), .card, .list, .meter, states (.empty, .skeleton, .spinner, .notice, .notice.error), chat (.thread, .bubble.me, .bubble.them, .typing, .composer), and .icon for a Lucide icon. Its tokens are var(--ink), var(--muted), var(--bg), var(--surface), var(--accent), var(--line), var(--tint), var(--radius) and spacing var(--s1)…var(--s7). The starters show the kit used well; read one before writing a page of your own. Design it the way a good product is designed: a clear hierarchy, real spacing, states for loading, empty and failure, and a layout that works on a phone first. Use the brand kit (napkin_brand_get) for what the brand looks like and how it sounds.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | One file to read, e.g. index.html. Omit for every file. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| interfaceId | Yes | Interface id from napkin_interfaces_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful context that a grant is pinned to a published version and that the returned files are raw HTML/CSS/JS served from their own origin, but discloses nothing about auth needs, pagination or the exact response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The tool-relevant content is correctly front-loaded into the first two sentences, which is the only thing keeping this above a 1. Everything after that — library tags, brand variables, shim semantics, kit.css classes, streaming, feedback — is a build manual for napkin_interfaces_write and buys a reader of a read-only tool nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carry the return shape, which it does well (name, flow grants plus pinned version, file contents) and it makes the read-before-write ordering clear. What is missing is small and adjacent: no indication of size limits, truncation, or how a multi-file interface is keyed back to `path`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description adds only a light gloss on `path` ('one file when the interface has several'), which is baseline-consistent rather than compensating for a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence is specific: it reads one interface and enumerates what comes back (name, flow grants with the pinned published version, file contents), and it explicitly differentiates from napkin_interfaces_write via 'READ BEFORE EDITING'. It never positions itself against the closest read-side sibling, napkin_interfaces_view, and the following ~2,000 words are about authoring, not reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition ('READ BEFORE EDITING') and a per-case rule ('Pass a path to read one file when the interface has several'). It does not name the alternative for previewing the rendered page (napkin_interfaces_view) or for finding an interfaceId (napkin_interfaces_list), both of which an agent must pick between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_grantChange what a Napkin interface can reachADestructiveInspect
Set what an interface may run — flows and shims, each pinned to a published version. This is the interface's ONLY reach into the workspace, and it replaces the whole list, so include everything it should keep. Ids and published versions come from workbench_flows_list / workbench_shim_list and their revisions. Ask the user before widening this.
| Name | Required | Description | Default |
|---|---|---|---|
| grants | Yes | The complete list. Passing an empty list removes all access. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| interfaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true, but the description makes the destruction concrete: the call replaces the entire grant list, so anything omitted is revoked, and an empty list removes all access. It also imposes a consent rule ('Ask the user before widening this') and names the upstream sources for valid ids — context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the verb and the destructive replace semantics before the sourcing and confirmation details. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers what is destroyed, what constitutes valid input, and the consent expectation. It leaves the confirmation/approvalId round-trip to the schema rather than describing the needs_confirmation flow, which is the only real omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and already documents kind/version/targetId/workspace/approvalId, so the baseline is 3. The description adds non-obvious semantics the schema only gestures at: the list is complete and authoritative, and the version must be a published revision sourced from the flows/shims list tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set what an interface may run — flows and shims'), and the object model is precise: each grant is pinned to a published version. It clearly distinguishes itself from the other napkin_interfaces_* siblings, which create, publish, write content, or grant data access rather than execution reach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong operational context: it replaces the whole list, so you must include everything to keep; empty list removes all access; ids/versions come from workbench_flows_list / workbench_shim_list and their revisions; and it explicitly says to ask the user before widening. It never names a sibling alternative for narrowing vs widening, but the surrounding guidance is unusually actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_grant_dataChange what data a Napkin interface can useADestructiveInspect
Set the sheet tables, Ledger metrics and Workbench Tasks an interface may use (ADR 0085, 0086), replacing the whole list. Tables: access read, add (read and add records) or edit (also change and delete); optionally limit to some columns by name. Metrics: read or record. Tasks: the page may start them. The page then calls zw.tables.query / add / update / remove, zw.metrics.read / record and zw.tasks.start / get. Anyone who can open the interface, including people it's shared with, gets this access (a shared link can only read and add), so ask the user before widening it.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | No | Workbench Tasks the page may start with zw.tasks.start, and check with zw.tasks.get. | |
| tables | No | ||
| metrics | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| interfaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and openWorldHint=true; the description goes beyond that by revealing this REPLACES the whole list, who receives the access (anyone who can open, including shared links, with shared-link read/add limits), and the downstream zw.* calls the page will use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core action and replacement semantics come first, followed by per-resource access meanings and the warning. The mid-sentence zw.* function lists are a slight detour but still earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description covers replacement semantics, access audience, and the confirmation-worthy widening risk. It stops short of noting reversibility or how to recover the prior grant list, which for a whole-list replacement would be worth stating.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description explains the access-level semantics ('read, add, edit' and 'read or record') and the optional column limiting, adding real meaning for those fields. But workspace, approvalId, and the per-item structures get no coverage from the description, leaving the enum-less access fields partly to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — setting the tables, metrics, and tasks an interface may use — and names the sibling interface tools by effect. The scope ('replacing the whole list') is explicit, so an agent can distinguish this from napkin_interfaces_write or napkin_interfaces_publish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use it (changing an interface's data access) and warns to ask the user before widening access, but it never names an alternative tool or states when NOT to call this versus napkin_interfaces_create or napkin_interfaces_write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_listList Napkin interfacesBRead-onlyInspect
List the interfaces in a workspace — small self-contained screens (a custom chat, a control panel, a prototype) that run on their own origin and can call the flows they've been granted. Returns ids, names and how many flows each may run.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing what is returned (ids, names, and granted-flow counts) and the runtime nature of interfaces, which matters since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and uses a single em-dash elaboration plus one short return sentence. No wasted phrasing, though the parenthetical example list is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with annotations covering safety, the definition is largely adequate and even covers return contents. However, the undocumented includeArchived flag leaves a real behavioral gap that an agent would need to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema coverage, the description should compensate for undocumented parameters, but it says nothing about includeArchived or whether archived interfaces are excluded by default. The workspace parameter is already well documented in the schema, so the description adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the interfaces in a workspace") and elaborates on what an interface is (self-contained screens like a custom chat, control panel, or prototype). The listing intent clearly contrasts with napkin_interfaces_get, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the workspace scoping, but there is no explicit when-to-use guidance or routing to alternatives like napkin_interfaces_get or napkin_interfaces_view. Nothing states prerequisites or when this is the wrong tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_publishSave a version of a Napkin interfaceAInspect
Save where an interface is now as a numbered version. Share links point at a published version, so what someone was sent doesn't change while work continues. Do this when the user says it's ready to show people, not after every edit.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | One line on what changed. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| interfaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so safety is partly covered, but the description adds genuinely non-obvious semantics: publishing produces a numbered version that share links bind to, so previously shared recipients keep a stable view. It doesn't clarify whether this replaces the prior published version or how publish relates to the version count, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences front-loaded with the core action, then the versioning rationale, then the usage trigger. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations and no output schema, the description covers what the operation means and when to invoke it. It omits what a successful publish returns or exposes (e.g., version identifier/link), but the core guidance an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: 'note' and 'workspace' are documented in the schema, while 'interfaceId' is undocumented in both places. The description adds no parameter-level detail (no syntax or format for interfaceId), so this sits at the baseline for a mid-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save where an interface is now as a numbered version') and captures the snapshot/versioning nature of the action. By contrasting it against ongoing edits ('not after every edit'), it effectively distinguishes this from the write/edit sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('when the user says it's ready to show people') and when-not ('not after every edit'). Both the trigger condition and the exclusion are stated, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_viewLook at a Napkin interfaceARead-onlyInspect
See what an interface LOOKS like and DOES right now: the page RUNS from its current files under the same rules as the live page (no web fonts, no remote pictures), and you get a picture plus anything that went wrong (script errors, failed promises, blocked requests, console errors). Use it after every write and before saying an interface is finished: reading the code tells you what you wrote, not what it renders. size: "phone" looks at it 390px wide — use it for anything meant for a phone, like a mobile app mockup. steps drive the page before and between pictures, so you can check every screen and that buttons work: {click: "Plan"} (by visible text or label, or a CSS selector like "#nav-plan"), {type: {into: "textarea", text: "hi"}}, {press: "Enter"}, {wait: 500}, and {shot: "Plan screen"} for a picture. With no steps you get one picture of the first screen. Check each tab of an app in ONE call: shot, click a tab, shot, click the next, shot. Flows don't run here: a flow call gets a placeholder reply, so you can see the chat send and answer without spending anything; tables and metrics read empty. Look for text that's too small or runs together, stray system fonts, emoji standing in for icons, and anything that doesn't look like the brand.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | The window to look through. Default desktop (1280 wide); phone is 390 wide. | |
| steps | No | Done in order, with a picture at each `shot` (at most 6). Default: one shot of the first screen. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| interfaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a safe, non-open-world read. The description adds substantial behavior beyond that: the page runs from current files under live-page rules with no web fonts or remote images, the result is a picture plus script errors, failed promises, blocked requests and console errors, and flows return a placeholder while tables and metrics read empty. That last detail (what is stubbed out) is exactly the kind of non-obvious behavior an agent cannot infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what it does and when to use it, and there is little pure filler. It is long and dense across three paragraphs, and the closing list of aesthetic things to look for is helpful but ancillary to invocation, so it is a notch below maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description explains the return shape (a picture plus a consolidated error report), covers all four parameters including the workspace token rule, and warns about stubbed flows/tables. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description compensates by giving semantics the schema does not: click targets resolve "by visible text or label, or a CSS selector like #nav-plan", the steps model is shown as worked examples, and the default single-shot behavior is restated. This is meaningfully more than the anyOf blocks convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (see what a Napkin interface looks like and does by actually rendering it), and explicitly separates itself from the sibling that reads source: "reading the code tells you what you wrote, not what it renders." An agent can distinguish this from napkin_interfaces_get, napkin_interfaces_write, and napkin_boards_view without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage rule ("Use it after every write and before saying an interface is finished"), calls out when the phone size applies ("anything meant for a phone, like a mobile app mockup"), and shows the multi-step pattern for checking each tab in one call. It also states the boundary against the alternative of reading code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_interfaces_writeEdit a Napkin interface's filesADestructiveInspect
Write one file of an interface. Use edits — exact find/replace pairs — which is the SAFEST option and the one to reach for by default: it leaves everything you did not target untouched, and it fails loudly rather than clobbering a file somebody is editing. body replaces the WHOLE file and is for a new file or a deliberate rewrite. ONE CALL HOLDS ABOUT 15,000 CHARACTERS of file: a longer body is cut off mid-write and fails. Write a big file in parts instead — the first part with body, then each further part with body plus append: true, in order — and split an app across files (index.html, style.css, app.js) so each stays readable. deleteFile removes one (index.html can't be removed). Read with napkin_interfaces_get first — edits match the current text exactly. Also rename, describe, set visibility, or archive. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. Put styles in a block. LIBRARIES: there is no build step and no CDN, and a to any other site is blocked. A fixed shelf of libraries is served from the interface's own origin instead; load them with exactly these tags (the versions are pinned, and any other /lib/ path is not found): PREACT + HTM, for a page with several screens or a lot of state — components and hooks with no build: then var html = htm.bind(preact.h); var useState = preactHooks.useState; function App(){ var s = useState(0); return html<button onClick=${function(){ s[1](s[0] + 1) }}>${s[0]}</button> } preact.render(html<${App}/>, document.getElementById("app")). Templates are tagged strings (html…), not JSX. CHART.JS, for a chart: then new Chart(canvasElement, { type: "bar" | "line" | "doughnut" | …, data: { labels: [...], datasets: [{ label, data: [...] }] }, options: {} }). Color the datasets from the brand variables, read with getComputedStyle(document.documentElement).getPropertyValue("--brand-accent"). LUCIDE, for icons: . In plain markup, write and call lucide.createIcons() once it's on the page (again after adding more). In a Preact page DON'T — createIcons swaps elements Preact owns; draw the icon from its shapes instead: lucide.icons.Calendar is a list of [tag, attributes], so render with preact.h(tag, attributes) for each (the app starter has an Icon component that does this). Names are lucide.dev's: kebab-case in markup, PascalCase in lucide.icons. A one-screen page needs none of these: plain HTML, CSS and JavaScript is still the default. React, Tailwind and every other library are not available. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-) (napkin_interfaces_view lists the exact names this brand defines), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with the context { viewer, grants, flows, tables, metrics, tasks }; ctx.flows lists the flow grants, each with its id, name and variables. zw.flows.run(flow.id, input) runs one. Call it inside zw.ready().then(...), and handle the rejection — it rejects only when the page isn't open in ZeroWidth, so show "Open this from ZeroWidth" there instead of a dead button. A run can take up to two minutes; show it working (stream it, below), and show the error's message when one fails — err.message is a sentence written for the person using the page. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. SOURCES: when the flow searches a knowledge base, zw.sources(result) lists the documents the run actually read, as [{ name, documentId }], once each. Show those under the answer for "where did this come from" — never ask the model to write a sources line and parse it out of the text. The flow needs the knowledge base attached BEFORE it is published (workbench_flows_attach_knowledge_base, then workbench_flows_publish, then re-grant the new version here); the interface runs the published version it was granted. FEEDBACK: to let someone rate an answer or flag a wrong one, call zw.feedback.send(result, { rating: "up" | "down", correction, comment }) with the result zw.flows.run returned. It goes to Caliper, into the flow's feedback dataset, with the question and the answer taken from the run itself; correction is what the answer should have been. Needs no extra grant and no table — never make a table to log flagged answers. It returns a promise: say it was sent only once it resolves, and show the error's message if it rejects. Tell the user flagged answers are in Caliper, in the dataset named after the flow, under Datasets. VARIABLES: a flow grant lists variables — the values the flow reads besides the conversation, usually the {{key}} tokens in its prompt (who the user is, their plan, the page they are on). Send them on the same chat run: {kind:"chat", messages:[…], values:{: value}}, using each variable's exact name and its type (string, number, boolean, array, object). A variable left out reaches the prompt empty. Read them from napkin_interfaces_get while you write the page, or at run time from ctx.flows[i].variables. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. DATA: an interface can be granted a sheet TABLE or a Ledger METRIC with napkin_interfaces_grant_data. ctx.tables lists each table with its fields (name, type, options) and access ("read", "add" or "edit"); ctx.metrics lists each metric with its unit and access ("read" or "record"). Records travel keyed by field NAME, choices by option NAME. zw.tables.query(table, { where: [{ field, op, value }], sort: [{ field, dir }], limit }) resolves { records: [{ id, fields }], total }; zw.tables.add(table, { Field: value }) or a list adds records; zw.tables.update(table, id, fields) and zw.tables.remove(table, ids) need "edit". zw.metrics.read(metric, { from, to }) resolves { metric, readings: [{ value, at, note }] }; zw.metrics.record(metric, value, { note }) needs "record". Name a table or metric by its id or its name. Through a share link a guest can read and add, never change or delete — so an intake form works when shared, a triage board needs a signed-in viewer. A granted Workbench TASK (ctx.tasks; each says whether it takesInput) starts with zw.tasks.start(task, input), which resolves { runId, status } at once — the run carries on after the page closes — and zw.tasks.get(task, runId) reads { status, output } for runs this page started. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. THE KIT: every new interface also has kit.css, components built only from the brand's variables — link it after brand.css () and build from its classes rather than styling from scratch: layout (.page, .page.wide, .header, .stack, .row, .grid), type (h1, h2, h3, .muted, .small, .label, .num, .stat), buttons (.btn, .btn.secondary, .btn.quiet, .btn.sm, .btn.icon), fields (.field with a .label, then .input / .select / .textarea, then a .hint or .error; .check for a checkbox), .chips and .chip, .badge (.up, .down, .accent), .card, .list, .meter, states (.empty, .skeleton, .spinner, .notice, .notice.error), chat (.thread, .bubble.me, .bubble.them, .typing, .composer), and .icon for a Lucide icon. Its tokens are var(--ink), var(--muted), var(--bg), var(--surface), var(--accent), var(--line), var(--tint), var(--radius) and spacing var(--s1)…var(--s7). The starters show the kit used well; read one before writing a page of your own. Design it the way a good product is designed: a clear hierarchy, real spacing, states for loading, empty and failure, and a layout that works on a phone first. Use the brand kit (napkin_brand_get) for what the brand looks like and how it sounds.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full replacement contents for `path`. Creates the file when it doesn't exist. Prefer `edits` on a file that already has something in it. With `append: true`, added to the end of the file instead. | |
| name | No | ||
| path | No | Which file to write. Defaults to index.html. Use lowercase names like app.js or style.css. | |
| edits | No | Targeted find/replace pairs, applied in order. All must match or none are applied. | |
| append | No | With `body`: add it to the end of `path` (creating the file if needed) instead of replacing it. How to write a file too long for one call: first part with `body`, the rest with `append: true`, in order. | |
| archived | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| deleteFile | No | Remove `path` from the interface. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | ||
| interfaceId | Yes | Interface id from napkin_interfaces_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds substantial context beyond that: the ~15,000-character ceiling that silently truncates, the all-or-nothing semantics of edit batches, and that index.html cannot be deleted. It loses a point because the stated 15k write ceiling sits in tension with the schema's maxLength of 400000, leaving the real limit ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first two sentences are tight and front-loaded, but the body then expands into a multi-thousand-word manual covering library tags, brand variables, chart config, kit.css class names and task APIs. Much of this is useful content, but it is overwhelmingly long for a tool description and buries the operative write semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive file-writing tool with no output schema and 11 parameters, the description supplies everything needed to call it correctly: write modes, size limits, ordering, file conventions, and the reading/inspection loop. Nothing an agent needs to invoke it safely is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 73% schema coverage and 11 params, the description still adds meaning for the params the schema leaves bare: 'Also rename, describe, set visibility, or archive' covers name/description/archived/visibility, and it explains append as the chunked-write mechanism. It does not add much on `workspace`, but the important write parameters are well explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening 'Write one file of an interface' gives a specific verb and resource, and the description immediately names the three write modes (`edits`, `body`, `deleteFile`) plus the read sibling (`napkin_interfaces_get`) an agent must call first. An agent can distinguish this from napkin_interfaces_create, napkin_interfaces_view and napkin_interfaces_grant_data without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: `edits` is 'the SAFEST option and the one to reach for by default', `body` is 'for a new file or a deliberate rewrite', `append: true` for parts of a long file, and 'Read with napkin_interfaces_get first'. When-to-use and alternatives are stated outright rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_layouts_listList slide layoutsARead-onlyInspect
Lists the slide layouts napkin_deck_compose can build from — the brand kit's own first, then the built-in ones — with when to use each and the slots it takes (needs must be filled; takes are optional). Every layout adapts to every size, fits its text, and uses the brand's colors, faces and logos; the logo fills itself in. Pick by what the slide has to say: one line (statement), a number (stat), a quote, a list (points, steps), an event, a carousel (cover, inner, closing), a picture (image-top, image-full, split, corner, product-shot), or a display ad (banner).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine context beyond that: ordering of results, that every layout adapts to every size, fits its text, inherits brand colors/faces/logos, and that the logo fills itself in. It does not discuss pagination or whether workspace scoping changes the result set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb, resource and composition target, then the ordering rule, then the field semantics, then the selection taxonomy. Dense and mostly waste-free, though the trailing layout enumeration is long and only a picker list keeps it from being bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden of describing the return contents — it does so by naming the (needs filled, takes optional) field distinction and the ordering. Combined with the selection taxonomy, an agent can call this and act on the result without further discovery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (workspace) at 100% schema coverage, so the schema already documents it and the description does not need to. The needs/takes explanation refers to returned layout metadata rather than to input parameters, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the slide layouts') and ties it directly to its consumer, napkin_deck_compose, which is a sibling tool. The added detail that brand-kit layouts come first, then built-in ones, makes the scope unambiguous versus other napkin_* list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes selection by slide intent: 'Pick by what the slide has to say: one line (statement), a number (stat), a quote, a list (points, steps), an event...'. It also names the downstream tool it feeds, so an agent knows this is the discovery step before composing. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_add_chartPin a chart onto a sheetAInspect
Adds a LIVE chart to a sheet — its SQL re-runs against the tabs on every view, so it never goes stale. Write the query with napkin_sheets_query first to confirm the shape (first column = x axis, numeric columns = series, or set x/series explicitly). Prefer aggregated queries (GROUP BY) — a chart of raw rows is rarely the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| sql | Yes | The SELECT to chart. | |
| type | Yes | ||
| title | Yes | Chart title. | |
| series | No | ||
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| stacked | No | Stack the series (bar/area only). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds a genuinely non-obvious behavioral trait: the chart is live, re-executing its SQL against the tabs on every view. It doesn't mention limits, failure behavior on invalid SQL, or chart-count constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the live-behavior hook is front-loaded, then the query-shape prerequisite, then the aggregation recommendation. No filler or restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers the key unknowns an agent needs: that the chart is live, how columns map to axes/series, and the recommended query shape. It omits what is returned (e.g., a chart id) and any failure conditions, which are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63% and the two chart-mapping fields (x, series) carry no schema descriptions, yet the description explains their derivation rule: first column = x axis, numeric columns = series, overridable by setting them explicitly. That is meaning the schema cannot express. It says nothing about type/stacked interplay or the workspace parameter, which the schema partly covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds a LIVE chart to a sheet') and immediately distinguishes the artifact from a static image by explaining the SQL re-runs on every view. Enough to separate it from siblings like napkin_sheets_view_chart or napkin_sheets_set_cells without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite workflow ('Write the query with napkin_sheets_query first') and a preference ('Prefer aggregated queries (GROUP BY)'), which steers the agent before it commits. It stops short of explicit when-not-to-use guidance or a stated alternative to pinning a chart at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_createCreate a Napkin sheetAInspect
Creates a Napkin sheet (multi-tab spreadsheet), optionally titled. Then populate it with napkin_sheets_set_cells (headers in row 1). Tell the user where it landed — the Sheets tab in Napkin.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write operation (readOnlyHint false), non-destructive, and non-open-world. The description adds useful behavioral context beyond annotations: it creates a multi-tab spreadsheet, supports optional title, prescribes headers in row 1 when populating, and tells where the sheet appears.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with zero waste: what it creates, how to populate it, and what to tell the user. Every sentence contributes actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with no output schema, the description covers the core action, next step, and outcome location. It omits workspace/auth nuance that the schema documents, but no critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; the workspace parameter is documented in the schema, but title has no schema description. The description only says 'optionally titled,' adding minimal semantic detail and no format or length guidance, so it does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Creates') and resource ('Napkin sheet'), clarifies it is a multi-tab spreadsheet, and explicitly names the sibling tool for populating it (napkin_sheets_set_cells). This clearly distinguishes it from update/list/query siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: create the sheet, then populate via napkin_sheets_set_cells, and tell the user where it landed. It does not explicitly state when not to use it or name alternative creation/update tools, but the intended workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_listList Napkin sheetsARead-onlyInspect
Lists the workspace's Napkin sheets (multi-tab spreadsheets — the small-data surface) newest first with tab/chart counts. Archived sheets are hidden unless includeArchived; q narrows by title. Inspect one with napkin_sheets_schema, then query it with napkin_sheets_query.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Title contains (case-insensitive). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No | Also list archived sheets (default false). |
TDQS
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 genuinely useful behavior beyond that: results are ordered newest-first, archived sheets are hidden by default, and counts are included per sheet — all of which affect how the agent interprets the result set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler: the first front-loads what is listed and how results are shaped, the second handles filtering defaults and the downstream tool chain. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full schema coverage and no output schema, the description supplies ordering, filtering defaults, and result content, which is enough to call it correctly. It stops short of mentioning pagination or result caps, a minor gap for a listing endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 `q`, `workspace`, and `includeArchived`, including the workspace-default rules. The description repeats the `includeArchived` default and `q` title-matching without adding syntax, format, or precedence detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) and resource (Napkin sheets) and defines the resource inline as 'multi-tab spreadsheets — the small-data surface', distinguishing it from sibling surfaces like tables and boards. It also specifies ordering and return content (newest first, tab/chart counts), so an agent knows exactly what this returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the follow-up flow: 'Inspect one with napkin_sheets_schema, then query it with napkin_sheets_query,' which names the correct alternatives and their sequence. However, it gives no exclusion criteria (e.g., skip listing when the sheet id is already known), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_queryRun SQL against a sheetARead-onlyInspect
Runs a SQLite SELECT over a sheet's tabs-as-tables (get the table/column names from napkin_sheets_schema first). Full SQLite dialect: WHERE, GROUP BY, ORDER BY, JOINs across tabs, aggregates. Results cap at 200 rows. This is THE way to answer questions about a sheet's data — never eyeball cells when a query can answer precisely.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single SELECT. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, so safety is covered; the description adds two behavioral facts the structured data does not: the 200-row result cap and the supported SQL surface. It does not say what happens to non-SELECT input or where the cap is enforced (truncation vs error), which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and resource, then the prerequisite in parentheses, then the dialect and cap, then the usage directive. Nothing is redundant, though the emphatic 'This is THE way' phrasing is slightly promotional for the informational payload it carries.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read-only tool with no output schema and full schema coverage, the essentials are present: prerequisite tool, dialect, row cap, and when to use it. The only gap is that nothing describes the shape of the returned result set beyond its row ceiling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 exceeds it by explaining what 'sql' can actually contain (JOINs across tabs, aggregates, GROUP BY/ORDER BY) and by clarifying the tabs-as-tables mental model that makes 'sheetId' meaningful. It still leaves the 5000-char limit and the 'single SELECT' constraint to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (runs a SQLite SELECT) and resource (a sheet's tabs-as-tables), and immediately bounds the scope with 'Full SQLite dialect: WHERE, GROUP BY, ORDER BY, JOINs across tabs, aggregates.' An agent can distinguish it from napkin_sheets_set_cells (write) or napkin_tables_query (a different resource) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit prerequisite and ordering ('get the table/column names from napkin_sheets_schema first') plus a clear directive on when to prefer querying over reading cells ('never eyeball cells when a query can answer precisely'). It stops short of naming the exclusion case explicitly — e.g., distinguishing it from napkin_tables_query for non-sheet data — so it is strong context rather than fully exhaustive routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_schemaA sheet's SQL schemaARead-onlyInspect
Returns a sheet's tabs as SQL table definitions — CREATE TABLE scripts with row counts (each tab is a table; its header row names the columns; formula cells contribute computed values). Read this BEFORE writing a napkin_sheets_query so your SQL matches the real tables.
| Name | Required | Description | Default |
|---|---|---|---|
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context the annotations cannot: the shape of the returned artifact (CREATE TABLE scripts with row counts) and the semantic mapping that each tab is a table, its header row names columns, and formula cells contribute computed values. It does not mention pagination or size limits for large sheets, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The purpose and return shape are front-loaded, and the imperative prerequisite ('Read this BEFORE...') closes the description as the action-driving clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden of describing the return value — and it does, down to the CREATE TABLE format, row counts, column naming, and formula evaluation. For a two-parameter read-only tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so sheetId and workspace are already fully documented, including the workspace-token rules. The description only implies that a sheet is addressed, adding no syntax or format detail beyond the schema — the baseline 3 for schema-carried parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns a sheet's tabs as SQL table definitions — CREATE TABLE scripts with row counts') and immediately distinguishes itself from napkin_sheets_query, which returns data rather than structure. An agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the workflow: 'Read this BEFORE writing a napkin_sheets_query so your SQL matches the real tables.' It names the sibling tool and the condition that should trigger this call, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_set_cellsWrite cells into a sheet tabADestructiveInspect
Sets cells in one tab of a sheet, by A1 address — values or formulas ('=SUM(B2:B9)'). Additive and surgical: only the addressed cells change. Check napkin_sheets_schema first so you know the tab names and where data ends; put headers in row 1 when creating a new region. To build a whole small table, write header cells + data cells in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| cells | Yes | A1 → raw value/formula, e.g. {"A1":"Region","B2":"=SUM(B3:B9)"}. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| tabName | No | Tab name (defaults to the first tab). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful nuance that tempers that hint: 'Additive and surgical: only the addressed cells change', clarifying that the write is scoped rather than wholesale. It does not mention the needs_confirmation/approvalId flow, but that is documented in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then behavior ('additive and surgical'), then the workflow prerequisite and construction advice. Four dense sentences with no filler, each carrying distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no output schema, the description covers the prerequisite lookup, the write semantics, and how to compose a small table in one call. It omits any hint about the return value or the approval round-trip, but annotations plus the schema's approvalId field cover enough that the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents the A1-keyed cells map, sheetId, tabName default, workspace rules and approvalId. The description's 'values or formulas' and A1 notes largely restate what the cells property description already gives, adding little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets cells in one tab of a sheet, by A1 address') and enumerates what can be written (values or formulas with an example). It also distinguishes itself from the broader sheet-level siblings like napkin_sheets_update by emphasizing the per-cell, surgical scope, so an agent can pick it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Check napkin_sheets_schema first so you know the tab names and where data ends') and a structural convention ('put headers in row 1 when creating a new region'). It stops short of naming a competing tool to use instead for other cases (e.g. napkin_sheets_update vs this), but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_updateRename, describe, archive, or share a Napkin sheetADestructiveInspect
Edits a sheet's details: title, description, visibility, or archived (true takes it out of the gallery; false brings it back — the recovery move for a sheet created by mistake or no longer wanted). Cells are edited with napkin_sheets_set_cells, not here. Sheet ids come from napkin_sheets_list.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| archived | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | Short gallery summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes beyond them by explaining what the destruction actually is: archived=true removes the sheet from the gallery and false restores it, framing it as a reversible recovery move. It does not disclose permission/authorization requirements or whether omitting a field leaves it unchanged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the editable field list, followed by the sibling exclusion and id source. The parenthetical on archived is the only long clause and it earns its space by defining the destructive behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations covering the safety profile and no output schema, the definition covers intent, editable fields, sibling boundaries, and id sourcing. The one real gap is partial-update semantics: it never says whether passing only title preserves the other fields, which matters for a four-optional-field update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates for the two bare parameters by explaining archived's true/false semantics, which the schema leaves undocumented. title and description are only named, not elaborated, but their names are self-explanatory against the schema's maxLength constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Edits) and resource (a sheet's details) and enumerates the exact editable fields: title, description, visibility, archived. It also distinguishes itself from the sibling napkin_sheets_set_cells by explicitly stating cells are edited there, not here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the sibling alternative for cell edits ('Cells are edited with napkin_sheets_set_cells, not here') and the id source ('Sheet ids come from napkin_sheets_list'), which prevents the most likely misuse. It does not explicitly state when to prefer this over napkin_sheets_create, though the field list makes that mostly self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_sheets_view_chartView a sheet chartARead-onlyInspect
Renders one of a sheet's pinned charts against the LIVE data and returns the image so you can SEE it — the exact chart the user sees. The text part carries imageUrl; to show the user the chart inline in your reply, put a markdown image on its own line: . Use after napkin_sheets_add_chart to confirm the chart reads well, or whenever the user asks about a chart.
| Name | Required | Description | Default |
|---|---|---|---|
| chartId | Yes | Chart id (napkin_sheets_list shows chart counts; the sheet's charts carry ids). | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds real value beyond that: it explains the output is an image rendered against live data and that the text part carries an imageUrl for inline markdown display. It stops short of covering failure modes (invalid chartId, no pinned charts).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and result, followed by the practical display instruction and then usage triggers. No sentence is redundant and the markdown snippet is directly actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 compensates by explaining the returned imageUrl and how to render it inline. Parameters are fully documented in the schema, so an agent has what it needs to invoke correctly; only error/edge-case behavior is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so chartId, sheetId and workspace are already documented in the schema; the baseline is 3. The description adds only marginal meaning, clarifying that the chartId refers to a pinned chart of the sheet, which the schema largely conveys already.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (renders/returns an image), a specific resource (one of a sheet's pinned charts), and a precise scope (against LIVE data, the exact chart the user sees). It is easily distinguished from siblings like napkin_sheets_add_chart or napkin_sheets_query without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two explicit triggers: 'Use after napkin_sheets_add_chart to confirm the chart reads well' and 'whenever the user asks about a chart,' naming the predecessor sibling. There is no when-not guidance or mention of alternative viewing tools, so it falls just short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_slide_addAdd a slide to a deckAInspect
Appends one slide to an existing deck. Pick a layout (title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank), give the title, and optionally content — markdown for the layout's remaining text areas, split by --- lines (two-column/comparison take one block per column). Check the deck first with napkin_deck_outline.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Slide title. | |
| layout | Yes | Layout key: title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank. | |
| boardId | Yes | Napkin board id (a deck). | |
| content | No | Markdown body — blocks split on `---` lines. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation is mutating but non-destructive and closed-world, so the safety bar is lower. The description adds that slides are appended to an existing deck (position at end) and how content maps to layout text areas, which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, and the ordering instruction comes last. The inline layout enumeration duplicates the schema's layout description verbatim, which is minor redundancy, though the enumeration does earn its place as an at-a-glance reference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity, 5-parameter mutation tool with no output schema, the description covers purpose, layout choice, content formatting, and a prerequisite check. It does not describe what is returned (e.g., a slide id usable with napkin_slide_update), but with no output schema that omission is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: content is 'markdown for the layout's remaining text areas' and 'two-column/comparison take one block per column.' It explains the per-column block behavior that the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Appends one slide to an existing deck.' An agent can tell this adds a single slide rather than creating a deck. However, it never explicitly distinguishes itself from siblings like napkin_deck_write, napkin_slide_update, or napkin_slide_fill, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow prerequisite: 'Check the deck first with napkin_deck_outline,' naming a companion tool. It also clarifies what to supply (layout, title, optional content). It stops short of explicit when-not-to-use guidance or naming the write/update siblings as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_slide_fillFill a slide's empty text areasAInspect
Fills a slide's empty layout text areas by NAME — the names napkin_deck_outline surfaces as [empty text stub: "…"]. Pass texts mapping those exact names to content (markdown - bullets welcome). Read the outline first to see which stubs a slide still has open.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | 1-based slide number in presentation order. | |
| texts | Yes | Placeholder name → content, e.g. {"Add a title": "Q3 Review"}. | |
| boardId | Yes | Napkin board id (a deck). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive mutation, and the description adds the key behavioral nuance — it only fills *empty* areas, so it will not clobber existing content, and markdown formatting is honored. It does not say what happens on a name mismatch or repeated fills.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation, then the name contract, then the precondition. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the mutation semantics, the naming contract, and the outline-first workflow for a tool with no output schema. Missing only edge-case behavior (unknown stub names, whether re-filling an already-filled area overwrites or errors).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond it: `texts` keys must be the *exact* stub names surfaced by the outline, and values accept markdown bullets. That name-matching constraint is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with its distinguishing scope: it fills only a slide's *empty layout* text areas, keyed by name. An agent can tell it apart from napkin_slide_update or napkin_deck_write without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition and workflow: read the outline first to see which stubs remain open, then pass those exact names. It names napkin_deck_outline as the source of truth, but does not state when not to use it (e.g. for non-stub content, use slide_update).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_slide_updateMove or change a deck slideADestructiveInspect
Changes one slide as a whole: move it to another position in the deck (moveTo, 1-based — the other slides shift around it), hide it from the show without deleting it (skipped), show or hide its slide number (pageNumber), or replace its speaker notes (notes, markdown). Slide numbers come from napkin_deck_outline. To change what's ON the slide, use napkin_slide_fill or napkin_draw.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Speaker notes (markdown); replaces the current notes. | |
| slide | Yes | 1-based slide number in presentation order. | |
| moveTo | No | New 1-based position for this slide. | |
| boardId | Yes | Napkin board id (a deck). | |
| skipped | No | true hides the slide from present mode and exports. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| pageNumber | No | Show the slide number on this slide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false. The description adds useful context beyond them: moveTo shifts other slides, skipped hides without deleting, and notes replaces existing notes. It does not discuss undo or permissions, but it meaningfully clarifies side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the overall purpose, then lists supported parameters compactly, and ends with routing guidance. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers operation scope and sibling alternatives, and no output schema means return values need not be explained. Missing only minor details such as reversibility or required permissions beyond the schema's workspace note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter. The description repeats key semantics (1-based moveTo, skipped hides, notes markdown) and adds only that other slides shift around the moved slide, so the baseline of 3 is appropriate when structured data does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Changes one slide as a whole') and enumerates the four supported operations: move, hide, page-number toggle, and speaker-notes replacement. It also explicitly distinguishes this tool from content-editing siblings napkin_slide_fill and napkin_draw.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives for changing slide content ('use napkin_slide_fill or napkin_draw') and points to napkin_deck_outline as the source for slide numbers. This gives clear when-to-use and when-to-use-something-else guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_slide_viewView one deck slide (rendered image)ARead-onlyInspect
Renders a single slide of a Napkin deck to an image — exactly what present mode shows, cropped to the slide. Navigate by 1-based slide number in presentation order (get the map from napkin_deck_outline first; the result echoes slideIndex/slideCount so you can step through a deck slide by slide). Use this to check visual layout, drawings, and images that the text outline can't carry.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | 1-based slide number in presentation order. | |
| boardId | Yes | Napkin board id (a deck). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/destructive hints, so the safety profile is covered. The description adds real context beyond annotations: the output is a rendered image matching present mode, it echoes slideIndex/slideCount enabling stepwise navigation, and it warns the text outline can't carry visual content. It doesn't mention pagination, rate limits, or auth nuance (beyond workspace, which the schema covers).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what it produces, then navigation and rationale. Efficient and no filler, though the parenthetical about slideIndex/slideCount packs in navigation detail that could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only 3-param renderer with no output schema, the description covers what the tool returns (an image, present-mode-equivalent), how to navigate a deck, and when to use it versus the outline. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so boardId, slide, and workspace are fully documented in the schema. The description reinforces the 1-based presentation-order semantics of 'slide' and explains that the result echoes slideIndex/slideCount, but adds no syntax or format beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (renders) plus resource (a single slide of a Napkin deck) plus the equivalence 'exactly what present mode shows, cropped to the slide'. This distinguishes it cleanly from siblings like napkin_deck_outline (text map) and napkin_deck_export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when: check visual layout, drawings, and images the text outline can't carry. Explicit prerequisite workflow: get the map from napkin_deck_outline first, navigate by 1-based slide number. It names the alternative source of information and states the condition selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_add_columnsAdd columns to a sheet tableAInspect
Adds columns to the end of a table. Existing records leave them empty.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table tab's name or id. | |
| columns | Yes | ||
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is partly covered. The description adds real value beyond them by disclosing the data consequence: columns are appended at the end and existing records are left empty (i.e., no backfill, no data loss). It omits the approval/needs_confirmation flow that the approvalId parameter implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the verb and resource front-loaded and the behavioral caveat placed second. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers purpose and one behavioral consequence, and the rich schema carries most remaining detail (limits of 30 columns, sheetId source, approval flow). It still leaves prerequisites and the approval handshake to inference, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents sheetId, table, workspace, approvalId, and the nested column fields (name, type, format, options, description). The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds columns') plus scope ('to the end of a table'), which distinguishes it from napkin_tables_create and napkin_tables_add_records without naming them. Clear and unambiguous, but it never explicitly routes the agent away from the sibling tools that also mutate table structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance: it doesn't say to reach for this only on an existing table, nor how it relates to napkin_tables_create (which likely defines columns up front) or napkin_tables_update_records. The agent must infer the scenario entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_add_recordsAdd records to a sheet tableAInspect
Adds records, each a map of field name → value. Choices by option name (a new name becomes a new option); dates as YYYY-MM-DD; people by user id; checkboxes true/false. Every problem is reported at once and nothing is written until all records are valid.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table tab's name or id. | |
| records | Yes | ||
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-destructive, closed-world behavior. Beyond that, the description discloses meaningful runtime semantics: records are validated atomically ('nothing is written until all records are valid') and all errors are returned in one batch. It omits any mention of permissions or the 200-record cap, but the transactional guarantee is exactly the kind of context an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then input formats, then the atomicity guarantee. Every clause carries information and nothing is repeated from the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers input semantics and failure behavior well enough to call the tool correctly, but it never says what a successful call returns (e.g., created identifiers or an insertion count). That is the one gap for a mutation tool with no documented response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3, but the description adds real meaning the schema lacks: the records payload is additionalProperties with no field-level typing, and the description supplies value formats (option name for choices, YYYY-MM-DD for dates, user id for people, true/false for checkboxes). It does not explain workspace/approvalId flows, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Adds records' to a table, per the title), which is unambiguous and distinct from add_columns or query. However, it never explicitly distinguishes itself from the closest sibling napkin_tables_update_records, leaving the agent to infer the boundary from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no prerequisites, and no routing to alternatives such as update_records or delete_records. The text is entirely about input formatting, not about when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_add_viewAdd a view to a sheet tableAInspect
Adds a saved view everyone sees: a grid (with where / sort), a board (lanes from a select or person column — groupBy), or a form people fill in to add records (formFields, formTitle, formIntro). A form's share link is made from the sheet's form view.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| sort | No | ||
| table | Yes | The table tab's name or id. | |
| where | No | ||
| groupBy | No | Board: the select or person column whose values are the lanes. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| formIntro | No | ||
| formTitle | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| formFields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-destructive mutation (readOnlyHint=false, destructiveHint=false), and the description adds meaningful context beyond that: views are shared ('everyone sees') and a form's share link is derived from the sheet's form view. Auth/approval mechanics are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the core action and visibility scope, then branches into the three kinds. Dense but essentially waste-free; only mildly long for the information carried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters and no output schema, the description covers the three view kinds and their key fields well. It omits the workspace/approval requirements, but those are already documented in the schema, so the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 42%, so the description must compensate. It helpfully maps parameters to view kinds (where/sort for grid, groupBy for board, formFields/formTitle/formIntro for form), but gives no format or syntax detail and leaves several parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Adds) and resource (a saved view) scoped to a sheet table, then enumerates the three view kinds (grid, board, form) with their distinguishing mechanics. An agent can immediately tell what it creates 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the kind options and their descriptions (grid for where/sort, board for lanes, form for data entry), but there is no explicit when-to-use vs when-not guidance or named alternative among siblings like napkin_tables_create or napkin_boards_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_createMake a table of recordsAInspect
Makes a table tab — typed columns, one record per row, with grid, board and form views — in an existing sheet, or in a new sheet when sheetId is omitted. Use a table (not napkin_sheets_set_cells) for lists people keep: requests, vendors, bugs, contacts. The first column names each record. Column types: text, long_text, number, date, checkbox, select, multi_select, person, url, email.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The table's name, e.g. Requests. | |
| columns | Yes | ||
| sheetId | No | Add to this sheet; omit to make a new sheet. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| sheetTitle | No | Title for a new sheet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive write (readOnlyHint=false, destructiveHint=false). The description adds genuine context beyond that: that a new sheet is created when sheetId is omitted and that the first column names each record. It does not mention the approval/confirmation flow, though the approvalId parameter documents that in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then usage guidance, then column types. Every sentence carries weight, though the trailing column-type enumeration slightly overlaps the schema enum and adds length without much new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description covers what is built, where it lands, and the column vocabulary. The only minor gap is not surfacing the needs_confirmation/approvalId interaction, which the schema handles instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already documents most parameters, including the sheetId-omission behavior. The description's column-type list largely duplicates the schema enum, and only the 'first column names each record' detail adds meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Makes a table tab') and immediately distinguishes it from the sibling napkin_sheets_set_cells. It also describes the artifact concretely (typed columns, one record per row, grid/board/form views), so an agent knows exactly what is produced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative it is not ('not napkin_sheets_set_cells') and gives the selecting condition ('lists people keep: requests, vendors, bugs, contacts'). It also states the branch behavior for sheetId omission, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_delete_recordsDelete records from a sheet tableADestructiveInspect
Deletes records by id. People can undo this in the sheet only while it's open, so confirm with the person first.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| table | Yes | The table tab's name or id. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds important behavioral context beyond the annotations: the undo limitation ('only while it's open') and the need for human confirmation. It does not cover permissions or rate limits, but adds significant value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences that are front-loaded with the core action and immediately follow with critical usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, destructive action, no output schema), the description covers the essential behavioral aspects: deletion operation, undo window, and confirmation requirement. It is nearly complete, though it could mention required permissions or workspace context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, meaning most parameters are documented in the schema itself. The description adds no parameter-specific details, so the baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Deletes records by id'. This clearly distinguishes it from sibling tools like napkin_tables_add_records and napkin_tables_update_records, as it is the only delete operation among the napkin table tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a crucial prerequisite: 'confirm with the person first', which sets a condition for use. However, it does not explicitly mention alternatives or when not to use it, though the action is inherently distinct from other table operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_getDescribe a sheet tableARead-onlyInspect
A table tab's columns (name, type, choices), its views, and how many records it holds. Read this before writing records so field names and choices match.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table tab's name or id. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, non-open-world behavior, so the bar is lower. The description adds that the call returns column definitions, views, and record counts, which is meaningful behavioral detail given no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the payload front-loaded and the usage instruction second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so reasonably (columns, views, record count), and annotations cover the safety profile. Minor gaps remain: no pagination/size hints for large tables and no mention of the query sibling for reading actual records.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (sheetId, table, workspace) are already documented in the schema. The description adds no field-level syntax or format guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the exact payload (columns with name/type/choices, views, record count) for a table tab, which cleanly separates it from napkin_tables_query (records) and napkin_sheets_schema (sheet-level). It is a noun-style description of returned content rather than an explicit verb phrase, but the resource and scope are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read this before writing records so field names and choices match' gives a clear, actionable when-to-use trigger tied to the write siblings (napkin_tables_add_records/update_records). It stops short of naming those siblings or the query alternative explicitly, so it is clear context without full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_queryFind records in a sheet tableBRead-onlyInspect
Records from a table tab, keyed by field name, with optional where / sort / search / limit (max 500). For counts, sums and joins, napkin_sheets_query runs SQL over tables too (each table is an SQL table with an id column).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| match | No | ||
| table | Yes | The table tab's name or id. | |
| where | No | ||
| offset | No | ||
| search | No | ||
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful context that results are keyed by field name and that the limit is capped at 500, plus the SQL-over-tables note, but says nothing about pagination, defaults, or the workspace/auth requirement mentioned only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with what is returned before the options and the alternative tool. Nothing is redundant, though the SQL aside is parenthetical and slightly compresses two distinct ideas into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query with no output schema, the description gives only a hint of the return shape ('keyed by field name') and does not explain pagination/offset behavior or result ordering. It is adequate for a basic fetch but leaves real gaps for a 9-parameter query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% across 9 parameters, so the description must carry weight. It names where, sort, search and limit (with the 500 cap) but adds no operator, format or default detail, and ignores offset, match and workspace entirely — the offset/pagination behavior in particular is undocumented anywhere in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns records from a table tab, keyed by field name, with named filter/sort options. It also carves out an adjacent use case (aggregation) for a sibling. It does not distinguish itself from close siblings like napkin_tables_get, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent elsewhere when the task is a count, sum or join, naming napkin_sheets_query and explaining that each table is an SQL table with an id column. That is a concrete alternative with a selecting condition, though it gives no explicit 'do not use this for X' for other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
napkin_tables_update_recordsChange records in a sheet tableAInspect
Changes some fields of records by id (from napkin_tables_query). Fields left out keep their values.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table tab's name or id. | |
| sheetId | Yes | Sheet id from napkin_sheets_list. | |
| updates | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered; the description adds genuinely new behavioral context by specifying this is a partial merge ('Fields left out keep their values'), which is not derivable from the annotations. It does not mention the confirmation/approval flow implied by approvalId, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the core action and the id-source pointer are front-loaded. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool whose annotations already carry the safety profile, the description covers action, targeting, and merge semantics adequately, and the absence of an output schema means return values need not be explained. Minor gaps remain: the schema-only approval flow and the 200-item cap are not echoed, but they are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage the baseline is 3, but the description adds real meaning to the `updates`/`fields` payload by explaining that omitted fields are preserved rather than cleared. Other parameters (sheetId, table, workspace) are handled adequately by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (changes), resource (fields of records in a sheet table), and mechanism (by id), which cleanly separates it from siblings like napkin_tables_add_records and napkin_tables_delete_records. It also names napkin_tables_query as the source of ids, giving the agent a clear entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a concrete prerequisite/cross-tool path by directing the agent to obtain ids from napkin_tables_query, which is clear usage context. It does not spell out when NOT to use this tool (e.g. full-row replacement vs. cell edits), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_fields_createCreate a Prism fieldAInspect
Creates a field from an origin idea — the seed of an exploration canvas. Counts against the workspace's field quota. May return needs_confirmation — tell the user what you're proposing and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name (defaults to the idea). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| originIdea | Yes | The idea at the center — a product, concept, sentence. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, which is thin for a create operation. The description adds two genuinely useful facts beyond them: the call consumes the workspace's field quota, and it may return a needs_confirmation envelope requiring the agent to pause and get user approval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short front-loaded sentences: what it creates, its cost, and the confirmation-flow obligation. No filler, and the most consequential operational facts (quota, approval) are stated plainly rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 must carry return behavior, and it does flag the needs_confirmation case; quota consumption is also disclosed. It stops short of describing the success payload (e.g. returned field id), which would fully close the loop for a create tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with five well-described parameters, including enum values and the workspace-token caveat, so the schema carries the load. The description only re-characterizes originIdea ('the seed') and adds no parameter-level detail beyond what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Creates a field') and defines the domain concept ('the seed of an exploration canvas'), so an agent knows this instantiates a Prism field rather than mutating an existing one. It does not explicitly name the sibling it differs from (prism_fields_update/get/delete), but the create semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the confirmation note, but there is no explicit when-to-use/when-not guidance or routing to alternatives such as prism_fields_update or prism_panels_create. The 'wait for approval' instruction is useful process guidance, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_fields_deleteDelete a Prism fieldADestructiveInspect
Removes a field and its whole canvas (soft delete; frees the workspace's field quota). Use when the user is done with an exploration or one was created by mistake — studies attached to its nodes are not deleted. Field ids come from prism_fields_list. May return needs_confirmation — name the field and wait.
| Name | Required | Description | Default |
|---|---|---|---|
| fieldId | Yes | Field id (from prism_fields_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds non-obvious behavior the annotations cannot convey: this is a soft delete, it frees the workspace field quota, attached studies are explicitly NOT deleted, and the call may return needs_confirmation. These are exactly the side-effect details an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the action and its scope before usage conditions, then the confirmation protocol. Every clause carries information; no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, three-parameter tool with no output schema, the description covers the mutation semantics (soft delete), quota effect, non-destructive boundaries (studies survive), id sourcing, and the confirmation round-trip. Nothing an agent needs in order to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so fieldId, workspace, and approvalId are already documented; the description's 'Field ids come from prism_fields_list' largely restates the fieldId schema text. It adds a little value by linking the confirmation flow to approvalId implicitly, but the schema does the heavy lifting, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a field and its whole canvas') and immediately scopes the blast radius, so an agent can distinguish it from prism_fields_update or prism_fields_get without opening any schema. It also clarifies that the canvas is removed alongside the field, which is not inferable from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions ('user is done with an exploration or one was created by mistake') and names the prerequisite source of ids ('Field ids come from prism_fields_list'). It also prescribes the follow-up action for the needs_confirmation path ('name the field and wait'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_fields_getRead a Prism field's nodesARead-onlyInspect
One field's full tree: every node (id, parent, axis, description, pinned, color, whether it has an image / desk research) plus the AI-clustered groups. The origin node has parentId=null; children sit along named axes. Use node ids with the expand / research / study tools.
| Name | Required | Description | Default |
|---|---|---|---|
| fieldId | Yes | Field id (from prism_fields_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real behavioral value by describing the tree's shape (origin node parentId=null, children along named axes) and the per-node attributes returned, which goes beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core payload ('One field's full tree'), followed by structural detail and the downstream-tool hint. No filler, though the parenthetical attribute list is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description sketches the returned structure (nodes with id/parent/axis/description/pinned/color/image/desk-research flags plus AI-clustered groups) and how to use the results. Adequate for a read-only lookup, with minor gaps around grouping semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: fieldId's origin (prism_fields_list) and the workspace/token rules are fully documented in the schema. The description adds no extra syntax or format detail for these parameters, so the schema carries the load — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (one Prism field's full node tree), then enumerates what a node contains and adds the AI-clustered groups. This clearly distinguishes it from the sibling prism_fields_list (enumeration) and prism_fields_get (field metadata vs nodes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives forward-looking guidance: 'Use node ids with the expand / research / study tools,' and the schema notes the field id comes from prism_fields_list. It establishes the context and downstream workflow, though it never states explicit when-not conditions or names a directly competing read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_fields_listList Prism fieldsARead-onlyInspect
Lists Prism fields (idea-exploration canvases) in the active workspace: name, origin idea, node count. Fetch one with prism_fields_get for its nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by describing the returned shape (name, origin idea, node count) and clarifying what a 'field' actually is, which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler. The scope (which workspace) and resource definition come first, and the pointer to the sibling is appended where it is most useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden of indicating the return shape, and it does so explicitly. Combined with the fully documented workspace parameter and the sibling pointer, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already documents the workspace slug and its default/override behavior. The phrase 'in the active workspace' loosely implies workspace scoping but adds no syntax or edge-case detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Lists') and resource ('Prism fields'), and disambiguates the resource by glossing it as 'idea-exploration canvases'. It also enumerates what the listing contains (name, origin idea, node count), so an agent can tell it apart from prism_fields_get without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the sibling for detail work: 'Fetch one with prism_fields_get for its nodes', establishing the list-vs-get alternative. It gives clear context but no explicit when-not condition or prerequisites, so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_fields_updateRename, describe, or share a Prism fieldADestructiveInspect
Edits a field's name (null reverts to the origin idea), description, or visibility. Nodes are untouched. Field ids come from prism_fields_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| fieldId | Yes | Field id (from prism_fields_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description adds real value on top by disclosing that nodes are unaffected by the edit, that passing null reverts the name to the origin idea, and that the call may return a needs_confirmation envelope. It stops short of describing what the confirmation flow requires or whether changes are reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and immediately followed by the most decision-relevant constraint (nodes untouched). No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers scope, the null-revert rule, and the confirmation handshake. Missing details are minor: what triggers needs_confirmation, and what the call returns on success, though the annotation already flags destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description fills the notable gap: the bare 'name' property has no schema description, and the text explains that null reverts to the origin idea. The needs_confirmation mention also contextualizes the otherwise cryptic approvalId parameter. Visibility semantics are left to the schema's own enum description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (edits) plus the exact editable attributes (name, description, visibility) and scopes the blast radius with 'Nodes are untouched', which cleanly separates it from prism_nodes_update and from prism_fields_create/delete. An agent can identify the operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by pointing at prism_fields_list as the source of field ids and by warning that a needs_confirmation envelope may come back, but it never states when to prefer this over prism_fields_create/delete or what preconditions must hold. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_insights_promoteKeep a study insight in LedgerAInspect
Promotes an analysis theme (or, with no themeId, the analysis summary) into the workspace's Ledger as a belief, carrying the supporting verbatims as evidence with links back to the study. THE step that turns a finding into workspace memory — use when the user says an insight matters. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| themeId | No | A theme id from prism_studies_get; omit for the summary. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, non-destructive, closed-world write, so the bar is lower; the description still adds real value by disclosing that supporting verbatims are carried across as evidence with links back to the study, and that the call may return `needs_confirmation`. It does not explain what happens on that confirmation path, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and destination before the nuance. The em-dash flourish ("THE step that turns a finding into workspace memory") is rhetorical rather than informational, but it is brief enough not to cost readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation with no output schema and only 50% schema coverage, the description covers the main flow and the confirmation signal but leaves the approvalId/confirmation round-trip and the relationship to the ledger_entries_* siblings unexplained. Adequate, with identifiable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description must compensate, and it partially does: it explains the themeId-vs-summary branch that the schema leaves implicit. However, studyId and approvalId carry no description in either place, and approvalId is plausibly the key to the `needs_confirmation` behavior the description mentions but never connects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (promotes) and resource (an analysis theme, or the analysis summary by default) and the destination (workspace Ledger as a belief), including what travels with it (supporting verbatims as evidence). An agent can distinguish this from ledger_entries_create or prism_studies_analyze without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"use when the user says an insight matters" gives a concrete trigger condition, and the parenthetical about omitting themeId clarifies the branch between theme-level and summary-level promotion. It stops short of naming an alternative tool (e.g. ledger_entries_create) or a when-not condition, so it is clear context without exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_interviews_createMint a study interview inviteAInspect
Creates a one-on-one AI-led interview on a study and returns the invite link to forward — the guest needs no account. The transcript stays on the study and joins the next analysis run (it never lands in Compass). focusPrompt briefs the interviewer on what to dig into; omitted, it explores the study's territory. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| focusPrompt | No | ||
| intervieweeName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (mutation with destructiveHint=false, openWorldHint=true). Beyond that, the description adds real behavioral detail: the guest needs no account, the transcript persists on the study and feeds the next analysis run, and the call 'May return needs_confirmation'. That last one is valuable but unexplained — the agent isn't told why or what to do next.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with purpose and return value before the focusPrompt fallback. Every sentence carries information; the only mild drag is the trailing needs_confirmation clause, which is stated without enough context to be fully usable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on return-value explanation and names the invite link plus the needs_confirmation possibility. For a five-parameter mutation tool it is close to complete, but approvalId — likely the input that resolves needs_confirmation — is left entirely undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% (workspace is the sole documented param), so the description must carry more. It does clarify focusPrompt — briefs the interviewer on what to dig into, otherwise it explores the study's territory — which is genuine added meaning, but approvalId and intervieweeName are never explained, and the plausible link between approvalId and the advertised needs_confirmation response is left for the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates) plus the resource (a one-on-one AI-led interview on a study) and its output (invite link to forward). It also implicitly distinguishes itself from the similarly named compass_interviews_create by noting the transcript 'never lands in Compass', which is exactly the kind of sibling differentiation an agent needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear — mint a link you forward to a guest who needs no account — and explains focusPrompt's default behavior when omitted. However, it never states when to pick this over compass_interviews_create, prism_panels_run, or prism_series_launch_wave, which all sit nearby and could plausibly produce research sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_interviews_listA study's interviewsBRead-onlyInspect
The study's one-on-one qual conversations: guest, status, focus, and — once completed — the structured memo (summary, key claims, tensions, verbatim quotes). Raw transcript included only while no memo exists. inviteUrl is the link to forward for interviews still waiting on their guest.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely useful behavioral detail beyond that: raw transcript is only returned while no memo exists, and inviteUrl is present only for interviews still awaiting a guest. It omits pagination/volume limits, but the conditional data-shape disclosures are real added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the resource and then enumerates returned fields. The em-dash clauses are heavy but each carries distinct information, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 work of describing return fields (memo contents, transcript conditionality, inviteUrl), which is a real strength. However it leaves studyId undocumented and says nothing about result volume, ordering, or failure modes, so it is only adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: workspace is documented in the schema, but studyId has no description. The description only implicitly signals that studyId scopes results ('The study's interviews') and adds no format, ID-type, or defaulting detail to compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and title establish this as the read/list counterpart for a study's interviews, and the description concretely characterizes what an interview record is ('one-on-one qual conversations'). It does not explicitly say 'list' or differentiate from prism_interviews_create, but the resource and intent are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g., needing a valid studyId), and no routing to alternatives such as prism_interviews_create or prism_studies_get. The agent must infer the call context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_nodes_expandExpand a Prism node along an axisAInspect
THE core Prism gesture: generate variations of a node along a named semantic axis ('more visceral', 'for the skeptic', 'stripped to essentials'…) in one of four directions. Runs generation against the workspace's inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | The lens for the variations — short, evocative. | |
| count | No | How many (default 3). | |
| fieldId | Yes | Field id. | |
| parentId | Yes | Node to branch from. | |
| direction | No | Canvas direction (default right; pick a free side). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-read-only, non-destructive write. The description adds two useful traits beyond that: it consumes workspace inference credit and may return a `needs_confirmation` state. It does not, however, explain what confirmation entails or what the generated output looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the operation and the axis concept. The 'THE core Prism gesture' framing is mild marketing but does not obscure the information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generation tool with no output schema and high schema coverage, the description covers the essentials: what it produces, that it costs credit, and that confirmation may be required. A note on the return shape of the variations would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the baseline is 3, but the description adds meaning to the `axis` parameter by giving concrete examples ('more visceral', 'for the skeptic', 'stripped to essentials'). It slightly restates the four-way direction enum rather than adding to it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (generate variations) and resource (a Prism node) with the scope made explicit: 'along a named semantic axis ... in one of four directions.' This clearly separates it from siblings like prism_nodes_update and prism_nodes_research.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no named alternatives among the many prism_* siblings. The only contextual hint is the credit-cost note, which informs the agent of expense but not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_nodes_researchRun desk research on a Prism nodeAInspect
Web-sourced secondary research on a node's idea — market context with citations, stored on the node. depth 'thorough' runs three angled passes (market, evidence, shifts) at ~3× the credit. focus steers what it goes after; without one it answers a generic brief off the node's own description, so pass it whenever the user has said what they actually want to know. Runs against the workspace's inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| focus | No | What to concentrate on, e.g. 'pricing and who already pays for this' or 'regulatory constraints in the EU'. | |
| nodeId | Yes | ||
| fieldId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true and readOnlyHint=false; the description goes further by disclosing that 'thorough' runs three angled passes at ~3× the credit, that the run consumes workspace inference credit, and that it may return `needs_confirmation`. That is meaningful cost/mutation context beyond the annotations, though no auth or rate-limit detail is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then layers depth behavior, focus guidance, billing, and return signal in dense em-dash clauses. Nothing is filler, though the packing of multiple distinct facts into single sentences makes it slightly harder to skim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the output shape (cited market context stored on the node), cost model, and a possible confirmation state, which is good for a tool with no output schema. But with 6 parameters, two required and two undocumented, an agent still lacks enough to call it confidently, particularly around the approval flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It does add real meaning for `depth` (three passes at 3× credit) and `focus` (steers the run; generic brief otherwise), but `nodeId`, the required `fieldId`, and especially `approvalId` are left completely unexplained — and the link between `approvalId` and the advertised `needs_confirmation` return is never made.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'web-sourced secondary research on a node's idea — market context with citations, stored on the node.' The node anchoring and storage location distinguish it from generic research siblings, though no sibling (e.g. prism_research_run) is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear actionable guidance for parameter choice ('pass focus whenever the user has said what they actually want to know') and explains the depth tradeoff. However, it never says when to pick this node-scoped research over the other prism_research_* siblings — usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_nodes_updatePin or color a Prism nodeCDestructiveInspect
Sets pinned state and/or the color tag on a node. Pins are the cross-field shortlist. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Hex color, or null to clear. | |
| nodeId | Yes | ||
| pinned | No | ||
| fieldId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation profile is covered. The description adds one genuinely new behavioral fact ('May return `needs_confirmation`'), but leaves it unexplained — what triggers it, what to do next, or how approvalId relates — so the added signal is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, well-ordered sentences with the core action front-loaded; nothing is padded. The final sentence is a dangling fact that would earn more weight if tied to the tool's parameters, but the overall size is appropriate for a small mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter destructive mutation with no output schema and 33% schema coverage, the description is too sparse. It omits any explanation of the approval flow implied by approvalId, the required fieldId/nodeId pairing, and the effect of clearing a pin or color — leaving the agent to infer the risky parts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (color and workspace documented), so the description must compensate for fieldId, nodeId, pinned, and approvalId — all undocumented. The description references 'pinned state' and 'color tag' in prose but adds no format, defaulting, or clearing semantics, and never links the dangling `needs_confirmation` mention to the approvalId parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: setting pinned state and/or a color tag on a node, with the useful gloss that pins form the cross-field shortlist. It clearly describes the mutation, though it does not name or distinguish itself from any sibling (e.g. prism_nodes_expand, prism_fields_update).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives for tagging/pinning. The one contextual line ('Pins are the cross-field shortlist') clarifies the domain concept of a pin but does not tell the agent when this tool is the right call versus another Prism node operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panel_runs_cancelCancel a panel runADestructiveInspect
Stops a queued, running or paused panel run. Answers already in stay. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds real behavioral context beyond that: 'Answers already in stay' tells the agent partial results are preserved and 'May return needs_confirmation' warns of a confirmation envelope. It omits what happens if the run is already terminal or whether cancellation is reversible, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences, front-loaded with the action and affected states before the preservation note and the return caveat. Every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the target states, the side effect on existing answers, and the confirmation-envelope return path that maps to approvalId. Remaining gaps (terminal-state behavior, irreversibility) are minor against annotations that already flag destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; workspace and approvalId are described in the schema, and runId is self-evident. The description usefully links the needs_confirmation return to the approvalId parameter, adding meaning the schema alone does not, but it adds nothing for runId or workspace, so baseline-range credit is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Stops) and resource (panel run) plus the eligible states (queued, running, paused), so an agent can distinguish it from prism_panel_runs_get and prism_panel_runs_estimate. It stops short of naming siblings explicitly, but the action and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumeration of valid states ('queued, running or paused') implicitly tells the agent when the call applies, and the needs_confirmation mention hints at a follow-up flow. However, there is no explicit when-not guidance, no mention of alternatives, and no prerequisites (e.g., permissions) beyond what the schema carries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panel_runs_estimateEstimate a panel runARead-onlyInspect
What running a study against a panel would cost: people, model calls, and approximate dollars of workspace credit. Starts nothing. Tell the person the cost before calling prism_panels_run.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | survey (default) or interview. | |
| panelId | Yes | ||
| samples | No | Answers per person for a survey run (default 3). | |
| studyId | Yes | ||
| budgetUsd | No | Pause the run once it has spent this many dollars. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| temperature | No | ||
| interviewFocus | No | Interview runs: what the interviewer should explore. | |
| interviewPeople | No | Interview runs: how many people (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the bar is lower. The description reinforces this with 'Starts nothing' and characterizes the return value, which is useful added context. It stops short of auth or rate-limit details, keeping it at a solid 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler: purpose first, side-effect guarantee second, usage rule last. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only estimate tool with clear annotations, the description covers purpose, no-side-effects, the calling sequence, and a summary of the return shape. With no output schema it could say slightly more about the estimate's structure, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (panelId, studyId, temperature undocumented), just below the high-coverage baseline. The description adds no parameter-level detail beyond the domain framing of 'a study against a panel'; the fields that drive cost (samples, interviewPeople, budgetUsd) are only explained in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (estimate) and resource (panel run cost), and enumerates what the estimate contains (people, model calls, dollars of workspace credit). It is immediately distinguishable from the sibling prism_panels_run, which actually launches the run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (prism_panels_run) and the sequencing condition: 'Tell the person the cost before calling prism_panels_run.' It also rules out misuse with 'Starts nothing,' so the agent knows this is the safe pre-flight check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panel_runs_getA panel run's progress and analysisBRead-onlyInspect
Status, progress, spend and the run's own analysis. For the numbers, call prism_studies_results with panelRunId. Synthetic answers are never people's: always say so when you report them.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/non-destructive/non-open behavior, so the bar is lower, and the description still adds real context: the tool returns spend and the run's own analysis, and it carries an important reporting caveat that synthetic answers are never real people. That caveat is not encoded anywhere in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the payload, then the routing rule, then the caveat. No filler and each sentence carries distinct information, though the panelRunId/runId naming shift is slightly jarring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, listing the returned contents (status, progress, spend, analysis) is helpful, and annotations cover the safety profile. The gap is the undocumented runId parameter, which leaves the caller unsure what identifier format to supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: the documented 'workspace' param is fine, but 'runId' has no description in the schema and the description does not explain it either. The only identifier mention is 'panelRunId' passed to a different tool, which does not clarify this tool's own required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates what the tool surfaces about a panel run (status, progress, spend, its own analysis), which makes the resource and payload clear even without an explicit verb. It partially differentiates from siblings by routing numeric results to prism_studies_results, but does not distinguish it from prism_panels_get or prism_panel_runs_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete routing rule ('For the numbers, call prism_studies_results with panelRunId'), which is a genuine when-to-use alternative. However it says nothing about when to prefer this over prism_panel_runs_estimate, prism_panel_runs_cancel, or prism_panels_get, so usage is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panels_createCreate a synthetic panelAInspect
Saves a panel from a spec (usually from prism_panels_draft) and draws its people from population records in the background, which takes a few seconds. Visible to the workspace unless visibility is PRIVATE. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| spec | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| visibility | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the population drawing happens in the background and 'takes a few seconds' (latency/async behavior), the default visibility is workspace-scoped 'unless visibility is PRIVATE', and it 'May return `needs_confirmation`', flagging the approval flow. These are distinct operational traits the readOnlyHint/destructiveHint flags do 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action before the caveats, and every clause carries information (timing, visibility default, confirmation). Slightly dense but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a complex nested spec, no output schema, and 33% schema coverage, the description omits the structure of the spec object entirely and never says what a successful call returns (only the needs_confirmation branch). It covers the confirmation flow but leaves the main payload and success return unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must carry more weight, and it only clarifies visibility (PRIVATE scoping) and the origin of the spec. name, description, the nested spec fields (seed, size, filters, targets, presentation), and approvalId usage are left to the schema or undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Saves a panel from a spec') and ties it to the workflow by naming the sibling prism_panels_draft as the usual spec source. An agent can distinguish this create step from the draft/get/list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(usually from prism_panels_draft)' implies the correct ordering (draft first, then create) and the description points at the confirmation path, giving clear context. It stops short of an explicit when-not clause or naming alternatives for other paths (e.g. prism_panels_run), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panels_draftDraft a synthetic panel from a descriptionARead-onlyInspect
Turns a plain description of an audience ("100 Midwest senior citizens") into a panel spec: filters on Census and General Social Survey fields, a size, and stated shares for traits with no data behind them (assumed). Saves nothing. Show the person the spec and assumedNotes, then pass the spec to prism_panels_create. poolSize is how many people in the population sample match.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only and safe, and the description adds the crucial behavioral fact that nothing is saved, plus that unsupported traits are emitted as 'assumed' with assumedNotes. It also explains poolSize. This is substantial behavior disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what it produces, then the draft/save behavior, the handoff, and the poolSize definition. No filler, and the most consequential constraint (saves nothing) is stated early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param read-only draft tool with no output schema, it covers purpose, non-persistence, the next tool to call, and one derived field. It could say more about what the spec's filters look like, but it is sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and both params are simple. The description explains poolSize (returned size, not an input) and that description is a plain-language audience, but does not document workspace or describe syntax for sizing/filters in the input string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: turns a plain audience description into a panel spec with filters, size, and assumed shares. It names the sibling prism_panels_create as the next step, so the draft/create boundary is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: show the spec to the person, then pass it to prism_panels_create. It does not state when NOT to use the tool or contrast it with prism_studies_draft/standalone variants, but the draft-vs-create handoff is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panels_getA synthetic panel and who's on itARead-onlyInspect
One panel with its current version and the share of people by every field (assumed fields flagged). Use it to confirm a draw looks like the audience the person meant.
| Name | Required | Description | Default |
|---|---|---|---|
| panelId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only profile (readOnlyHint=true, destructiveHint=false), so the description sensibly spends its words on the return shape: current version, per-field shares, and flagged assumed fields. That is genuine behavioral context an agent cannot get from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the payload description front-loaded before the use case. Nothing is wasted, though it is not maximally information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what comes back, and it does so reasonably well (version, field shares, assumed-field flags). The main gap is the undocumented required panelId and absent pagination/error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: workspace is documented in the schema, but the required panelId has no description anywhere. The description adds nothing about parameter format, sourcing, or the workspace override rules, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('One panel') and enumerates its payload ('current version and the share of people by every field'), so the agent knows this is a singular-panel retrieval. It contrasts implicitly with the plural prism_panels_list sibling, though it never names it outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to confirm a draw looks like the audience the person meant' gives a concrete purpose, which is more than most getters offer. But it does not say when to prefer this over prism_panels_list or prism_panel_runs_get, leaving alternative routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panels_listList synthetic panelsARead-onlyInspect
Every synthetic panel the person can see: name, current version (people, status), runs so far, and fit (how far it sat from people the last time a study had both). Reuse an existing panel before drafting a new one.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description still adds real context: the visibility scope ('the person can see') and the meaning of the derived 'fit' metric ('how far it sat from people the last time a study had both'). Pagination and result-size behavior are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with scope and contents, with the action guidance last. The field list is dense and the parenthetical defining 'fit' is slightly convoluted, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values and does so by enumerating name, version, people, status, runs, and fit. The single parameter is handled by the schema. Pagination or ordering behavior for a potentially long list is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the workspace parameter is fully documented in the schema, so the description does not need to explain it. The description adds no parameter-level detail beyond that, which is the expected baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Every synthetic panel the person can see') and enumerates the returned fields, which distinguishes it from prism_panels_get, prism_panels_create, and prism_panels_draft without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Reuse an existing panel before drafting a new one' gives a clear when-to-use rule that routes the agent to this tool before prism_panels_draft. It stops short of naming the sibling explicitly or stating when-not to use it (e.g. when a single panel is already known), so it is clear context rather than full alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_panels_runRun a study against a synthetic panelAInspect
Starts a background run: every person on the panel answers the study (or, for kind interview, sits with the study's interviewer). Spends workspace credit — give the person the estimate from prism_panel_runs_estimate first. Works on draft studies. Answers land as their own result set, labeled synthetic, never counted as responses. Follow with prism_panel_runs_get. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | survey (default) or interview. | |
| panelId | Yes | ||
| samples | No | Answers per person for a survey run (default 3). | |
| studyId | Yes | ||
| budgetUsd | No | Pause the run once it has spent this many dollars. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| temperature | No | ||
| interviewFocus | No | Interview runs: what the interviewer should explore. | |
| interviewPeople | No | Interview runs: how many people (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: discloses credit spend, draft-study restriction, that answers become a labeled synthetic result set never counted as responses, the background/async nature, and the possible needs_confirmation envelope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly five dense sentences, front-loaded with the core action, then cost, prerequisites, results, and follow-up. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a background, credit-spending run with no output schema, it covers the full lifecycle (estimate → run → get), the confirmation edge case, and the synthetic labeling. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning for the 'kind' modes and the interview behavior, but with 70% schema coverage most parameters are already documented. It doesn't explain budgetUsd, approvalId, or workspace beyond what the schema provides, so it is above baseline but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Starts a background run: every person on the panel answers the study') and distinguishes the two modes (survey answers vs interview sits with the study's interviewer). Clearly distinct from siblings like prism_panel_runs_get and prism_panel_runs_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says what to do before ('give the person the estimate from prism_panel_runs_estimate first') and after ('Follow with prism_panel_runs_get'), and notes the prerequisite that it works on draft studies. Names alternatives by their sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_research_digestWhat the workspace's research has foundARead-onlyInspect
A cross-study digest: every study with responses — title, origin (standalone / canvas node / tracker wave), response count, latest analysis summary, top themes, and which insights were kept in Ledger. The starting point for 'what have we learned about X?' — follow up with prism_studies_get (insights) or prism_studies_results on the studies that matter.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, and destructiveHint=false, so safety is covered. The description adds real behavioral value by describing the tool as a cross-study rollup and listing the fields it surfaces, letting an agent predict the payload. It stops short of noting pagination or size limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. The content of the digest is front-loaded in a scannable list, and the usage/routing sentence follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the return fields in detail, which is exactly what an agent needs to know before calling. Purpose, usage, and follow-up routing are all present for a simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'workspace' parameter is fully documented there, including token/default-workspace behavior. The description never mentions the parameter, so it adds nothing beyond the schema — the baseline 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: a cross-study digest covering 'every study with responses,' and enumerates exactly what it includes (title, origin, response count, latest analysis summary, top themes, Ledger insights). It also distinguishes itself from siblings by naming prism_studies_get and prism_studies_results as follow-ups rather than competitors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as 'the starting point for "what have we learned about X?"' and directs the agent to specific alternatives (prism_studies_get for insights, prism_studies_results for details) on the studies that matter. The when-to-use and when-to-escalate conditions are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_research_reports_getRead a desk-research reportARead-onlyInspect
One desk-research report in full: the brief (markdown) and the sources it cites. Its claims are what public sources say, not what anyone at the company told you; when you put them on the Compass map, cite sourceKind 'prism_report' with this report's id.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| reportId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine substance beyond that: the exact payload composition (markdown brief + cited sources) and a provenance caveat that claims reflect public sources rather than internal company statements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the return content front-loaded before the citation rule. Every clause carries information, though the Compass citation instruction is arguably closer to another tool's concern and slightly dilutes the core read description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 what is returned (brief + sources) and flags the epistemic nature of the content. Combined with read-only annotations this is nearly sufficient, though the origins of studyId/reportId and any pagination or size limits are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only workspace is documented), so the description should compensate more. It ties 'this report's id' to reportId for citation purposes but leaves studyId completely unexplained and never clarifies the studyId/reportId relationship, adding only marginal meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read a desk-research report') and immediately says what a single report contains ('One desk-research report in full: the brief (markdown) and the sources it cites'). The word 'One' implicitly distinguishes it from the sibling prism_research_reports_list, so an agent can tell the two apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives downstream usage context (cite sourceKind 'prism_report' with this report's id when placing claims on the Compass map), which tells the agent what to do with the output. However, it never states when to call this versus prism_research_reports_list or where the required ids come from, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_research_reports_listList a study's desk researchARead-onlyInspect
Every desk-research report on a study, newest first: id, title, the focus it was asked, depth, status (running / ready / failed) and an excerpt. Read one in full with prism_research_reports_get.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds real value beyond them: result ordering, the exact fields returned, and the status vocabulary (running / ready / failed).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler: the first front-loads scope, ordering and returned fields; the second handles the handoff to the sibling tool. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 returned fields and status values, which is the main thing an agent needs. It is close to complete for a simple list tool; only the required studyId identifier goes unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the workspace slug is well documented in the schema, but the required studyId has no description anywhere. The prose mentions no parameters at all, so it neither compensates for the studyId gap nor adds format/syntax detail beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (list) plus resource (desk-research reports on a study) with an explicit ordering guarantee ('newest first'). It names the sibling it complements, prism_research_reports_get, so an agent can distinguish listing from fetching without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this to enumerate reports, use prism_research_reports_get to 'read one in full'. The when-to-use alternative is clear, though there are no stated exclusions or preconditions (e.g. what happens with no reports or no studyId).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_research_runRun desk research on a studyAInspect
Web-sourced desk research kept as a report on a study, with citations. Steer it with focus: research accumulates, a broad sweep first, then narrower runs as the questions sharpen. depth 'thorough' runs three angled passes at ~3× the credit. To research a company, make a standalone study about it (prism_studies_draft_standalone) and run one report per area of the business, e.g. focus 'how finance closes the month and approves spend at , from job posts, filings and press'. It plans questions, searches, reads the pages and keeps only findings it can quote from them, so it takes a few minutes: this returns at once with the report running. Tell the person it's under way, and read it with prism_research_reports_get once its status is ready. Runs against the workspace's inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| focus | Yes | What to concentrate on. | |
| title | No | ||
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), it discloses genuinely useful behavior: the call returns immediately while the report runs for a few minutes, it consumes workspace inference credit, it only keeps findings it can quote, and it may return `needs_confirmation`. These are non-obvious operational traits an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with what the tool is and what `focus`/`depth` do, and most sentences carry distinct information. It runs long with several embedded operational asides, but little is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden and does so: it explains the async launch, that a report is created, that status becomes 'ready', and how to retrieve it. Combined with the credit and confirmation notes, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema coverage the description must compensate, and it does for the two decisive params: `focus` (accumulative steering, broad-to-narrow) and `depth` ('thorough' = three passes at ~3× credit). It leaves studyId, title, workspace and approvalId to the schema, but the key semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('web-sourced desk research kept as a report on a study, with citations') and ties it to a study, which cleanly separates it from prism_nodes_research, prism_panels_run and prism_research_digest. An agent can tell what this produces and where it lands 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when/how guidance: steer with `focus` (broad sweep first, then narrower runs), use `depth: thorough` for three angled passes, and for company research create a standalone study via prism_studies_draft_standalone and run one report per business area. It also names the follow-up read path (prism_research_reports_get) and the condition (once status is ready).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_series_createStart a recurring research seriesAInspect
Creates a research program that fields the SAME instrument on a schedule — brand tracking, a weekly pulse — each wave an ordinary study. The questions freeze once the first wave fields (that's the trendline), so get them right with the user first. Optionally bind a Ledger metric + score rule so every wave posts a reading (a scorer needs a metricId). Waves launch on schedule, or on demand with prism_series_launch_wave. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| scorer | No | How a wave becomes one number: { kind, questionIndex, option?, minN? }. | |
| interval | Yes | daily or weekly. | |
| metricId | No | Ledger metric the waves post readings to (from ledger_metrics_list). | |
| dayOfWeek | No | Weekly only: 0 = Sunday … 6 = Saturday. | |
| questions | Yes | The instrument: an ordered list of questions ({ type, prompt, options?, … } — read an existing study with prism_studies_get for the shape). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| scheduleTime | No | HH:MM local to scheduleTimezone (default 09:00). | |
| scheduleTimezone | No | IANA zone (default UTC). | |
| adaptiveFollowUps | No | AI follow-up questions on curious answers (default true). | |
| autoAnalyzeTarget | No | Analyze each wave automatically at this many completes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: questions freeze once the first wave fields (an irreversible constraint), scorer requires a metricId (cross-parameter dependency), and the tool may return a needs_confirmation envelope. These are exactly the traits an agent needs and none are in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the immutability warning, then the optional binding and launch alternative. Dense with parentheticals and em-dashes but nearly every clause carries decision-relevant information; slightly long for the payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no output schema, the description covers the two highest-risk facts (question immutability, needs_confirmation flow) and the metric binding. It leaves the success/return shape and scheduling edge cases unstated, but the schema covers the rest adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so the schema does the heavy lifting; the description nonetheless adds the non-obvious rule that a `scorer` needs a `metricId` and clarifies what a scorer does. It does not explain interval/dayOfWeek/scheduleTime interactions beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a research program that fields the SAME instrument on a schedule'), with concrete examples (brand tracking, weekly pulse) and the key distinction that each wave is an ordinary study. This clearly separates it from prism_series_launch_wave and prism_series_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: freeze the questions with the user first, optionally bind a Ledger metric + score rule. It names the sibling alternative for on-demand launches ('Waves launch on schedule, or on demand with prism_series_launch_wave'), though it does not state explicit exclusions for when not to create a series.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_series_launch_waveField the next wave of a seriesBDestructiveInspect
CLOSES the current wave (no more responses; it scores and posts to Ledger if bound) and fields the next one from the series' frozen instrument, readying its participant link. Fielding spends credit for follow-ups, closing chats, and analysis, and closing a live wave can't be undone — say both plainly before proposing. Manual launches don't move the schedule clock. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| seriesId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true. The description adds significant value beyond those annotations: it explains that closing is irreversible and scores/posts to Ledger, that fielding spends credit, and that it may return 'needs_confirmation'. That is genuine behavioral disclosure of cost and irreversibility, though the confirmation flow is only hinted at, not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is dense and front-loads the primary effect (closes + fields). However, it crams multiple distinct concepts (scoring, Ledger posting, credit spending, irreversibility, schedule semantics, return value) into run-on sentences without clear separation, making it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, multi-effect mutation tool with no output schema and incomplete parameter documentation. The description does not explain the confirmation/approval workflow, what happens to active participant chats, or how approvalId ties into needs_confirmation. For a tool with this complexity, the missing parameter and workflow detail is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only the 'workspace' parameter is documented in the schema). The description adds zero information about the required 'seriesId' or the 'approvalId' parameter, which is a critical gap since approvalId is presumably central to the 'needs_confirmation' flow. The description must compensate for the low coverage but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific compound action: closing the current wave and fielding the next one from the series' frozen instrument. The verb+resource is distinctive and not shared by any sibling, though the product-specific terminology ('wave', 'field', 'frozen instrument') is somewhat opaque without additional domain context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a clear condition ('Manual launches don't move the schedule clock') but doesn't map the tool against sibling tools like prism_panels_run or prism_series_create. It mentions a side effect warning that implies careful timing, but doesn't say when to select this over manual panel runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_series_listList research seriesARead-onlyInspect
Recurring research programs (ADR 0031): name, cadence, enabled state, next wave time, wave count, and the metric + score rule when the series posts readings. Waves themselves are ordinary studies.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds genuine domain context (that a series has cadence, next wave time, and a metric/score rule) and clarifies the series-vs-study boundary, but says nothing about ordering, pagination, or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense but well-ordered sentences: the entity definition comes first, the field list second, and the sibling boundary last. The '(ADR 0031)' citation is the only token that does not help an agent decide or call, so it is near-optimal rather than flawless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating the fields a series exposes, which is the right move for a list tool. It omits pagination and any note that results may be empty or workspace-scoped, which are minor gaps given the 100%-covered single optional parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional parameter and schema description coverage is 100%, with the workspace slug and its token-dependent required/ignored rules documented in the schema itself. The description adds no parameter meaning beyond that, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource precisely as 'recurring research programs' and enumerates the fields they carry (name, cadence, enabled state, next wave time, wave count, metric/score rule), which lets an agent distinguish it from prism_series_create, prism_series_update, and prism_series_launch_wave. It never states the verb explicitly, so the listing action is inferred from the tool name rather than the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement, but the closing line 'Waves themselves are ordinary studies' implicitly routes the agent to the prism_studies_* tools when it wants wave content rather than series definitions. No exclusions, prerequisites, or direct sibling alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_series_updatePause, resume, or reschedule a research seriesADestructiveInspect
Edits a series: enabled: false pauses the schedule (true resumes), interval / scheduleTime / scheduleTimezone / dayOfWeek move the cadence, name and follow-up / auto-analyze settings change any time. The instrument (questions, scorer) is editable only while no wave has fielded — after that the server refuses with invalid, and the answer is a new series. Series ids come from prism_series_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| scorer | No | ||
| enabled | No | false pauses, true resumes. | |
| interval | No | ||
| metricId | No | ||
| seriesId | Yes | Series id (from prism_series_list). | |
| dayOfWeek | No | ||
| questions | No | Replacement instrument — only before the first wave fields. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| scheduleTime | No | HH:MM. | |
| scheduleTimezone | No | IANA zone. | |
| adaptiveFollowUps | No | ||
| autoAnalyzeTarget | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is partly covered. The description adds value beyond that: the instrument-editability window, the `invalid` refusal behavior, and the fact that it "May return `needs_confirmation`" — a behavioral detail absent from annotations. It does not discuss auth requirements or the reversibility of destructive changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph, but it is front-loaded with the core action and each clause carries distinct information (pause/resume, cadence, name, instrument lock, id source, confirmation). Nothing is wasted, though the run-on semicolon structure is slightly harder to scan than a broken-out list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-param mutation tool with no output schema and 50% schema coverage, the description covers the essential behavioral context an agent needs: the instrument lockout, the id source, and the confirmation flow. Remaining gaps — metricId semantics and consequences of destructive edits — are minor against annotations that already flag destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage across 14 params, the description compensates well by grouping params to effects: enabled false/true for pause/resume, interval/scheduleTime/scheduleTimezone/dayOfWeek as cadence movers, and questions/scorer as the instrument. metricId and adaptiveFollowUps are left largely or wholly unexplained, which keeps it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Edits a series") and then enumerates exactly what is editable: enabled (pause/resume), cadence params, name, follow-up/auto-analyze settings, and the instrument. It also references the sibling prism_series_list for id sourcing and points to creating a new series when the instrument is locked, so an agent can tell it apart from prism_series_create and prism_series_launch_wave.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not rule: the instrument (questions/scorer) is editable only while no wave has fielded, after which the server refuses with `invalid` and the correct move is a new series. It also tells where series ids come from. It stops short of naming alternatives for the pause/resume/cadence paths, leaving those as implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_analyzeRun or refresh a study's analysisADestructiveInspect
Kicks the theme analysis (incremental — reads only responses and interviews since the last run; the previous themes carry forward). Returns immediately with the run's phase; the run continues server-side, so wait a moment and re-read prism_studies_get — findings are fresh once its insights stop reporting an active run. upToDate: true means there was nothing new (a healthy no-op, not an error). Runs against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| reanalyzeAll | No | Full clean-slate re-read of every response (costlier). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint=true annotation: it discloses async server-side execution, the incremental read scope, the polling handshake with prism_studies_get, credit consumption, and two non-obvious return states (upToDate no-op, needs_confirmation). No contradiction with the mutation-oriented annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its incremental nature, then layers the async/polling contract and edge cases without a wasted clause. Dense but every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing return behavior and does so thoroughly (phase, upToDate, needs_confirmation) plus the async completion protocol and cost implication. An agent has everything needed to invoke and correctly follow up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with workspace and reanalyzeAll documented in the schema while studyId and approvalId are undocumented everywhere. The mention of needs_confirmation implicitly gestures at the approval flow but the description adds no direct semantics for those two parameters, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Kicks the theme analysis') and immediately qualifies the scope as incremental, so an agent knows exactly what work is triggered versus a full re-read. It is distinguishable from siblings like prism_studies_get and prism_studies_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete follow-up guidance: it returns immediately, so re-read prism_studies_get and poll until insights stop reporting an active run. It also flags upToDate:true as a healthy no-op and warns that needs_confirmation may be returned. It stops short of explicitly contrasting incremental mode against the reanalyzeAll parameter as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_cutCrosstab a question by a cutARead-onlyInspect
Server-computed banner cut with significance: a target question (scale/number → group means + NPS on 0–10; choice/multi → per-option shares) split by acquisition source or by any single-choice question, each group tested against its complement at 95% (Welch t / two-proportion z). vsRest says higher/lower/not_significant — or not_tested when either side is under the 30-response floor; never present not_tested as 'no difference'. Use this for every 'does X differ by Y?' question instead of eyeballing raw rows.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| cutBySource | No | Cut by acquisition source (?src= tags). | |
| targetIndex | Yes | 0-based index of the question to measure. | |
| cutByQuestionIndex | No | 0-based index of a single-choice question to cut by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the read-only annotations: it discloses the test statistics (Welch t / two-proportion z) at 95%, the 30-response floor, and the exact vsRest value set including not_tested. The explicit warning never to present not_tested as 'no difference' is high-value interpretive guidance an agent could not infer from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability is front-loaded and every clause carries substance (output shapes, test types, floor, interpretation rule) rather than filler. It is dense and somewhat run-on, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the vsRest values and the statistics produced. Gaps remain around studyId semantics and what happens if cutBySource and cutByQuestionIndex are both supplied or both omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the baseline is 3. The description clarifies that the cut comes from acquisition source or a single-choice question, reinforcing cutBySource/cutByQuestionIndex, but adds no syntax or format detail beyond the schema and is silent on the required studyId and on conflict between the two cut parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('server-computed banner cut with significance') and details exactly what a target question yields for scale/number vs choice/multi. It never names a sibling such as prism_studies_segments_compute, so differentiation from the other prism_studies_* analysis tools is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use trigger ('Use this for every "does X differ by Y?" question instead of eyeballing raw rows'), which is stronger than implied usage. It does not, however, name an alternative tool or state when a different prism_studies analysis call would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_deleteDelete a studyADestructiveInspect
Permanently deletes a study with its responses, interviews, analysis, and share links. Right for a draft that won't be fielded or a duplicate; for a live study the user just wants to stop, prefer prism_studies_update closed: true — that keeps the data. Study ids come from prism_studies_list_workspace. May return needs_confirmation — name the study and its response count, then wait.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | Study id (from prism_studies_list_workspace). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true; the description goes well beyond by naming exactly what is destroyed, describing the interactive needs_confirmation return path, and instructing the agent to surface the study name and response count before proceeding. That is operational behavior the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: destruction scope first, then the decision rule with its alternative, then the id source and confirmation protocol. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 3-parameter tool with no output schema, the description covers the destructive consequence, the safe alternative, id provenance, and the confirmation return path. An agent has everything needed to call it responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds genuine meaning by tying the needs_confirmation envelope to the approvalId round-trip and by restating the studyId provenance, giving the agent a workflow context the static schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (permanently deletes a study) and enumerates the cascading scope — responses, interviews, analysis, share links. An agent can distinguish it from prism_studies_update and prism_studies_get without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (a draft that won't be fielded, or a duplicate) and an explicit when-not with a named alternative and the exact parameter to use instead (prism_studies_update closed: true, because it keeps the data). This is the strongest possible routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_draftDraft a feedback study from a nodeBInspect
Generates a short study (5-8 questions probing the node's problem space — respondents never see the idea itself) and creates it as a DRAFT. The user reviews, previews, and opens it for responses from the study page (or via prism_studies_update publish). Runs generation against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| fieldId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic write profile (readOnlyHint=false, destructiveHint=false); the description adds substantial non-obvious behavior: the study is created in DRAFT state, respondents never see the idea, generation consumes inference credit, and the call may return `needs_confirmation`. The cost and confirmation disclosures are genuinely useful. It does not explain what `needs_confirmation` requires from the caller, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the generation action and its output shape, then workflow and cost. Every sentence carries information. Slightly dense with the parenthetical insert, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema and 25% parameter coverage, the description covers state (draft), cost, and the confirmation return path but leaves the remaining parameter semantics unexplained. Adequate minimum viable coverage, with a clear gap on fieldId/approvalId.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% — only `workspace` is documented, while nodeId, fieldId, and approvalId carry no schema description. The description alludes to the node context and hints at an approval flow via `needs_confirmation`, but never explains what fieldId identifies or how approvalId relates to the confirmation return, leaving most parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: generates a short study (5-8 questions probing the node's problem space) and creates it as a DRAFT. The phrase 'probing the node's problem space' implicitly distinguishes it from the sibling draft tools (draft_standalone, draft_from_interviews), but no sibling is named, so an agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides workflow context — user reviews, previews, and opens for responses from the study page or via prism_studies_update publish — but gives no explicit condition for choosing this over prism_studies_draft_standalone or prism_studies_draft_from_interviews. Usage is implied by the nodeId-driven framing rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_draft_from_interviewsDraft a survey from a study's interviewsADestructiveInspect
Qual-first design: drafts a survey GROUNDED in the study's completed interviews — the recurring claims become measurable questions, the tensions become the choices, in the interviewees' own words. Replaces the study's current questions with the draft (nothing fields until publish). Needs at least one completed interview (see prism_interviews_list). An optional steer biases the instrument ('focus on pricing'). Runs generation against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| steer | No | ||
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: it discloses that the draft REPLACES the study's current questions (matching destructiveHint=true) but that 'nothing fields until publish', notes it consumes inference credit, and warns it 'May return needs_confirmation'. These are the kinds of side-effect, cost, and state caveats the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then layers prerequisites, optional steer, cost, and the confirmation caveat in dense, non-redundant sentences. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, credit-consuming, no-output-schema tool, it covers side effects, prerequisites, cost, and the possible confirmation return. The only gap is that the approvalId/confirmation handshake and studyId semantics are not fully spelled out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only workspace is documented), so the description carries extra burden. It explains the steer parameter's intent ('biases the instrument, focus on pricing') and implies the confirmation flow tied to approvalId, but studyId and approvalId semantics remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (drafts a survey from the study's completed interviews) and qualifies the scope ('GROUNDED in completed interviews'). The 'from_interviews' framing and the note that claims become questions clearly separate it from sibling draft tools like prism_studies_draft and prism_studies_draft_standalone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite ('Needs at least one completed interview') and routes the agent to prism_interviews_list, plus explains the optional steer with an example. It never explicitly contrasts with prism_studies_draft or prism_studies_draft_standalone, so the alternative-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_draft_standaloneDraft a standalone studyAInspect
Generates and creates a DRAFT study that isn't tied to any canvas node — brand tracking, workspace-level research, anything you can describe in a sentence. It appears on Prism's Studies page; the user previews and opens it for responses there (or via prism_studies_update publish). Runs generation against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| about | Yes | What the study should probe — a topic, question, or problem space in plain language. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: it consumes inference credit (cost), lands on the Studies page in draft state, and may return a `needs_confirmation` signal. The annotations only cover the safety profile (not read-only, not destructive, closed-world), so these operational details are genuine added value, though the consequence of `needs_confirmation` is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and scope in the first clause, then layers destination, cost, and confirmation behavior. The em-dash aside is dense but the whole block is efficient with no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a credit-consuming mutation with no output schema, it covers where the artifact appears, how it's published, and the confirmation edge case. The missing piece is the relationship between the `needs_confirmation` return and the undocumented `approvalId` parameter, which would help an agent complete the flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% — `about` and `workspace` are documented in the schema, and 'anything you can describe in a sentence' loosely reinforces the free-form `about` input. The description adds no syntax or format detail beyond the schema and leaves `approvalId` unexplained, so the baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generates and creates a DRAFT study') and immediately scopes it with the distinguishing trait 'isn't tied to any canvas node'. This lets an agent separate it from canvas-attached study drafting siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases ('brand tracking, workspace-level research, anything you can describe in a sentence') and points to prism_studies_update for publishing. It doesn't explicitly name the alternative (prism_studies_draft) or state when NOT to use it, but the scope line makes the choice inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_getRead a study + its insightsARead-onlyInspect
One study's questions, response count, open/closed state, and the STORED analysis (summary + themes with strength; insights.activeRun set = an analysis is running right now — wait for it before citing). participantUrl is the live share link to forward when the study is open and one has been minted. Cite theme strengths when reporting results.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description earns credit by disclosing state semantics beyond the annotations: insights.activeRun signals an in-flight analysis that must be awaited, and participantUrl is only present when the study is open and a link has been minted. It says nothing about auth/permissions or pagination, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense but purposeful sentences, front-loaded with the returned payload before the state caveats. Every clause carries information; the parenthetical about activeRun is slightly heavy but justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden of describing the return shape, and it does so thoroughly (fields, state, analysis, share link). The main remaining gap is the absence of any guidance on obtaining a studyId or the workspace requirement, which an agent needs before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 50% of parameters carry schema descriptions, and the description contributes nothing about either parameter. studyId is undocumented in both schema and description, and workspace (which has schema text) is not clarified further. With the coverage gap on the required identifier, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (one study) and enumerates exactly what it returns: questions, response count, open/closed state, stored analysis, and participantUrl. That is far more specific than a generic 'get a study'. It doesn't explicitly differentiate itself from close siblings like prism_studies_results or prism_studies_report, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives operational guidance ('wait for it before citing' when activeRun is set, 'cite theme strengths when reporting results'), which implies usage context. However, it never states when to reach for this tool versus prism_studies_list, prism_studies_results, or prism_studies_analyze, so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_listList a node's feedback studiesBRead-onlyInspect
Feedback studies attached to one Prism node: title, question count, response count, open/closed.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| fieldId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, covering the safety profile. The description adds value by specifying the returned fields (title, question count, response count, open/closed), but says nothing about pagination, ordering, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. It immediately anchors the resource, scope, and returned fields, making it appropriately sized for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter list tool with no output schema and annotations covering safety, the description is serviceable but incomplete. It lists returned fields but omits required-parameter semantics and pagination behavior, which an agent would need for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (workspace is documented; fieldId and nodeId are not). The description implies nodeId through 'attached to one Prism node' but does not explain fieldId or compensate for the undocumented required parameters, leaving the agent to guess their role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('Feedback studies') and scopes it to 'one Prism node', and lists returned fields. This distinctively separates it from the workspace-level sibling (prism_studies_list_workspace), but the description itself lacks an explicit verb and relies on the title ('List') to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The scope 'one Prism node' implies the required context, but no alternatives or prerequisites are named, and no routing advice is given relative to prism_studies_list_workspace or other study tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_list_workspaceList every study in the workspaceARead-onlyInspect
All studies regardless of origin — standalone, canvas-node, and series waves — newest first: title, question count, response count, draft / live / closed state, and the field / node / series it hangs off. The starting point for 'which studies do we have?'; prism_studies_list is the per-node view, prism_research_digest the findings view. Read one with prism_studies_get.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint/destructiveHint/openWorldHint, so the safety profile is covered. The description adds genuine behavioral context the annotations do not: result ordering (newest first), that all study origins are included, and the shape of each returned row. It stops short of describing volume/pagination behavior, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: scope and returned fields front-loaded, then the routing sentence. No filler, and every clause carries selecting information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 usefully enumerates what each row contains (title, question count, response count, state, owning field/node/series). Combined with the sibling routing, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already explains the workspace slug, default-workspace behavior, and API-key exception. The description adds nothing about the parameter, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource+scope: lists ALL studies in the workspace regardless of origin (standalone, canvas-node, series waves), and even names the concrete fields returned. It draws an explicit boundary against prism_studies_list (per-node view) and prism_research_digest (findings view), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames itself as the starting point for 'which studies do we have?' and routes onward: prism_studies_list for per-node, prism_research_digest for findings, prism_studies_get to read one. Both the when-to-use condition and the alternatives are stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_reportWrite a study's report narrativeADestructiveInspect
An AI research analyst writes the report's narrative layer — executive summary, key findings with their numbers, recommendations — from the study's computed record (funnel, per-question aggregates, themes, quotes). Stored on the study; the printable report at the study page renders it above the charts. Runs against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false. Description adds significant value: it runs against inference credit (cost), stores output on the study, and may return needs_confirmation (a possible pause requiring approvalId). This is useful behavioral context beyond annotations. However, it doesn't state whether it overwrites existing narrative or how destructive the operation is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured single paragraph, front-loaded with the core action; each sentence adds information (what, source, storage, cost, possible confirmation).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and only 3 params, the description adequately covers the action, source data, storage location, cost implication, and potential confirmation return. Could note approvalId relationship explicitly, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so description must compensate for undocumented parameters. It doesn't mention studyId, workspace, or approvalId semantics. The mention of needs_confirmation implies approvalId is relevant, but doesn't explain the parameter. Baseline 3 is generous given the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'An AI research analyst writes the report's narrative layer' from the study's computed record, naming the exact components (executive summary, key findings, recommendations). Clearly distinguishes from siblings like prism_studies_analyze (computes the record) and prism_studies_results (returns raw results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by describing the source ('study's computed record (funnel, per-question aggregates, themes, quotes)') and output placement, but does not state when to call this vs prism_studies_analyze or prism_studies_results, nor prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_resultsA study's computed resultsARead-onlyInspect
Everything the Results tab shows, as numbers you can trust without counting raw rows: fielding funnel (opens → starts → completes, median completion time, sources, per-question drop-off), per-question aggregates (scale distributions + means + NPS on 0–10, choice/multi counts, rank first-place + mean ranks, MaxDiff set scores, word frequencies, text samples), and quality flags (speeders, duplicate participant ids). ALWAYS use this for quantitative questions about a study — never tally answers yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| panelRunId | No | Read one synthetic panel run's answers instead of people's (ADR 0083). Synthetic results are never people's — say so whenever you report them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds genuine value by disclosing the computed nature of the payload ('numbers you can trust without counting raw rows') and that it emits quality flags such as speeders and duplicate participant ids, giving the agent confidence about data provenance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence whose clauses each carry payload information, followed by a one-line directive. It is dense and slightly list-heavy but nothing is wasted and the actionable instruction sits at the end for emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only partial parameter coverage, the description compensates by fully enumerating the return payload, which is exactly what an agent needs to decide whether to call it. Only the studyId parameter's semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description says nothing about studyId, workspace, or panelRunId. The schema itself documents workspace and panelRunId well; studyId is self-evident. Nothing is added beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('a study's computed results' / the Results tab) and enumerates the exact content categories returned: fielding funnel, per-question aggregates, quality flags. An agent can tell this apart from sibling read/report tools like prism_studies_report or prism_studies_cut by the quantitative-aggregate framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('ALWAYS use this for quantitative questions about a study') plus an anti-pattern ('never tally answers yourself'), which is real routing guidance. It stops short of naming a sibling alternative for narrative/qualitative questions, so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_segmentsA study's discovered segmentsARead-onlyInspect
The stored k-means segmentation over the study's numeric answers: named segments with size, share, and the distinguishing features (segment mean vs overall). Null when none computed yet — prism_studies_segments_compute discovers them (needs 30+ responses and 2+ numeric questions).
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered; the description adds genuinely new behavior — the null-when-uncomputed state and the fact that the compute sibling requires 30+ responses and 2+ numeric questions. It does not add auth or rate-limit context, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core definition of what the resource is and followed by the return shape and the null/compute escape hatch. No filler, every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so: it spells out segment fields, the null case, and where to go when segments are missing. For a simple two-parameter read tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: 'workspace' is fully documented in the schema while 'studyId' has none. The description mentions no parameters at all, so it does not compensate for the undocumented studyId; studyId is self-evident by name, keeping this at the baseline rather than lower.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('the stored k-means segmentation over the study's numeric answers') and enumerates what is returned (named segments with size, share, and distinguishing features). It is clearly distinguished from the sibling prism_studies_segments_compute, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete condition and routes the agent to the alternative: null when nothing is computed yet, and prism_studies_segments_compute is what discovers them (with its 30+ responses / 2+ numeric questions prerequisites). It stops short of an explicit 'use this to read existing segments' statement, but the routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_segments_computeDiscover a study's segmentsADestructiveInspect
Runs k-means over the study's numeric answers (silhouette-picked k) and names the discovered segments from their computed profiles. Needs 30+ responses and 2+ numeric questions; recompute overwrites. Runs naming against inference credit. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses the algorithm, the overwrite consequence of recomputing, that naming consumes inference credit, and that the call may return a `needs_confirmation` state. These are exactly the behavioral traits an agent needs before invoking an expensive, mutating operation, and none are recoverable from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action, then preconditions, then cost and confirmation caveats. Every clause carries information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers inputs preconditions, mutation semantics, cost, and a possible confirmation return. It could say more about what the discovered segments/names look like on return and how approvalId relates to confirmation, but overall it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: studyId and approvalId carry no descriptions. The description adds no parameter-level meaning, and notably leaves approvalId unexplained even though it ties directly to the `needs_confirmation` flow it mentions. With low coverage, the description should compensate here and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it runs k-means over the study's numeric answers with silhouette-picked k and names the resulting segments. This is far more than a restatement of the name. It does not, however, explicitly distinguish itself from the sibling prism_studies_segments (the likely read/list counterpart), so an agent must infer the compute-vs-read split from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear preconditions are stated: 30+ responses and 2+ numeric questions are required, and recompute overwrites existing results. That is real when-to-use context. It stops short of naming an alternative tool or an explicit when-not-to-use case, so it lands just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_studies_updateEdit, publish, open, or close a studyADestructiveInspect
publish: true takes a draft live (one-way — the participant link starts working). closed toggles whether a live study accepts responses. Also edits the study: title, the questions instrument (whole replacement — read prism_studies_get first; LOCKED once responses exist, the server refuses with invalid and the answer is a new study), adaptiveFollowUps (AI probes on curious answers), the closing chat (endChatEnabled + endChatFocus), completionRedirectUrl for a BYO panel (null clears), and autoAnalyzeTarget (null = manual only). Study ids come from prism_studies_list_workspace. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| closed | No | ||
| publish | No | ||
| studyId | Yes | ||
| questions | No | Replacement instrument (drafts only): ordered list of { type, prompt, options?, … } — read prism_studies_get for the shape. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | ||
| endChatFocus | No | What the closing chat should be about; null clears. | |
| endChatEnabled | No | ||
| adaptiveFollowUps | No | ||
| autoAnalyzeTarget | No | ||
| completionRedirectUrl | No | http(s) URL respondents land on after submitting ({pid} = participant id); null clears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructive/openWorld/not-readOnly; the description adds substantive behavior well beyond them — publish is one-way and starts working the participant link, questions is a whole-replacement that is LOCKED once responses exist (server refuses with `invalid`), null semantics for endChatFocus/completionRedirectUrl/autoAnalyzeTarget, and the possible `needs_confirmation` return. This is rich operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the publish semantics and then moves through the edit surface efficiently; nearly every clause carries information. The dense parentheticals make it slightly hard to scan but nothing is gratuitous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, multi-purpose mutation tool with no output schema, the description covers the impactful fields and the locking/confirmation behaviors an agent must know. Coverage of workspace and approvalId is thin, but the structured schema fills that gap, keeping it close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema description coverage, the description carries much of the load and does so well: it explains what questions replaces, that it needs prism_studies_get for shape, the null-clears behavior for several fields, and endChatEnabled+endChatFocus pairing. It leaves workspace/approvalId unexplained, but workspace is covered by the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a study) and enumerates the concrete mutations it performs: publish, close/open, edit title, replace questions, set adaptive follow-ups, closing chat, redirect URL, and auto-analyze target. It also routes the agent by naming siblings prism_studies_get and prism_studies_list_workspace, so it is distinguishable from the read/list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real when-to-use guidance: 'read prism_studies_get first', the LOCKED-once-responses rule with the explicit answer 'a new study', and where ids come from (prism_studies_list_workspace). It does not, however, contrast this with prism_studies_draft or explicitly state when not to use update at all, so it stops short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_findings_listEverything we know about a research subjectARead-onlyInspect
Cross-instrument findings for one subject (today: a Prism node) — attached feedback studies with response counts + theme counts, and whether desk research exists. (Interviews are study-level now — read them per study with prism_interviews_list.) THE PLACE TO LOOK before proposing new research: cite what already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| subjectId | Yes | Subject id (e.g. a Prism node id). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| subjectType | Yes | Subject type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, closed-world, so safety is covered. The description adds real value beyond them by describing aggregate content (response counts, theme counts, desk-research presence) and a scope caveat that interviews are now study-level. It omits pagination/limits, which is a minor gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the returned content before the caveat and the usage directive, so an agent gets the gist on the first clause. Two nested parentheses make it slightly dense, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return shape and does so concretely (studies, response counts, theme counts, desk-research flag). Combined with rich read-only annotations, it is nearly complete; only pagination and result limits are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so subjectId, subjectType, and workspace are fully documented in the schema itself. The description only implies the subject is a Prism node, matching the enum, and adds nothing on workspace scoping. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope ('Cross-instrument findings for one subject') and enumerates the payload an agent gets — attached feedback studies with response and theme counts plus desk-research existence. It also disambiguates from a sibling by name ('Interviews are study-level now — read them per study with prism_interviews_list').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('THE PLACE TO LOOK before proposing new research: cite what already exists') and routes one class of question away to prism_interviews_list. Both the selection condition and an alternative are spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_add_flowBring a flow into a roomAInspect
Adds a Workbench flow to a room as a member, so people can @mention it and it can work on things with you there. The flow must be shared with the workspace and published. Use it after building a specialist flow for a room's work, or when someone asks for a flow to join. May return needs_confirmation; say which flow and why, and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Workbench flow id. | |
| roomId | Yes | Room id (from rooms_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-destructive, non-open-world write. The description goes well beyond that by disclosing preconditions (flow must be workspace-shared and published) and the human-in-the-loop behavior: it may return a needs_confirmation envelope, and the agent must state which flow and why and wait for approval. That is exactly the extra context the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what it does, then prerequisites, then the approval caveat. Every clause carries information; nothing is repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 work of explaining the one non-obvious return shape (needs_confirmation). All four parameters are covered by the schema. Minor gaps remain: no mention of what happens if the flow is unpublished, or whether adding an already-present flow errors or is idempotent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so flowId, roomId, workspace and approvalId are already fully documented in the schema (including the personal-token workspace rule). The description adds no format, constraint, or default information beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (adds a Workbench flow to a room) and immediately clarifies the effect ('as a member, so people can @mention it'). That framing distinguishes it from sibling mutations like rooms_post or workbench_flows_share_create without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers ('after building a specialist flow for a room's work, or when someone asks for a flow to join') plus hard prerequisites (flow must be shared with the workspace and published). It never names a sibling alternative or a when-not-to-use case, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_createCreate a roomAInspect
Creates a room: a shared space where people work together with you, and the person asking is always in it. Add people by name or email (members of this workspace); private keeps it to them, otherwise everyone in the workspace can open it. opening is your first message in it: why the room exists and the concrete next step, written for everyone in it. When the room continues this conversation, put what they need from it in opening; nothing else carries over. Check rooms_list first so you don't make one that already exists. May return needs_confirmation; say in a sentence what you're making and wait. Then link it by pasting the returned ref.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The room's name. | |
| people | No | Names or emails of workspace members to add. | |
| opening | No | Your first message in the room, in markdown. | |
| private | No | Only its people can see it (default false: the whole workspace can). | |
| folderId | No | A folder it works from (id from workspace_folders_browse). | |
| workspace | No | Workspace slug, for tokens without a default. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-readOnly, non-destructive, non-openWorld. The description adds materially more: the requester is always a member, `private` bounds visibility to the listed people versus workspace-wide, nothing carries over from the originating conversation, and the call may return a needs_confirmation envelope requiring a human pause. That is the kind of behavioral detail an agent cannot infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph with no filler and the core definition front-loaded before the operational rules. It runs long and packs multiple distinct rules into individual sentences, so an agent must read carefully, but every clause earns its place and nothing is repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter creation tool with no output schema, the description covers the gaps that matter: what gets created, who is included, visibility semantics, the confirmation round-trip, and the fact that the returned `ref` should be pasted back to link the room. Remaining params are fully documented in the schema, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely enriches key params: `people` are workspace members identified by name or email, `private` flips visibility from workspace-wide to members-only, and `opening` is framed as the room's purpose plus a concrete next step written for everyone. `folderId` and `workspace` are left to the schema, which handles them adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a room') and immediately defines the resource in domain terms ('a shared space where people work together with you, and the person asking is always in it'), which tells an agent what the object actually is, not just its name. It also names the sibling rooms_list as the pre-check, so it is distinguishable from the other rooms_* tools in the same breath.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Check rooms_list first so you don't make one that already exists.' Explicit continuation rule: when the room continues this conversation, put everything needed into `opening` because nothing else carries over. Explicit confirmation protocol: on needs_confirmation, state what you're making and wait. Both when-to-use and the alternative are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_listList roomsARead-onlyInspect
The workspace's rooms: where groups of people work together with the assistant and flows. Returns each room's id, name, people and flows, linked folders, open sidebar count, and when it last moved. Use it to find the room a user means before rooms_read or rooms_post.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| includeArchived | No | Include archived rooms (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so safety is covered. The description adds real value by disclosing the shape of each returned record (id, name, people, flows, folders, sidebar count, last activity), which matters since there is no output schema. Pagination or result-size behavior is not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The definition of the resource comes first, the returned fields second, and the routing hint last — front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with no output schema, the description covers what the tool returns and when to reach for it, and the schema covers archived filtering and workspace resolution. Only result-volume/pagination expectations are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (workspace, includeArchived) are fully documented in the schema, including the personal-token edge case. The description adds no parameter-level detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (rooms), what a room is conceptually ('where groups of people work together with the assistant and flows'), and enumerates the returned fields. An agent can distinguish this list operation from rooms_read and rooms_post without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to resolve which room a user means before calling rooms_read or rooms_post, naming the alternatives. It omits when *not* to use it — notably that rooms_search exists for keyword-based lookup rather than full enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_postPost into a roomAInspect
Posts a message into a room's stream as the assistant, where everyone in the room will see it. Use it when a user asks you to share something with a room, or when a routine's instruction says to deliver its result to a room other than the one the routine already posts in. Write for the room, not for the person who asked: say what it is and why it's here in the first line. To get someone's attention, write @ and their name as rooms_list shows it; they're told even if they only hear mentions. May return needs_confirmation; summarize the post and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The message, in markdown. | |
| roomId | Yes | Room id (from rooms_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses posting identity (assistant), audience visibility, @-mention notification semantics ("they're told even if they only hear mentions"), and critically the needs_confirmation/approval round-trip the agent must handle. These are operational behaviors an agent could not infer from readOnlyHint/destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and audience, then conditioned usage, then the confirmation caveat. The 'write for the room, not for the person who asked' sentence is stylistic guidance that is useful but slightly beyond the definition's core job.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately covers the confirmation envelope but says nothing about failure modes, rate limits, or whether reposting is safe. For a 4-param write tool whose schema and annotations are already rich, the remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning for `text` (mention syntax via @ plus the name as rooms_list renders it) and for `approvalId` (the confirm-then-resubmit flow from a needs_confirmation envelope). Workspace-scope nuances remain schema-only, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Posts a message into a room's stream") plus the authoring identity ("as the assistant") and audience ("everyone in the room will see it"). That combination cleanly separates it from rooms_read, rooms_search, and comments_create without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggering conditions: a user asking to share something with a room, or a routine instructed to deliver results to a room other than its default. It doesn't name alternatives (e.g., when to post as a comment instead), so not a full 5, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_readRead a roomARead-onlyInspect
What a room has been saying: its catch-up summary (and whether messages have landed since), its sidebars with their outcomes, and the most recent messages as plain lines with who said them. Use it when a user asks what happened in a room, what a group decided, or to catch them up. For older talk, pass before (a message id: the page ahead of it) or from (a time: the page starting then); those return just the messages, with hasEarlier and hasLater. rooms_search finds where something was said. Quote people by name; never present a summary as a decision unless a sidebar settled it.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | An ISO time: return the messages from then on. | |
| limit | No | How many recent messages to return (default 40). | |
| before | No | A message id: return the messages before it. | |
| roomId | Yes | Room id (from rooms_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive/openWorld, so the description focuses on non-obvious behavior: the dual return mode (summary mode vs. just-messages mode with hasEarlier/hasLater) and an interpretive constraint ('never present a summary as a decision unless a sidebar settled it'). It does not state how far back the default summary window reaches or what happens when a room is empty, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payoff (what the agent gets back) before the when-to-use clause and the parameter routing, with zero filler. It is dense and run-on in places, packing return shape, triggers, param modes, sibling routing, and quoting etiquette into one block, but each clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the return-value burden and does so: it names the three payload sections, the hasEarlier/hasLater flags, and message line formatting. Combined with 100% schema coverage of the five parameters, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: `before` is described as 'the page ahead of it' and `from` as 'the page starting then', and it discloses that using either returns only messages with hasEarlier/hasLater rather than the full summary package. That is behavioral coupling the schema does not express. `limit` and `workspace` are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb-plus-resource framing ('What a room has been saying') and enumerates the three things returned: catch-up summary with recency status, sidebars with outcomes, and recent messages with attribution. It explicitly distinguishes itself from rooms_search ('finds where something was said'), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the triggering user intents ('what happened in a room', 'what a group decided', 'catch them up') and the disambiguation rule against the sibling search tool. It also routes the agent within its own parameters: older talk goes through `before` or `from`, which return a different shape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_searchSearch what rooms saidARead-onlyInspect
Searches the messages in the rooms the person can see, or in one room, newest first. Each hit is a line with who said it, when, the room, and the message id. Use it when someone asks what a group said about something, when it was decided, or who brought it up, and the answer may be older than what rooms_read shows. To read around a hit, call rooms_read with that room and before set to a later message id, or from set to a time shortly before the hit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most hits (default 10). | |
| query | Yes | Keywords or a short phrase; websearch syntax works ("exact phrase", -word, or). | |
| roomId | No | Only this room (id from rooms_list). | |
| workspace | No | Workspace slug, for tokens without a default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered and the bar is lower. The description still adds real context: permission-scoped visibility ('rooms the person can see'), newest-first ordering, and the per-hit line format (author, time, room, message id). It does not cover result-volume behavior such as how limit interacts with more matches, which keeps it at a solid but not exceptional 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: scope/ordering/result shape first, then when-to-use, then the follow-up navigation. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the return format precisely (one line per hit with author, timestamp, room, message id) along with sort order and visibility scope. An agent has everything needed to call it and to act on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 limit, query syntax, roomId and workspace, making the baseline 3. The description only loosely reinforces roomId ('or in one room'), while the parameter names it cites (before, from) belong to rooms_read, not this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('searches the messages in the rooms'), plus scope ('the person can see, or in one room'), ordering ('newest first') and result shape. Explicitly separates itself from rooms_read by noting hits may be older than what rooms_read shows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger conditions ('when someone asks what a group said about something, when it was decided, or who brought it up') and names the alternative (rooms_read) with the recency condition that distinguishes them. Also spells out the follow-up path via rooms_read with before/from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rooms_start_agent_workPut agents on something in a roomAInspect
Starts the assistant and flows in a room working on something together in a sidebar: they take turns without a person between each, and the result comes back to the room's stream. The flows must already be in the room (rooms_add_flow). Use it when someone asks for agents to work something out, or to hand a specialist flow a job. Anyone in the room can read along or stop it. May return needs_confirmation; say what they'll work on and who, and wait for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What they should work on, as a clear task. | |
| mode | No | 'moderated' (the assistant picks who speaks) or 'in_order'. Default moderated. | |
| output | No | What to come back with, e.g. 'a one-paragraph recommendation'. | |
| roomId | Yes | Room id (from rooms_list). | |
| flowIds | No | Flows in the room to take part. | |
| maxTurns | No | Most turns before they write up (default 8). | |
| sidebarId | No | Work in this open sidebar instead of opening a new one. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| includeZv1 | No | Whether the assistant takes part too (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, destructive=false, openWorld=true. The description adds real behavioral context beyond that: agents alternate turns unattended, output lands in the room's stream, anyone in the room can read along or stop it, and the call may return a needs_confirmation envelope that requires approval before proceeding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with what happens, then the when-to-use, then the confirmation caveat. Each sentence carries information; slightly dense but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation with no output schema, the description covers the important runtime behaviors: unattended turn-taking, delivery to the room stream, interruption by room members, and the confirmation envelope. It leaves operational details like what a stop does or how the sidebar interacts, but the schema covers the parameter-level specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning on top: 'the flows must already be in the room' clarifies the flowIds source, 'say what they'll work on and who' maps to goal plus flowIds, and the needs_confirmation note explains the role of approvalId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (starts) and resource (assistant and flows in a room) plus the mechanism: agents take turns without a person between, and the result returns to the room's stream. It is clearly differentiated from sibling rooms_add_flow, which it names as a prerequisite rather than an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions: 'when someone asks for agents to work something out, or to hand a specialist flow a job.' It also names the prerequisite (flows must already be in the room via rooms_add_flow). It does not contrast with the neighbouring workbench_flows_run tool, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routines_createCreate a routineAInspect
Create a routine: something you keep doing for the user on a schedule, one turn per run ("every morning, read these forums, add new questions to the Questions table, and post the count in #support"). Each run has full workspace context and your machine where the workspace has machines. Use a routine when nobody but you acts on each run. Use a Task instead (workbench_tasks_create) when a person acts on each item before anything else happens, or the work is a process mapped in Compass. Name in writes the tools each run writes with on its own; other writes wait for approval on every run. A site read_webpage can't get needs routines_set_sites after this. Write the instruction in second person, as a directive to you on a future run. To run a specific built Workbench flow on a schedule, use workbench_flows_schedule instead: a routine runs an instruction, not a flow.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short display name. | |
| roomId | No | With delivery "room": the room to post in (rooms_list gives ids). | |
| writes | No | Tools each run writes with on its own, without asking: the ones the job needs every time, like ["napkin_tables_add_records"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed. | |
| actsFor | No | Visibility: "workspace" (everyone sees it) or "personal" (just the owner). Default workspace. | |
| delivery | No | Where each run's briefing lands (default notification). "room" posts it in a team room for everyone there; pass roomId. The user must be in the room if it's private, and a "personal" routine can post only in a private room. Use it when the user names a room ("…and post it in #claims") or asks from inside one for the room. | |
| interval | No | Plain cadence. Omit when passing recurrence. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| recurrence | No | When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {"freq":"hourly"|"daily"|"weekly"|"monthly"|"yearly","every":N,"times":["HH:MM"],"weekdays":[0=Sun…6=Sat],"monthDays":[1…31,-1=last],"nthWeekdays":[{"nth":1…5|-1,"weekdays":[…]}],"months":[1…12],"minutes":[…],"hours":{"from","to"},"timezone":"<IANA>","starts","ends","skip":["YYYY-MM-DD"]}. Examples: weekdays at 8 → {"freq":"weekly","weekdays":[1,2,3,4,5],"times":["08:00"],"timezone":"America/Chicago"}; the last business day of the month → {"freq":"monthly","nthWeekdays":[{"nth":-1,"weekdays":[1,2,3,4,5]}],"timezone":"…"}; every other Friday → {"freq":"weekly","every":2,"weekdays":[5],"starts":"<a Friday>","timezone":"…"}. null clears it. | |
| instruction | Yes | What to do on each run, as a directive. | |
| scheduleTime | No | Wall-clock "HH:MM" anchor (default 09:00). | |
| scheduleTimezone | No | IANA timezone for the anchor (default UTC). | |
| scheduleDayOfWeek | No | Weekly only: 0=Sunday … 6=Saturday (default Monday). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: the writes list grants unilateral write permission, all other writes require per-run approval, and emails/invites/shares/publishing/schedules/deletes/starting other work always wait even if listed. It also notes the read_webpage -> routines_set_sites caveat. Annotations only say not read-only and not destructive; the description adds the real approval model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core definition and example before the decision routing, with no filler. It is dense and long-ish, but given the tool's complexity and the number of sibling alternatives, most sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter scheduling tool with no output schema, the description covers purpose, alternatives, approval semantics, delivery expectations, and a gotcha about site pages. The remaining recurrence/delivery mechanics are well documented in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds semantic meaning to key params: it explains that 'name in writes' governs autonomous writes and why, and that instruction must be written in second person as a directive for a future run. That is genuine value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (create a routine) and immediately defines what a routine is with a concrete example. It explicitly distinguishes from workbench_tasks_create and workbench_flows_schedule, so an agent can identify it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use rules: routine when nobody but you acts on each run; Task when a person acts on each item; Compass for mapped processes; workbench_flows_schedule for a built flow. Names the alternatives and the conditions that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routines_listList the workspace's routinesARead-onlyInspect
List the assistant's routines — scheduled natural-language instructions run by the assistant. Returns each routine's id, name, instruction, cadence, delivery, enabled state, and last-run outcome. Check this before creating a routine so you don't duplicate one that already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds value beyond that by enumerating the returned fields (id, name, instruction, cadence, delivery, enabled state, last-run outcome), which is the kind of context annotations can't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The resource definition and return fields come first, and the actionable usage instruction is placed at the end where it drives the next decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the fields each routine carries. For a single-optional-parameter read tool this is close to complete; the only minor gap is no mention of result ordering, pagination, or scale limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the workspace parameter's default/override behavior is fully documented in the schema. The description adds nothing about the parameter, which is acceptable at this coverage level but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (the assistant's routines) and even defines the resource as 'scheduled natural-language instructions run by the assistant', which removes ambiguity for an agent that has never seen this domain. It doesn't explicitly contrast with routines_create/routines_update, but the read-only listing intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Check this before creating a routine so you don't duplicate one that already exists.' That is a concrete when-to-use that routes the agent correctly. There is no when-not guidance, but for a harmless list call the risk of misuse is low.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routines_set_sitesSet the sites a routine can reachAInspect
Sets the full list of sites a routine's machine may reach on each run (example.com, or *.example.com for its subdomains; up to 20), for a routine that has to use a site like a person would because read_webpage can't get it. It replaces the list, so read routines_list first (allowedSites) and pass every site to keep. Always waits for approval, and only a workspace admin's approval applies it; for anyone else it says who can. The next run reaches the new list.
| Name | Required | Description | Default |
|---|---|---|---|
| sites | Yes | Every site the routine may reach. | |
| routineId | Yes | Routine id, from routines_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the approval flow ('always waits for approval, only a workspace admin's approval applies it'), the overwrite semantics ('it replaces the list'), and the timing of effect ('the next run reaches the new list'). These are critical behaviors an agent cannot infer from readOnlyHint=false/openWorldHint=true alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does and packs required format, workflow, and approval details into a tight paragraph. Slightly long in the middle clause about using a site 'like a person would,' but essentially every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation with no output schema and full schema coverage, the description covers purpose, format, replacement semantics, approval requirements, and effect timing. The only minor gap is error/failure behavior beyond the approval path, but the definition is otherwise complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value: it shows the format syntax (example.com vs *.example.com for subdomains), reiterates the 20-item cap, and clarifies that sites is a full replacement set ('pass every site to keep').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets the full list of sites a routine's machine may reach') and explains the trigger condition versus read_webpage. It does not explicitly distinguish itself from the similar sibling workbench_tasks_set_sites, leaving a small ambiguity for tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('a routine that has to use a site like a person would because read_webpage can't get it') and the alternative that fails. It also gives a prerequisite workflow ('read routines_list first and pass every site to keep'), so the agent knows both when and how to act.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routines_updateUpdate a routineADestructiveInspect
Update a routine's instruction, cadence, delivery, the writes each run makes on its own, or its enabled switch (pause/resume). Only pass the fields being changed; writes replaces the whole list. Cadence changes recompute the next fire time. When people now act on each item, or it has become a process mapped in Compass, build a Task instead (workbench_tasks_create).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Routine id (from routines_list). | |
| name | No | ||
| roomId | No | With delivery "room": the room to post in. | |
| writes | No | Tools each run writes with on its own, without asking: the ones the job needs every time, like ["napkin_tables_add_records"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed. | |
| enabled | No | ||
| delivery | No | ||
| interval | No | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| recurrence | No | When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {"freq":"hourly"|"daily"|"weekly"|"monthly"|"yearly","every":N,"times":["HH:MM"],"weekdays":[0=Sun…6=Sat],"monthDays":[1…31,-1=last],"nthWeekdays":[{"nth":1…5|-1,"weekdays":[…]}],"months":[1…12],"minutes":[…],"hours":{"from","to"},"timezone":"<IANA>","starts","ends","skip":["YYYY-MM-DD"]}. Examples: weekdays at 8 → {"freq":"weekly","weekdays":[1,2,3,4,5],"times":["08:00"],"timezone":"America/Chicago"}; the last business day of the month → {"freq":"monthly","nthWeekdays":[{"nth":-1,"weekdays":[1,2,3,4,5]}],"timezone":"…"}; every other Friday → {"freq":"weekly","every":2,"weekdays":[5],"starts":"<a Friday>","timezone":"…"}. null clears it. | |
| instruction | No | ||
| scheduleTime | No | Wall-clock "HH:MM" anchor (default 09:00). | |
| scheduleTimezone | No | ||
| scheduleDayOfWeek | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-readOnly, and the description adds real behavioral context beyond them: partial-update semantics, whole-list replacement for `writes`, and the side effect that cadence changes recompute the next fire time. It does not address permission requirements, irreversibility, or how an invalid `id` fails, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the mutation scope front-loaded, followed by the replace-semantics warning, then the alternative. Every clause carries information, though the Task-pivot sentence is a touch rhetorical for a tool definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 14-parameter mutation with no output schema, the description covers the critical unknowns: partial vs full update, list replacement, and schedule recomputation. It leaves out authorization expectations and confirmation/approval flow, though the schema partially documents approvalId.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%. The description compensates for some gaps by explaining `writes` replacement semantics and that cadence fields recompute the fire time, but roughly half the parameters (name, enabled, delivery, interval, instruction, schedule* fields) get no meaning from the description, relying on the schema or on inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (routine) and enumerates the exact mutable surfaces: instruction, cadence, delivery, autonomous writes, enabled switch. An agent can distinguish it from routines_create/routines_list and from workbench_tasks_create without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to pass only changed fields, warns that `writes` replaces the whole list, and names an alternative (workbench_tasks_create) with the conditions that select it: people now act on each item, or it became a Compass-mapped process. Both when-to-use and when-not are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch ZeroWidth docsARead-onlyInspect
Search ZeroWidth product documentation. Returns matching pages with title, slug, public URL, and a query-relevant snippet. Use this when the user asks about a ZeroWidth product (Compass, Workbench, Caliper, Prism, Ledger, Napkin, the assistant), an API behavior, or a policy. No authentication required — the docs corpus is public.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of results. Defaults to 10. | |
| query | Yes | Search query — keywords or natural-language phrase. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the annotations by disclosing that no authentication is required and that the corpus is public — something readOnlyHint/openWorldHint do not convey. However, it says nothing about result ordering, pagination, or behavior when nothing matches, leaving meaningful behavioral gaps for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what it does, then return shape, then when to use it, then the auth fact. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with a fully described schema and annotations, this covers purpose, trigger conditions, return fields, and access requirements. Nothing an agent needs in order to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented inline, so the schema carries the load. The description adds no syntax, ranking, or limit guidance beyond what is already structured; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search ZeroWidth product documentation) and scopes the corpus precisely — public product docs, not workspace content — which separates it from siblings like search_workspace, workbench_kb_search, and compass_pages_search without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the triggering conditions: questions about a named ZeroWidth product, API behavior, or policy. It never names an alternative tool or a when-not-to-use case, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_workspaceSearch the whole workspaceARead-onlyInspect
Finds anything in the workspace in one call — uploaded files (searching the text inside them), folders, Workbench flows, shims, knowledge bases and tasks, Compass pages and changes, Caliper datasets, evals, rubrics, reviews, specs and sources, Ledger entries, Napkin sketches, decks, docs, sheets, diagrams and interfaces. The same search the person uses in Home. Use it FIRST whenever the user mentions something without saying where it lives ('the SOW', 'the dispatch interviews', 'that invoice'). The query is words in any order: each word must appear in the thing's name, its tags, the names of the folders it's filed under, or the text inside it — so 'northwind sow' finds the SOW filed in the Northwind folder, and 'dispatch interview' finds 'Dispatcher interview 1.md'. Results are ranked best first. Each hit carries its id, kind, path (for a link), folderPath (where it's filed, top-down), tags, and a snippet when the words were found inside it rather than in its name — say where a thing lives using folderPath. A file's id feeds workspace_files_read; other ids feed the kind's *_get tool. Pass folderId to search only inside one folder and everything under it. If nothing comes back, try fewer or different words before telling the user it doesn't exist. Results only include what the user can see, and only kinds this token may read.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Words, any order, case-insensitive. Fewer words find more. | |
| kinds | No | Restrict to these kinds (file, folder, flow, page, doc, dataset, …). Omit to search everything. | |
| limit | No | ||
| folderId | No | Only search inside this folder and the folders under it (ids from workspace_folders_browse or a folder hit). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnly/non-destructive/closed-world, the description adds substantial behavior the annotations cannot express: AND-of-words matching across name, tags, folder names and body text, best-first ranking, per-hit fields (id, kind, path, folderPath, tags, snippet), recursive folderId scoping, and permission-based result filtering ('only what the user can see, and only kinds this token may read').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the 'use it FIRST' rule are front-loaded, and every later sentence adds either query semantics, return shape, or id-chaining guidance. The long enumeration of object kinds is the one place it runs heavy, though it doubles as scope documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies what an agent needs about results (fields, ranking, snippet meaning, using folderPath to say where a thing lives) and how to chain ids into workspace_files_read or the kind's *_get tool. Permissions, empty-result handling, and workspace/scope limits are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, but the description still adds real meaning: it explains what the q words are matched against (name, tags, parent folder names, inner text) and gives worked examples ('northwind sow' finds the SOW in the Northwind folder). It also clarifies folderId is recursive, matching the schema, and leaves well-documented kinds/limit/workspace to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and scope: 'Finds anything in the workspace in one call', then enumerates the object kinds covered (files, folders, flows, shims, knowledge bases, tasks, pages, datasets, evals, rubrics, reviews, specs, sources, Ledger entries, Napkin artifacts). This clearly separates it from focused siblings like compass_pages_search, search_docs, workbench_kb_search, and rooms_search, which each cover one kind.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger condition: 'Use it FIRST whenever the user mentions something without saying where it lives', backed by three concrete user-phrase examples. It also gives a recovery procedure when results are empty ('try fewer or different words before telling the user it doesn't exist'), which is when-to-use guidance beyond the happy path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_executions_getInspect a flow's executions (debug traces)ARead-onlyInspect
The flow's stack traces: recent executions with per-node timelines — what each node received, produced, how long it took, and the exact error when one failed. USE THIS when a run misbehaves instead of guessing: read the failing node's inputs/error, then propose a fix (workbench_flows_edit_text) grounded in what actually happened. Pass executionId to inspect one run, or just flowId for the most recent runs. Node inputs/outputs are truncated for transport — the full record is in the flow's dev drawer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent executions (default 3, max 10). Ignored when executionId is set. | |
| flowId | Yes | Workbench flow id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys (workspace is intrinsic). | |
| executionId | No | Specific execution to inspect. Omit for the latest runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint/openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior the annotations don't: node inputs/outputs are truncated for transport and the full record lives in the flow's dev drawer. That's an important expectation-setting detail for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then the when-to-use trigger, then parameter selection, then the truncation caveat — each sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates well by describing the return shape (per-node timelines, inputs/outputs, errors) and its truncation limit. Combined with 100% schema coverage and read-only annotations, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the schema already documents limit's default/max and its being ignored when executionId is set, plus the workspace auth nuance. The description's 'Pass executionId to inspect one run, or just flowId for the most recent runs' adds only marginal selection guidance beyond what the schema states, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (inspect a flow's executions) and enumerates exactly what comes back: per-node timelines, inputs, outputs, durations, and the failing error. This is clearly distinguishable from siblings like workbench_flows_get or workbench_flows_run, which manage or trigger flows rather than return execution traces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger — 'USE THIS when a run misbehaves instead of guessing' — and routes the agent to the follow-on tool (workbench_flows_edit_text) for fixing. It also clarifies executionId vs flowId selection. It lacks an explicit 'when not to use' or a comparison against trace-reading siblings, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flow_authoring_guideWorkbench flow-authoring guideARead-onlyInspect
READ THIS FIRST before writing or editing any raw flow orchestration JSON. Covers the document shape, the settings-vs-input-ports rule (temperature, max_tokens, tools, response_format are PORTS, not settings — constants reach ports via value nodes), exact link format, plugin links, and three complete worked examples.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower. The description usefully adds that it is a preparation prerequisite and enumerates the specific rules and examples it contains, which is real behavioral context for an agent. It does not, however, describe output format or size, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the imperative 'READ THIS FIRST,' then a compact inventory of covered topics. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and annotations that already carry the safety profile, the description supplies the essential detail an agent needs: when to consult it and what it teaches. Minor gap is the absence of any hint about the guide's own return shape, though that is not obligated without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter count is zero, so the baseline is 4. No parameters need explaining and none are misrepresented; the description focuses entirely on content, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (the flow-authoring guide / orchestration JSON format) and enumerates its exact contents (document shape, ports rule, link format, plugin links, worked examples). It is clearly distinguishable from sibling tools like workbench_flows_scaffold or workbench_node_catalog_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'READ THIS FIRST before writing or editing any raw flow orchestration JSON.' The trigger condition and sequencing are unambiguous, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_attach_knowledge_baseGive an agent flow a knowledge base to searchAInspect
Attaches a knowledge base to an AGENT flow's draft, the same way picking it in the agent editor does: a docs knowledge base becomes a search tool the model calls when a question needs it; a tabular one also puts its tables in the prompt and adds a query tool. The flow needs a system prompt (scaffold it with one). Attaching one that's already there changes nothing. Do it BEFORE workbench_flows_publish: a published version is what interfaces and schedules run, so attach, try it with workbench_flows_run, then publish — and if something already pins an older version (an interface grant), re-grant the new version. Tell the model in its system prompt what the knowledge base holds and when to search it. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | The agent flow, from workbench_flows_scaffold or workbench_flows_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| knowledgeBaseId | Yes | The knowledge base id, from workbench_kb_create or workbench_kb_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnly=false, destructive=false, this description carries real additional context: attaching an already-present KB is a no-op (idempotency), the operation may require a confirmation round-trip, and it describes the actual runtime effect on the model's tools and prompt. No contradiction with the annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its two behavioral modes, then workflow ordering. Slightly dense as one paragraph and the interface re-grant aside is a bit of a tangent, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description surfaces the one return value that matters operationally (needs_confirmation) and pairs it with the approvalId parameter, plus precondition and ordering. An agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds meaning beyond the schema by explaining what the knowledgeBaseId choice entails (docs vs tabular behavior) and by tying approvalId to the needs_confirmation return. It stops short of describing workspace semantics, which the schema already handles well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (attach a knowledge base to an AGENT flow's draft) and immediately explains the two distinct behaviors depending on KB type: docs KB becomes a search tool, tabular KB injects tables into the prompt plus a query tool. It distinguishes itself from siblings by naming workbench_flows_publish and workbench_flows_run, and from the workbench_kb_* family by scoping to flow attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing: attach BEFORE publish, then try it with workbench_flows_run, then publish; plus the exception path (re-grant a newer version to anything pinning an older one, e.g. an interface grant). It also states a precondition (flow needs a system prompt, scaffold it) and multi-call mechanics (needs_confirmation / approvalId).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_deleteDelete a Workbench flowADestructiveInspect
Deletes a flow. Its schedules stop, guest share links die, and evals targeting it can no longer run (their binding shows flowOk: false) — check caliper_flow_performance for evals and workbench_flows_schedules_list before proposing, and prefer workbench_flows_update with archived: true when the user just wants it out of the way. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id, from workbench_flows_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, but the description goes far beyond that: it enumerates the concrete cascade — schedules stop, share links die, evals can no longer run and show flowOk: false — and discloses the needs_confirmation return. This is exactly the destructive-side-effect context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the cascade effects, then the pre-check and alternative guidance, closing with the return caveat. Dense but every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool, the description supplies the cascade consequences, the two sibling pre-checks, the safer alternative, and the confirmation protocol. Nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so flowId, workspace, and approvalId are already fully documented in the schema. The description adds the needs_confirmation/approvalId linkage in the return note but does not enrich the individual parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Deletes) and resource (a flow), and immediately distinguishes itself from the sibling workbench_flows_update by naming the archive alternative. An agent can tell this apart from workbench_flows_update and workbench_flows_schedules_delete without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: prefer workbench_flows_update with archived: true when the user just wants it 'out of the way', and points at caliper_flow_performance and workbench_flows_schedules_list to check before proposing. Names both the alternatives and the conditions selecting them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_edit_textSurgically edit text inside a flowADestructiveInspect
Applies ONE precise text replacement to a flow's DRAFT orchestration — Edit-tool semantics: find must be the EXACT current text, copied character-for-character from workbench_flows_get, and must occur exactly once anywhere in the flow (system prompts, node settings, metadata, a node's type). find is text inside ONE value, not JSON: to change a model, find the model slug alone (anthropic-claude-haiku-4-5) and replace it with another llm slug from workbench_node_catalog_get. It can't add or remove nodes or links. Zero or multiple matches return an error instead of guessing. This is the improvement primitive: check receipts first with caliper_flow_performance, cite the run id in note, apply the edit after approval, then re-run the eval with caliper_evals_run and report the score delta — never claim improvement without the before/after. Edits land on the draft only; the published version changes when someone publishes (workbench_flows_publish, after the user has seen the result). May return needs_confirmation — show the user the exact find/replace diff and wait.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | EXACT current text (≥3 chars), copied verbatim — never reconstructed from memory. | |
| note | Yes | Why this edit. Cite eval run ids when it follows a measurement (e.g. 'refund answers scored 1/5 on accuracy in run cer_abc — adds the manager-approval rule'). Lands in the audit log. | |
| flowId | Yes | Flow to edit. | |
| replace | Yes | Replacement text. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation/safety profile is known. The description nonetheless adds real context beyond them: edits land on the draft only and publishing is a separate step, zero/multiple matches error rather than guess, and a `needs_confirmation` envelope may require showing a diff and waiting. That is useful behavioral detail layered on top of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and edit-tool semantics. The sentence count is high, but nearly every sentence carries constraint or workflow info that isn't repeated elsewhere; the density is slightly sprawling but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a mutation tool that can return a confirmation envelope, the description is complete enough for an agent to call it correctly: sourcing the find text, uniqueness constraints, draft-vs-published effects, and the approval/re-run loop are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics: `find` must be exact text copied character-for-character from workbench_flows_get, must occur exactly once, is text inside a single value rather than JSON, with a concrete model-slug example. This goes beyond the schema's own parameter text and compensates for any inference an agent might otherwise make.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: applies ONE precise text replacement to a flow's DRAFT orchestration. It is clearly distinguished from structural siblings like workbench_flows_update by explicitly saying it can't add or remove nodes or links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context (the improvement primitive), the ordering of steps (check caliper_flow_performance, cite run id, apply after approval, re-run caliper_evals_run), and points to workbench_flows_get for sourcing the exact text. Alternatives and exclusions are both named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_forkFork a public flow into the workspaceAInspect
Copies a PUBLIC flow from another workspace (a template) into this one as a new draft the user owns. Identify it by its flowUuid (the id on Workbench's public template pages and in workbench_flows_get output); optionally pin which published version to copy. Flows already in this workspace can't be forked — open them instead. Counts toward the plan's flow cap. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowUuid | Yes | The source flow's public uuid. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| forkedFromVersion | No | Published version label to copy. Default: the latest published. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses meaningful behavior: the result is a draft owned by the user, forking consumes the plan's flow cap, and the call may return needs_confirmation (which the approvalId parameter then resolves). This is exactly the kind of mutation context an agent needs and that annotations alone do 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly-packed sentences, front-loaded with the core action before constraints, provenance, cap cost, and the confirmation hint. Every sentence carries non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with annotations covering the safety profile and a fully documented schema, this covers ownership, cost (flow cap), the confirmation branch, and the invalid-input case. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description adds real value by clarifying the provenance of flowUuid and that forkedFromVersion optionally pins which published version is copied. It does not elaborate on workspace/approvalId semantics beyond the schema, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — copying a PUBLIC flow from another workspace into this one as a new draft — plus the scope constraint (cross-workspace template). It is immediately distinguishable from siblings like workbench_flows_get, workbench_flows_list, and workbench_flows_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use (public flow from another workspace) and an explicit when-not ("Flows already in this workspace can't be forked — open them instead"), which routes the agent away from a misuse of this tool. It also points to where the required identifier comes from (public template pages and workbench_flows_get output).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_getRead one Workbench flowARead-onlyInspect
One flow. Default view: summary lists its nodes and links so you can pick one; view: node with a nodeId returns that node's full settings and prompt — read THAT before workbench_flows_edit_text, and copy find text from it character-for-character, never from memory. view: full returns the whole orchestration body.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | `summary` (default): the flow's fields plus one line per node (id, type, label, and how long its prompt is) and the links — enough to pick a node. `node`: the full settings of one node (pass nodeId) — what you need before workbench_flows_edit_text. `full`: the whole orchestration body; large. | |
| flowId | Yes | Flow id. | |
| nodeId | No | With view `node`: which node. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys (workspace is intrinsic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: what each view returns, that full is large, and the operational warning to copy `find` text character-for-character from the node view rather than from memory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the scope ('One flow') and then the routing guidance. Every clause carries actionable content — no filler, no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe returns, and it does: summary yields fields plus one line per node and links, node yields full settings and prompt, full yields the orchestration body. Workspace handling and error behavior live in the schema, so this is nearly complete, missing only edge-case caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the view modes and the nodeId pairing, which the enum and property descriptions already document; it adds little parameter detail the schema doesn't already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening 'One flow' plus the per-view breakdown makes clear this retrieves a single Workbench flow, and the view semantics (nodes/links, one node's settings, whole orchestration body) pin down what is returned. It reads as retrieval rather than a sibling like workbench_flows_list, but the verb is implied rather than stated, so it stops short of a crisp 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes exactly which view to use and when: default summary to pick a node, `view: node` + nodeId before workbench_flows_edit_text, `view: full` for the whole body. It names the dependent sibling (workbench_flows_edit_text) and the condition that selects this tool over it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_listList Workbench flowsARead-onlyInspect
Lists every flow in the active workspace the caller can see. Returns summaries (id, name, visibility, updatedAt) — fetch one with workbench_flows_get for the full orchestration body.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys (workspace is intrinsic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, non-destructive, closed-world profile, so the bar is lower; the description still adds real value by disclosing the visibility scoping (only flows the caller can see) and the summary-level nature of results. Pagination or result-limit behavior is not mentioned, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler. The scoping statement comes first and the routing hint second, which is the right front-loading order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 names the returned fields (id, name, visibility, updatedAt) and points to the get tool for the full body, which covers the main agent questions. Only result-set size/pagination behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (`workspace`) whose schema description is fully detailed, covering token-type behavior and overrides. The description adds nothing about it, relying entirely on the schema. Baseline 3 is correct when schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (every flow) with scope (active workspace the caller can see), and explicitly names the sibling `workbench_flows_get` as the detail counterpart. An agent can separate this discovery tool from the dozens of other workbench_flows_* siblings at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly implies use this for enumeration and `workbench_flows_get` when the full orchestration body is needed, which is explicit alternative routing. It stops short of stating when-not to use it (e.g., when the id is already known) or any paging guidance, so it is strong but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_publishPublish a Workbench flow versionADestructiveInspect
Snapshots the flow's current DRAFT as a named published version — the version schedules (workbench_flows_schedule), guest share links (workbench_flows_share_create), public-API runs, and 'published'-stage evals execute. The draft keeps evolving after this; runs on the published side don't change until the next publish. Publishing does NOT run the flow, but any eval set to runOnPublish starts a run (that spends credit — mention it when one exists). Refused when the draft hasn't been run since it last changed: try it first with workbench_flows_run on a few real questions, including one it should decline, and read the answers. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | What changed — a commit message. | |
| flowId | Yes | Flow to publish. | |
| untried | No | true only when the person asked to publish this draft without trying it first. | |
| version | Yes | Version label, e.g. '1.0.0' or '2026-09-04'. Re-using a label retags it to this snapshot. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructive=true, but the description goes well past that: it explains that the draft keeps evolving while the published snapshot stays frozen, that publishing does NOT execute the flow, that runOnPublish evals spend credit, that refusal occurs for an untried draft, and that a `needs_confirmation` response is possible. These are exactly the side effects an agent must know before invoking a publish.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and effect, then prerequisites and side effects. Dense with parentheticals (e.g., the credit-spend aside) which slightly reduce scannability, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description covers preconditions, non-obvious side effects, the confirmation flow, and the refusal path. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are documented in the schema, including note, untried, version retagging, workspace scoping, and approvalId. The description adds workflow context around `needs_confirmation` but does not explain the `untried` flag or version label semantics beyond what the schema already says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Snapshots the flow's current DRAFT as a named published version') and immediately clarifies the scope of what that version governs — schedules, share links, public-API runs, evals. An agent can distinguish this from workbench_flows_run, workbench_flows_update, and workbench_flows_schedule without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the precondition (draft must have been run since last change; otherwise refused), prescribes the alternative to try first ('workbench_flows_run on a few real questions, including one it should decline'), and notes the eval cost side effect. This is when/when-not/alternatives guidance in full.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_revisions_listList a flow's versions (publish history)ARead-onlyInspect
The flow's revision history, newest first: published versions carry a version label and note; entries with version null are draft autosaves. Use it to answer 'is this published?' (any entry with a version), to find a revision id for caliper_evals_create's flowRevisionId, or to see when the draft last changed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Entries to return, default 20. | |
| flowId | Yes | Flow id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| publishedOnly | No | true = only labeled published versions (default false). |
TDQS
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 real behavioral context the annotations cannot: newest-first ordering, and the semantic distinction between entries carrying a `version` label versus null-version draft autosaves. It stops short of describing page size or truncation behavior, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the return shape and ordering before the use cases. Every clause earns its place; nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the burden of explaining the return shape, and it does so for the key fields (version label, note, null-version drafts) and ordering. It leaves the remaining entry fields and result-size behavior implicit, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interpretive value by explaining what a 'labeled published version' is, which is exactly what makes the publishedOnly flag meaningful. It says nothing extra about workspace or limit, so it is above baseline without being complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('The flow's revision history, newest first') and immediately scopes it to publish history, distinguishing it from siblings like workbench_flows_get and workbench_flows_list. An agent can tell what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three explicit when-to-use cases — checking publish state, sourcing a revision id for caliper_evals_create's flowRevisionId, and seeing when the draft last changed — including a named sibling tool and the parameter it feeds. This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_runRun a Workbench flowAInspect
Execute a flow and return its outputs synchronously. Runs the draft by default; pass source:"published" (optionally a version) to run the live published version. Spends workspace LLM budget, bounded by the token's cost cap. input is the flow's input envelope, e.g. {"kind":"chat","messages":[…]} or {"kind":"form","values":{…}}.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | Flow input envelope (RunFlowInput). Omit for a flow that needs none. | |
| flowId | Yes | Flow id to run. | |
| source | No | Which version to run. Default: draft. | |
| version | No | Published version label (only with source:"published"). | |
| timeoutMs | No | Max runtime in ms (also the hard cost ceiling). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. Ignored for workspace API keys. | |
| approvalId | No | Re-call with the approvalId from a needs_confirmation response after the user approves. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true but say nothing about cost; the description adds that it spends workspace LLM budget bounded by the token's cost cap and runs synchronously. That is genuine context beyond the structured fields, though side effects, idempotency, and the needs_confirmation/approval path are not surfaced here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action before the source-selection and input-format details; every sentence carries information. Slightly dense in the final clause but no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with no output schema, it covers execution mode, source selection, cost implications, and input format. The main gap is that return values are only described as 'its outputs synchronously', leaving the response shape underspecified without an output schema to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description adds concrete meaning by giving example input envelope shapes ({"kind":"chat","messages":[…]} / {"kind":"form","values":{…}}) and clarifying the draft-vs-published default for source/version. This goes beyond restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a flow and return its outputs synchronously'), which clearly separates it from read-style siblings like workbench_flows_get or workbench_flows_list. It does not explicitly name an alternative tool, so it falls short of the 5-level sibling differentiation, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that draft runs by default and that source:"published" (with optional version) runs the live version, which is useful conditional guidance. However, it never states when to prefer this over adjacent tools such as workbench_flows_schedules_run_now or caliper_evals_run, leaving usage primarily implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scaffoldScaffold a first-draft Workbench flowAInspect
Creates a runnable first-draft flow from a spec you author: pick the simplest pattern that fits (classifier for read-and-bucket, structurer for transform/extract/draft-for-review, agent for genuinely conversational), write a production-quality system prompt grounded in what the user told you, and mark anything stubbed with [STUB: ...] markers plus stubNotes. The draft opens in Workbench's simple editor at /w//flows/ — give the user that path. May return needs_confirmation; show the user what you're proposing and wait for their approval, then re-call with the approvalId. When the draft comes from a Compass change, pass its opportunityId so the flow and the change point at each other (Compass shows 'Open in Workbench'; the flow shows where it came from). Then: workbench_flows_run to try it, workbench_flows_publish when it's ready for schedules and share links.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Pattern editor the draft opens in. Pick interviewer for conversations that LEARN something from a person (research calls, intake, retros) — pair it with workbench_flows_share_create so non-account humans can talk to it. | |
| model | No | The model node slug the draft runs on, from workbench_node_catalog_get, that the workspace allows. For a classifier, a `decision` entry (Jev, Kev, Solar Decide); defaults to TypeSafe: Jev Latest. Otherwise an `llm` entry (e.g. an OpenAI, Anthropic, or Google model); defaults to Claude Haiku 4.5. Set it here rather than editing the flow afterwards. | |
| flowName | Yes | Imperative + specific, ≤80 chars. | |
| stubNotes | No | What's stubbed / missing / worth wiring next. | |
| variables | No | agent / interviewer: types and descriptions for the {{tokens}} in systemPrompt. Every {{token}} becomes a variable on its own (the test pane and scenarios list it, the app fills it per user at run time); pass this only to set a type other than string or say what fills it. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| categories | No | classifier only: 2-12 buckets. The classifier asks the systemPrompt as one pick-one question with these as the options, and returns `values.category` plus `answers.category` (probabilities and confidence). | |
| description | No | 1-2 sentences: what it does, where it fits. | |
| systemPrompt | No | The draft's behavior — production-quality first attempt with [STUB: ...] / [FILL IN: ...] markers where reality is missing. Required for structurer and classifier. Leave it out of an agent to get the bare model with no instructions (a 'promptless' agent). | |
| opportunityId | No | Compass change (from compass_opportunities_list) this draft implements. Sets the flow ↔ change link; refused when the change already has a draft. | |
| inputDescription | No | What the flow's single input carries. | |
| responseSchemaJson | No | structurer only: the output JSON Schema, JSON-encoded as a string (object root, required fields, additionalProperties false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell us this is a non-read-only, non-destructive, non-open-world write. The description adds real behavioral context beyond that: a possible `needs_confirmation` response requiring approvalId re-call, the fact that opportunityId is refused when a change already has a draft, and the returned editor path to surface to the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action before branching into pattern choice, stubbing, user-facing path, approval flow, and next steps. Dense but nearly every sentence carries actionable instruction; slightly long and could be split, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter creation tool with no output schema, the description covers the return semantics (editor path, needs_confirmation), the approval loop, the cross-tool link, and the follow-on tools. Nothing an agent needs to call it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter workflow meaning the schema can't convey: approvalId is only for a re-call after needs_confirmation, and opportunityId creates the bidirectional Compass link. That is genuine value over the per-parameter schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a runnable first-draft flow from a spec you author') and immediately scopes it against the update/create siblings by describing it as a first-draft generator. The pattern-selection guidance (classifier/structurer/agent/interviewer) further pins down exactly what kind of artifact is produced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: 'classifier for read-and-bucket, structurer for transform/extract/draft-for-review, agent for genuinely conversational.' It also routes the agent forward to workbench_flows_run and workbench_flows_publish, and explains the needs_confirmation re-call path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scenarios_createSave a scenario for a flowAInspect
Saves a named scenario: values for the flow's variables, e.g. one demo customer. It shows in the test pane's Scenarios menu, and Caliper evals can run as it. Use the person's details from what the user shared (a CRM screenshot, a profile) and say which ones you made up. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id. | |
| values | No | Values by variable name, e.g. { member_first_name: "Lexi", plan_type: "Platinum" }. Names come from workbench_flows_scenarios_list's `variables`; a name the flow doesn't have is left out and reported back. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scenarioName | Yes | What it's called in the menu, e.g. 'Lexi Taylor, Platinum'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-destructive/openWorld=false, and the description adds meaningful behavioral context beyond them: the scenario surfaces in the test pane's Scenarios menu, Caliper evals can execute as it, and the call 'May return needs_confirmation' (matching the approvalId param). It stops short of explaining the confirmation round-trip 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core action, then downstream visibility and the sourcing/confirmation notes. No filler, though the sourcing instruction is somewhat tangential to invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-destructive write tool with no output schema, the description covers what gets created, where it surfaces, and the implicit confirmation step. Combined with the fully documented schema, an agent has enough to call it correctly; only the approval cycle could be spelled out further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself documents all five parameters richly (flowId, values, workspace, approvalId, scenarioName). The description paraphrases scenarioName/values but adds no syntax or format detail beyond what the schema already carries, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Saves a named scenario: values for the flow's variables,' and clarifies conceptually what a scenario is ('one demo customer'). It doesn't explicitly name its siblings (scenarios_update/list/delete), but the create intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real workflow guidance ('use the person's details from what the user shared... and say which ones you made up') but that is about sourcing values, not about when to choose this tool over scenarios_update or scenarios_list. Usage context is implied rather than an explicit when/when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scenarios_deleteDelete a flow's scenarioADestructiveInspect
Deletes one scenario. A design session running as it goes back to no scenario. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scenarioId | Yes | Scenario id, from workbench_flows_scenarios_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare destructiveHint=true, the description adds real value beyond them: it discloses the side effect that a running design session reverts to no scenario, and it warns that the call may return needs_confirmation, implying a two-phase approval flow. It stops short of stating whether deletion is reversible or what happens to dependent data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three very short sentences, with the core action front-loaded and side effects following. The phrasing of the second sentence ('A design session running as it goes back to no scenario') is slightly awkward, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool whose annotations already carry the safety profile and whose schema fully documents parameters, this covers the essentials: what is deleted, its effect on running sessions, and the confirmation return. Missing only reversibility/dependency details, which are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including approvalId's role in the confirmation flow. The description only loosely connects to those fields via 'needs_confirmation', so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Deletes one scenario"), which cleanly distinguishes it from the sibling create/update/list scenario tools. It does not explicitly name the alternatives, but the delete action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to delete versus update or reset a scenario, nor any prerequisites (e.g., required scope or workspace rules). The only contextual hint is the confirmation behavior, which is about execution mechanics rather than usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scenarios_listList a flow's variables and scenariosARead-onlyInspect
A flow's variables (each {{token}} in an agent's prompt, with its type) and every saved scenario with its values. Read this before creating or updating a scenario, so the values use the flow's real variable names.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id, from workbench_flows_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description only needs to add context. It does: it explains that variables are {{token}} placeholders in agent prompts with types, and that the read is a prerequisite for writes. It does not mention pagination or result size limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The content summary comes first and the usage instruction second, so the most actionable information is neither buried nor repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of describing returns — and it does, enumerating both halves of the payload (variables and scenarios with values). Combined with 100% schema coverage on inputs and clear annotations, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (flowId, workspace) are fully documented in the schema, including workspace-token nuance. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource set returned: a flow's variables (with their {{token}} syntax and types) plus every saved scenario and its values. That is specific enough to distinguish it from the sibling scenarios_create/update/delete tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition and ordering rule: 'Read this before creating or updating a scenario,' naming the alternatives by function. The agent knows both when to call it and which tools it must precede.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scenarios_updateChange a flow's scenarioADestructiveInspect
Renames a scenario or changes its values. values MERGES into what's saved: pass only the variables that change, and null to clear one. Get the scenarioId from workbench_flows_scenarios_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id. | |
| values | No | Values by variable name, e.g. { member_first_name: "Lexi", plan_type: "Platinum" }. Names come from workbench_flows_scenarios_list's `variables`; a name the flow doesn't have is left out and reported back. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scenarioId | Yes | Scenario id, from workbench_flows_scenarios_list. | |
| scenarioName | No | New name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (destructiveHint=true, readOnlyHint=false). The description goes well beyond that with the critical merge semantics ('pass only the variables that change'), the null-clears-a-variable rule, and the fact that the call may return needs_confirmation, which explains why an approvalId parameter exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying a distinct fact (what it does, how `values` behaves, where the id comes from, and the confirmation possibility). Zero padding and the key mutation semantics are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters covered 100% by the schema and no output schema, the description supplies the missing behavioral pieces (merge/clear semantics, confirmation flow) for a destructive mutation tool. It stops short of detailing what the response payload looks like on success, but nothing required to call it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: that `values` merges rather than replaces and that a null value clears a variable. That materially changes how an agent should populate the nested object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb pair ('Renames ... or changes its values') against a clearly identified resource (a scenario), which cleanly separates it from the sibling create/delete/list scenario tools. An agent can identify exactly what this call mutates 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete prerequisite ('Get the scenarioId from workbench_flows_scenarios_list'), which is genuinely useful routing information. However, it never states when to prefer this over scenarios_create, or when a rename is inappropriate, so usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_scheduleSchedule a Workbench flowAInspect
Set a specific built flow to run automatically on a cadence — the deterministic counterpart to a routine. Each run executes the flow's latest PUBLISHED revision with the fixed input envelope and routes the output per delivery. USE THIS when the user wants a flow they've built to run on a schedule ("run my digest flow every morning"). Do NOT create a routine for this — a routine runs a free-form instruction, not a built flow. The schedule runs the PUBLISHED flow, so the flow must be published (check workbench_flows_revisions_list; publish with workbench_flows_publish if it isn't). input is fixed for every run, so the flow itself should fetch anything time-varying at run time. Manage existing schedules with workbench_flows_schedules_list / workbench_flows_schedules_update.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Fixed input envelope every run executes with — {"kind":"chat","messages":[…]} or {"kind":"form","values":{…}}, the same shape workbench_flows_run takes. Constant across runs. | |
| label | No | ||
| flowId | Yes | Flow to schedule (id from workbench_flows_list). | |
| delivery | No | ||
| interval | No | Plain cadence: hourly, daily, or weekly. Omit when passing recurrence. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| recurrence | No | When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {"freq":"hourly"|"daily"|"weekly"|"monthly"|"yearly","every":N,"times":["HH:MM"],"weekdays":[0=Sun…6=Sat],"monthDays":[1…31,-1=last],"nthWeekdays":[{"nth":1…5|-1,"weekdays":[…]}],"months":[1…12],"minutes":[…],"hours":{"from","to"},"timezone":"<IANA>","starts","ends","skip":["YYYY-MM-DD"]}. Examples: weekdays at 8 → {"freq":"weekly","weekdays":[1,2,3,4,5],"times":["08:00"],"timezone":"America/Chicago"}; the last business day of the month → {"freq":"monthly","nthWeekdays":[{"nth":-1,"weekdays":[1,2,3,4,5]}],"timezone":"…"}; every other Friday → {"freq":"weekly","every":2,"weekdays":[5],"starts":"<a Friday>","timezone":"…"}. null clears it. | |
| scheduleTime | No | ||
| scheduleTimezone | No | ||
| scheduleDayOfWeek | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description only needs to add context, which it does: it discloses the hard prerequisite that the flow must be published, that each run uses the latest published revision with a fixed input envelope, and that output is routed per `delivery`. It omits the needs_confirmation/approval flow implied by the approvalId parameter, which is left entirely to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the when-to-use rule, then the prerequisite, then parameter guidance — a sensible order with no filler. It is dense and long, but nearly every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema, the description covers what an agent needs to call it correctly: the required published state, sibling routing, and the semantics of the two required params. Gaps remain around the two scheduling modes (interval vs recurrence), delivery routing choices, and the approval-id confirmation loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 55%, so the description must compensate, and it does for the important parameters: it explains that `input` is a fixed envelope matching workbench_flows_run's shape and that the flow should fetch time-varying data at run time, and that `delivery` routes output. It adds little for label, scheduleTime/scheduleTimezone/scheduleDayOfWeek, or the interval-vs-recurrence split beyond what the schema descriptions state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Set a specific built flow to run automatically on a cadence') plus scope qualifiers (deterministic counterpart to a routine, runs the latest PUBLISHED revision). It explicitly distinguishes itself from routines_create and from the sibling schedule management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('USE THIS when the user wants a flow they've built to run on a schedule') with a concrete example, an explicit exclusion ('Do NOT create a routine for this'), and routes follow-up work to workbench_flows_schedules_list / _update and publish via workbench_flows_publish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_schedules_deleteDelete a flow scheduleADestructiveInspect
Removes a schedule for good. Prefer workbench_flows_schedules_update with enabled: false when the user might want it back. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow the schedule belongs to. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scheduleId | Yes | Schedule id, from workbench_flows_schedules_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds non-structured traits: permanence ('for good') and the fact that the call may return `needs_confirmation`, implying a two-step approval flow. It does not spell out that the first call may not actually delete, but the confirmation hint is valuable context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the destructive nature and the preferred alternative front-loaded before the return-value caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-open-world operation with no output schema and full annotation coverage, the description supplies the irreversibility warning, the safer alternative, and the confirmation flow. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so flowId, workspace, approvalId and scheduleId are all documented in the schema. The description only implicitly links needs_confirmation to approvalId, adding little meaning beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a schedule for good') and immediately distinguishes itself from the sibling that is the safer alternative. An agent can route between delete and update without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (workbench_flows_schedules_update with enabled: false) and the condition that selects it ('when the user might want it back'). This is a clear when-not-to-use rule, which is exactly what a destructive tool needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_schedules_listList a flow's schedulesARead-onlyInspect
Every schedule on one flow: cadence, whether it's paused (enabled: false), the next fire time, delivery, and the last run's status. Read this before workbench_flows_schedule (don't create a duplicate) and to get the scheduleId for workbench_flows_schedules_update / workbench_flows_schedules_delete / workbench_flows_schedules_run_now.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id, from workbench_flows_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by describing the returned fields (cadence, enabled flag, next fire time, delivery, last run status) and the read-before-write workflow, though it says nothing about pagination or auth requirements for large schedule sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool returns and then the routing guidance. The field enumeration is somewhat dense but each item earns its place for an agent deciding whether this call answers its question.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of describing return content, and it does so with concrete fields. Combined with the sequencing guidance for the schedule lifecycle, nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with flowId and workspace both documented in the schema, including the workspace-token nuance. The description adds no parameter-level meaning beyond 'one flow', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Every schedule on one flow') and enumerates what the listing contains (cadence, paused state, next fire time, delivery, last run status), which lets an agent distinguish it from workbench_flows_list, workbench_flows_schedule, and the other schedule tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it: before workbench_flows_schedule to avoid creating a duplicate, and to obtain the scheduleId needed by workbench_flows_schedules_update, _delete, and _run_now. This is a precise when/when-not with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_schedules_run_nowFire a flow schedule once, nowAInspect
Runs one iteration of a schedule immediately through the real scheduled pipeline (same input, same delivery — the email or channel it normally posts to) without moving its cadence. Works on paused schedules. Use it to test a schedule the user just set up. Spends workspace credit and delivers for real, so it sits behind the approval gate — may return needs_confirmation. The run is fire-and-forget: check workbench_flows_schedules_list for lastStatus, or workbench_executions_get for the trace.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow the schedule belongs to. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| scheduleId | Yes | Schedule id, from workbench_flows_schedules_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that it spends workspace credit, delivers for real, sits behind an approval gate, may return needs_confirmation, and is fire-and-forget with specific follow-up tools named. This is exactly the behavioral context an agent needs before invoking a real-delivery side-effecting call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core action comes first, followed by scope, cost/approval caveats, and follow-up. Every sentence carries distinct, actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by telling the agent the run is fire-and-forget and naming workbench_flows_schedules_list (lastStatus) and workbench_executions_get (trace) as the way to observe results. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description's mention of the approval gate and needs_confirmation adds indirect context for approvalId, but it does not add syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Runs one iteration of a schedule immediately through the real scheduled pipeline') and pins the exact scope: same input, same delivery, no cadence change. This clearly distinguishes it from workbench_flows_run and workbench_flows_schedules_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Use it to test a schedule the user just set up') and adds a useful edge case ('Works on paused schedules'). It stops short of naming the alternative tools (e.g., workbench_flows_run) or stating when NOT to use it, so it is clear context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_schedules_updatePause / resume / re-time a flow scheduleADestructiveInspect
Changes one schedule: enabled: false pauses it (configuration kept), enabled: true resumes and recomputes the next fire time from now; interval / scheduleTime / scheduleTimezone / scheduleDayOfWeek change the cadence; label, delivery, and input can change too. Pass only what changes. Get the scheduleId from workbench_flows_schedules_list. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | New fixed input envelope — {"kind":"chat","messages":[…]} or {"kind":"form","values":{…}}. | |
| label | No | ||
| flowId | Yes | Flow the schedule belongs to. | |
| enabled | No | false pauses, true resumes. | |
| delivery | No | ||
| interval | No | New cadence: hourly, daily, or weekly. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| recurrence | No | When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {"freq":"hourly"|"daily"|"weekly"|"monthly"|"yearly","every":N,"times":["HH:MM"],"weekdays":[0=Sun…6=Sat],"monthDays":[1…31,-1=last],"nthWeekdays":[{"nth":1…5|-1,"weekdays":[…]}],"months":[1…12],"minutes":[…],"hours":{"from","to"},"timezone":"<IANA>","starts","ends","skip":["YYYY-MM-DD"]}. Examples: weekdays at 8 → {"freq":"weekly","weekdays":[1,2,3,4,5],"times":["08:00"],"timezone":"America/Chicago"}; the last business day of the month → {"freq":"monthly","nthWeekdays":[{"nth":-1,"weekdays":[1,2,3,4,5]}],"timezone":"…"}; every other Friday → {"freq":"weekly","every":2,"weekdays":[5],"starts":"<a Friday>","timezone":"…"}. null clears it. | |
| scheduleId | Yes | Schedule id, from workbench_flows_schedules_list. | |
| scheduleTime | No | ||
| scheduleTimezone | No | ||
| scheduleDayOfWeek | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds genuine behavioral value beyond that: pausing keeps configuration, resuming recomputes fire time from now, and 'May return needs_confirmation' warns of an approval round-trip. It doesn't explain what 'destructive' concretely means here, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense, front-loaded sentences with no filler; each clause maps a field or action to its effect. The prerequisite note and the needs_confirmation warning are placed at the end without burying the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with no output schema, the description covers the main behaviors, partial-update contract, prerequisite lookup, and the confirmation flow. Minor gaps (workspace/approvalId handling are left to schema) keep it just below full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 62%, so structured fields do part of the work, but the description adds real meaning: enabled's pause/resume semantics, the cadence field group, and that label/delivery/input are also mutable. The recurrence/approval params are documented in-schema rather than the description, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (changes) and resource (one schedule), then enumerates exactly which fields do what: `enabled: false` pauses, `enabled: true` resumes, cadence fields re-time. An agent can distinguish it from `workbench_flows_schedule` (create) and `schedules_run_now` 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context — 'Pass only what changes' establishes it as a partial-update tool, and 'Get the scheduleId from workbench_flows_schedules_list' routes the agent to the prerequisite tool. It does not explicitly contrast with sibling scheduling tools (create vs run_now), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_flows_updateRename / describe / archive / re-scope a Workbench flowADestructiveInspect
Changes a flow's name, description, visibility, tags, or archived state — the metadata around the flow, NOT its orchestration (prompts and nodes change through workbench_flows_edit_text). Pass only what changes. Archiving hides the flow from the default gallery but leaves it runnable, scheduled, and shared; pass archived: false to restore. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement tag set (lowercase labels). The whole set, not a diff. | |
| flowId | Yes | Flow id, from workbench_flows_list. | |
| archived | No | true archives, false restores. | |
| flowName | No | New name. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No | New description; null clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true; the description goes further by explaining that archiving is non-destructive to operation (still runnable, scheduled, shared) and reversible via archived: false, plus surfaces the needs_confirmation/approvalId handshake. This is exactly the kind of behavior an agent cannot infer from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the scope constraint front-loaded, followed by the sibling exclusion, the archive semantics, and the confirmation caveat. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param mutation tool with no output schema, the description covers scope, alternatives, partial-update expectation, archive reversibility, and the confirmation flow. Workspace/auth details are already in the schema, so nothing an agent needs to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents partial-set semantics for tags, archived true/false, and workspace auth rules. The description restates the field list and 'pass only what changes' but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the concrete resource (a Workbench flow) and the exact metadata fields it mutates (name, description, visibility, tags, archived), then explicitly excludes orchestration content and points to workbench_flows_edit_text. An agent can distinguish it from that sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use this tool versus workbench_flows_edit_text, tells the caller to 'pass only what changes' (partial update), and gives the condition for restoring a flow (archived: false). Alternative-routing and exclusions are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_add_documentsAdd documents to a knowledge baseAInspect
Adds documents to a knowledge base and starts ingestion (chunk + embed; graph KBs also extract entities; tabular KBs load CSV as tables). Text goes inline (Markdown, plain text, CSV — encoding utf8); binary files (PDF, .docx) go base64-encoded with their mimeType. Up to 50 sources per call, ~10 MB each. Ingestion runs in the BACKGROUND — the result carries a runId; check it with workbench_kb_ingestion_status when the user asks, don't poll. workbench_kb_search works once it finishes. Content from blocks is ideal source material. Check workbench_kb_documents_list first so you don't add a document twice. Embedding spends workspace inference credit, so this sits behind the approval gate: may return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id (from workbench_kb_list or workbench_kb_create). | |
| sources | Yes | Documents to ingest (1-50). | |
| workspace | No | Workspace slug override. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description adds crucial context beyond them: ingestion runs in the background and returns a runId, embedding spends workspace inference credit, the call may return `needs_confirmation`, and there are size/count limits. This is rich behavioral disclosure that goes well beyond the structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then flows into operational details (background ingestion, limits, alternatives, approval gate) in a compact, information-dense manner. Every sentence contributes actionable guidance without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers everything an agent needs: ingestion behavior, return value (runId), follow-up tools, limits, approval flow, and duplicate-avoidance. Annotations cover safety, and the description fills all remaining gaps, making the definition self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 kbId, sources, encoding, mimeType, and workspace/approvalId. The description restates the encoding and mimeType rules (utf8 for text, base64 for PDF/docx) and limits (50 sources, ~10 MB each), which are already in the schema constraints. It adds little new semantic meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Adds documents') and resource ('knowledge base'), and immediately clarifies that ingestion starts. It names sibling tools (workbench_kb_ingestion_status, workbench_kb_search, workbench_kb_documents_list) so an agent can distinguish this tool from alternatives without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to check workbench_kb_documents_list first to avoid duplicates, to use workbench_kb_ingestion_status only when the user asks (not poll), and that search works only after ingestion finishes. It also identifies ideal source material (<attached-file> blocks) and notes the approval gate, giving clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_createCreate a knowledge baseAInspect
Creates an empty knowledge base. Recipe 'docs' (default) for reference material an agent searches at runtime; 'tabular' for spreadsheet-style data queried with SQL; 'graph' for entity/relationship extraction. After creating, add content with workbench_kb_add_documents, then give an agent flow a search tool over it with workbench_flows_attach_knowledge_base (before publishing the flow). May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Knowledge base name (1-200 chars). | |
| recipe | No | Default 'docs'. | |
| workspace | No | Workspace slug override. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. | |
| visibility | No | Who can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/non-destructive/openWorld profile, so the bar is lower, and the description adds genuinely new behavior: the tool may return a `needs_confirmation` envelope, which explains the approvalId parameter path. It does not state permission requirements, name-collision behavior, or default visibility (left to the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then recipe selection, then the follow-up pipeline. Every clause carries unique information; the trailing note about needs_confirmation is terse but operationally relevant rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no output schema, and only weak annotations, the description covers creation semantics, variant choice, follow-up steps, and the deferred-confirmation path. It omits what the call returns (e.g. the new KB identifier) and any naming/permission constraints, which an agent would still need to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so baseline is 3, and the description earns above that by explaining what each recipe produces ('tabular' data queried with SQL, 'graph' entity/relationship extraction) and by tying the confirmation envelope to the approvalId flow. name, workspace, and description parameters gain no further meaning from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates an empty knowledge base') and immediately differentiates the three variants of that resource via recipe semantics. An agent can distinguish this from workbench_kb_add_documents, workbench_kb_get, or workbench_kb_search without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete downstream pipeline guidance: add content with workbench_kb_add_documents, then attach to an agent flow with workbench_flows_attach_knowledge_base before publishing. It does not say when *not* to use this tool (e.g. if a KB already exists, or workspace constraints), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_deleteDelete a knowledge baseADestructiveInspect
Deletes a knowledge base and everything in it. Flows that search it will find nothing — check which agents use it (the user knows; the KB page in Workbench lists them) and say so before proposing. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id, from workbench_kb_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true; the description goes further by disclosing the downstream consequence (flows that search it will find nothing) and the confirmation loop ('May return needs_confirmation'), which is critical for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the destruction scope front-loaded and the confirmation caveat last. The parenthetical about where the user can see dependent agents is slightly clunky but still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param destructive tool with no output schema, the description covers blast radius, dependent-flow impact, and the confirmation flow. It never states irreversibility outright or clarifies the workspace-parameter interaction, which are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds context for the approvalId round-trip by explaining that a needs_confirmation response can occur, and it reinforces the kbId provenance implicitly. Modest but genuine added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a knowledge base') and immediately scopes the blast radius ('and everything in it'), which implicitly separates it from workbench_kb_document_delete. It does not name a sibling explicitly, so it stops short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition before acting: check which agents use the KB and tell the user before proposing deletion. That is real usage guidance, but no alternative tool or when-not-to-use condition is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_document_deleteRemove a document from a knowledge baseADestructiveInspect
Removes one ingested document and all its chunks; searches stop returning it at once. Get the documentId from workbench_kb_documents_list. To replace a document, remove it then workbench_kb_add_documents the new version. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| documentId | Yes | Document id, from workbench_kb_documents_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds real value beyond that by disclosing cascade behavior (all chunks removed) and the immediate search-visibility effect, plus the possibility of a needs_confirmation response. It stops short of explaining what the confirmation requires or whether the deletion is recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the effect, then the id source, then the replace workflow. No filler; each sentence maps to a distinct decision an agent must make.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-document delete with full schema coverage and annotations, this provides everything needed: scope, source of the id, replacement alternative, and the confirmation possibility. No output schema exists, and the confirmation hint adequately pre-frames a non-standard response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters including kbId, workspace, approvalId, and documentId are documented in the schema itself. The description's only parameter-adjacent note ('get the documentId from workbench_kb_documents_list') duplicates the schema's own wording for documentId, adding no new semantics. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (removes) and resource (one ingested document and all its chunks), with scope narrowed to a single document rather than the whole knowledge base. This cleanly distinguishes it from siblings like workbench_kb_delete and workbench_kb_documents_list without needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the caller: get documentId from workbench_kb_documents_list, and to replace a document, remove it then workbench_kb_add_documents the new version. It also signals the confirmation flow via 'May return needs_confirmation', so both prerequisites and alternatives are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_documents_listList the documents in a knowledge baseARead-onlyInspect
Every document ingested into the KB's current content: id, name, type, size, chunk count. Empty for a KB with nothing ingested yet (or one whose ingestion is still running — check workbench_kb_ingestion_status). Use it before workbench_kb_add_documents to avoid re-adding a document, and to get the documentId for workbench_kb_document_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id, from workbench_kb_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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 real behavioral context beyond that: the field set returned and the edge case that results are empty for a KB with nothing ingested or one still ingesting. It stops short of discussing pagination or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned, then the edge case, then the usage guidance. Three tight sentences with no redundant restatement of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields, and the schema fully covers both parameters. The only minor gap is the absence of any note on pagination or result limits for a potentially large document list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so kbId and workspace are already fully documented in the schema, including the workspace auth requirement. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (documents in a knowledge base) and even enumerates the returned fields (id, name, type, size, chunk count). This lets an agent distinguish it from workbench_kb_search, workbench_kb_get, and workbench_kb_ingestion_status without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the workflows it serves: call it before workbench_kb_add_documents to avoid re-adding a document, and to obtain the documentId for workbench_kb_document_delete. It also routes the empty-result edge case to workbench_kb_ingestion_status, so nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_getRead one knowledge baseARead-onlyInspect
One knowledge base: name, recipe (docs / tabular / graph), status, document and chunk counts, embedding model, and ingestion settings. Read it to confirm a KB has content before pointing a flow at it. Get the kbId from workbench_kb_list.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. With no output schema, the description carries the return-shape burden and does enumerate the fields returned, which is genuinely useful beyond the annotations; it stops short of explaining what status/ingestion settings values mean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the field inventory, then purpose, then the ID source. No filler; only minor density in the field list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-fetch tool with annotations covering safety and a schema covering both params, the description fills the remaining gaps: what you get back, when to call it, and where the ID comes from. Nothing essential is missing, though status value semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the workspace parameter is richly documented in the schema itself. The description only adds provenance for kbId ('get it from workbench_kb_list'), which is more usage routing than parameter semantics, so the baseline 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact resource and enumerates the concrete fields returned (name, recipe, status, counts, embedding model, ingestion settings), so the agent knows precisely what this tool yields. It also names the sibling workbench_kb_list as the source of the kbId, clearly distinguishing the single-fetch from the list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete usage context ('read it to confirm a KB has content before pointing a flow at it') and a prerequisite ('get the kbId from workbench_kb_list'). No explicit when-not guidance, but the intended use case is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_ingestion_statusCheck an ingestion runARead-onlyInspect
The state of one ingestion run started by workbench_kb_add_documents: PENDING / RUNNING / DONE / FAILED, chunks written, and the error when it failed. Read it when the user asks whether their documents are in yet, or before a search that needs them — don't poll in a loop; ingestion of a few documents takes under a minute. Pass the runId the add-documents call returned.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id. | |
| runId | Yes | Ingestion run id, from workbench_kb_add_documents. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds non-structured context: the exact status values, that chunks-written and failure errors are surfaced, and expected latency. It stops short of describing ordering or how long terminal results persist, but adds real value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is returned, then when to call it, then the parameter. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly compensates by naming the returned fields. For a read-only status-check tool with fully documented parameters, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so kbId, runId and workspace are already documented, including the workspace-token caveat. The description only reinforces runId's provenance ('the runId the add-documents call returned'), adding minimal meaning beyond the schema — the baseline 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('the state of one ingestion run') and enumerates the exact return values (PENDING / RUNNING / DONE / FAILED, chunks written, error). It explicitly names the sibling that creates the run (workbench_kb_add_documents), so an agent can place it correctly among the workbench_kb_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers ('when the user asks whether their documents are in yet, or before a search that needs them') plus a clear exclusion ('don't poll in a loop'), with the reason and timing expectation (under a minute). It also tells the agent where the runId comes from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_listList knowledge basesARead-onlyInspect
Lists every knowledge base in the active workspace the caller can see. Returns summaries (id, name, description, status, doc/chunk counts, embedding model). Use an id with workbench_kb_search to retrieve content.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys (workspace is intrinsic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: visibility scoping ("the caller can see") and, importantly, the exact shape of each returned summary, which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: scope first, then return shape, then the follow-up action. Every clause earns its place, and the return-field enumeration substitutes for the missing output schema rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool with no output schema, the description covers scope, visibility, returned fields, and the natural next call. Combined with full schema coverage and read-only annotations, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `workspace` parameter has 100% schema description coverage, including the personal-token vs workspace-API-key rules, so the schema already carries the semantics. The description's phrase "in the active workspace" is consistent with that but adds no format or override guidance beyond it — baseline 3 for a well-documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Lists every knowledge base") plus an explicit scope ("in the active workspace the caller can see"), so an agent immediately knows what it returns. It routes to `workbench_kb_search` for content retrieval, but never contrasts itself with the closest sibling, `workbench_kb_get` (single-KB fetch), so differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the reader infers this is the entry point for discovering KB ids, and the sentence "Use an id with `workbench_kb_search` to retrieve content" gives a useful downstream next step. There is no explicit when-to-use/when-not statement and no mention of prerequisites or empty-workspace behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_kb_searchSearch a knowledge baseARead-onlyInspect
Retrieves the most relevant chunks from one knowledge base — the core RAG primitive. mode:"semantic" (default) embeds the query and ranks by meaning (spends a small amount of workspace credit); mode:"keyword" is a free case-insensitive substring match. Each hit carries the chunk text, its document, and a score (cosine similarity 0-1 for semantic, match count for keyword). Get a kbId from workbench_kb_list.
| Name | Required | Description | Default |
|---|---|---|---|
| kbId | Yes | Knowledge base id (from workbench_kb_list). | |
| mode | No | semantic (embed + rank by meaning, default) or keyword (free substring match). | |
| limit | No | Max hits to return, 1-50. Default 10. | |
| query | Yes | What to search for. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/destructive annotations by disclosing the credit cost of semantic mode versus the free keyword mode, and by describing the return payload and scoring semantics (cosine 0-1 vs match count). These are operational traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Leads with the core purpose, then mode behavior, then return shape, then the prerequisite for obtaining kbId. Every sentence carries distinct information and the ordering follows how an agent would reason about invoking it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explicitly covers return values (chunk text, document, score) and their interpretation, and covers the two meaningful invocation choices (mode, kbId source). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by tying mode to cost ('spends a small amount of workspace credit' vs 'free') and by clarifying the score interpretation per mode. The workspace parameter is left to the schema, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieves the most relevant chunks from one knowledge base'), and further anchors it as 'the core RAG primitive'. It is clearly distinguishable from siblings like workbench_kb_documents_list or workbench_kb_get, which enumerate or fetch rather than rank-retrieve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing context: 'Get a kbId from workbench_kb_list', and explains the semantic-vs-keyword tradeoff (credit cost vs free substring match) that governs mode choice. It lacks an explicit statement of when NOT to use this in favor of another retrieval tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_node_catalog_getSearch the Workbench node catalogARead-onlyInspect
The ground truth for what nodes exist and what their ports actually are — verify against this instead of recalling. Search by keyword/category for summaries; pass slug for one node's full detail (inputs, outputs, settings). Inputs are PORTS fed by links; settings live on the node — see workbench_flow_authoring_guide. The catalog is the WORKSPACE'S: model nodes the workspace's inference policy forbids come back with allowed: false — never author with those; pick an allowed model. Pass flowId to include the flow's pinned imports as nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keyword over slug / name / tagline / description. | |
| slug | No | Exact node slug → full detail for that one node (ports + settings). | |
| limit | No | Results per page, 1-50. Default 20. | |
| flowId | No | A flow whose pinned imports should appear as `imported-<uuid>` nodes. | |
| offset | No | Pagination offset. | |
| category | No | Filter by category. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; the catalog's policy annotation is per workspace. |
TDQS
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 still adds real behavioral context the annotations cannot: workspace-scoped catalog contents and the `allowed: false` flag on policy-forbidden model nodes with the instruction to avoid authoring with them. It doesn't cover pagination limits or result shape beyond the summary/detail split, so it sits a notch above the annotation baseline rather than far above it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the authoritative-source claim, then mode selection, then the conceptual distinction between ports and settings, then the workspace policy caveat and `flowId` behavior. Every clause carries a decision or a constraint; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers what comes back (summaries vs full node detail), the `allowed` flag, and the flow-pinned imports shape. Combined with the workspace requirement and the authoring-guide cross-reference, an agent has everything needed to call it correctly in either mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, and the description clears it by explaining mode semantics: which parameters produce summaries vs single-node detail (inputs/outputs/settings) and what `flowId` actually injects (pinned imports as `imported-<uuid>` nodes). The `workspace` policy note reinforces rather than repeats the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search / get) plus resource (Workbench node catalog) and its scope: node existence and their actual ports. It positions itself as ground truth and differentiates from siblings by pointing at `workbench_flow_authoring_guide` for authoring semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between two modes — keyword/category for summaries vs `slug` for full detail — and states the anti-pattern it replaces ('verify against this instead of recalling'). It also names a sibling tool for adjacent concerns and gives the policy rule ('never author with those; pick an allowed model'), so an agent knows both when to call and what to do with the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_shim_add_answerAdd an answer to a shimAInspect
Adds one answer (a label and, optionally, when it applies). The shim needs three examples of it before it builds again with the new answer. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | ||
| shimId | Yes | Shim id, from workbench_shim_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| description | No | When this answer applies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly=false and destructive=false, so safety is partly covered, but the description adds real behavioral context beyond them: the three-example build threshold and the special `needs_confirmation` return path. It does not say what happens to existing answers or how the confirmation round-trip maps to approvalId, which the schema handles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and each carrying information (composition of an answer, the three-example build requirement, the confirmation return). Only the parenthetical is slightly clunky, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the key operational facts: what is added, the build-threshold requirement, and the confirmation return. The main remaining gap is not relating this tool to add_examples, but overall it is sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema documents most parameters (shimId, workspace, approvalId, description). The description adds marginal meaning by framing `answer` as a label plus optional applicability, but the bare `answer` param itself remains undocumented in the schema. Baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: 'Adds one answer' and clarifies the answer is a label plus an optional applicability condition. It does not differentiate itself from the closely related sibling workbench_shim_add_examples, so an agent could confuse the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through workflow context ('the shim needs three examples of it before it builds again'), which tells the agent this is part of a multi-step authoring flow. However, there is no explicit when-to-use versus the sibling add_examples tool, nor prerequisites for the first call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_shim_add_examplesAdd examples to an answerAInspect
Adds example inputs to one answer. Write inputs a real person would actually type in the shim's setting — varied in length, register and specifics, each one clearly this answer and not another — never paraphrases of the answer's name. Read the shim first so new examples fit alongside the existing ones and land where recall is low. Exact duplicates are skipped. The shim rebuilds on its own afterwards; read it again for the new report. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | The answer these examples belong to, exactly as labelled. | |
| shimId | Yes | Shim id, from workbench_shim_list. | |
| examples | Yes | ||
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses idempotency behavior ("Exact duplicates are skipped"), a non-obvious side effect ("The shim rebuilds on its own afterwards"), the follow-up action ("read it again for the new report"), and a special return state ("May return `needs_confirmation`"). These are exactly the traits an agent cannot infer from readOnlyHint/destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the guidance, side effect and return note in efficient order. Dense but each sentence carries distinct information; minor room to separate content guidance from lifecycle behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does so by flagging the auto-rebuild/re-read cycle and the needs_confirmation state. A mutation tool with adequate but not exhaustive coverage; nothing critical to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents shimId, workspace and approvalId; the description correctly does not repeat those. It adds real meaning for the examples field (varied length/register, not paraphrases of the answer's name), but that is marginal against an already well-covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Adds example inputs to one answer") scoped precisely to one answer. It is clearly distinguishable from workbench_shim_add_answer and the get/list/create siblings, though it never explicitly contrasts with add_answer, which is the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow prerequisite ("Read the shim first so new examples fit alongside the existing ones") and directs where to focus effort ("land where recall is low"). It does not name an alternative tool or state when not to use this one, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_shim_createCreate a shimAInspect
Creates a shim from a name, the question it answers, and its answers. Add examples afterwards with workbench_shim_add_examples — three or more per answer and it builds on its own. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A short name, e.g. "Support triage". | |
| answers | Yes | ||
| question | Yes | The question, e.g. "Which team should read this message?" | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. | |
| inputsComeFrom | No | One line on where the inputs come from, in the user's words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only but non-destructive, non-open-world write. The description adds real context beyond that: it may return `needs_confirmation`, implying an approval flow mediated by approvalId. It doesn't explain permissions or what else the response contains, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the create action and its inputs, then the follow-up action and the confirmation caveat. No filler or repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema and good schema coverage, the description covers the required inputs, the next-step workflow, and the possibility of a needs_confirmation return. It is nearly complete; only the shape of a successful return and any permission preconditions are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents name, question, answers, workspace, approvalId and inputsComeFrom. The description restates the three required inputs but adds no format or constraint detail beyond the schema, making it baseline-adequate rather than additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates) and resource (shim) plus the three inputs it is built from, which distinguishes it from workbench_shim_add_examples and workbench_shim_add_answer by scope. It does not define what a 'shim' is conceptually, but the resource is unambiguous within the workbench namespace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear sequencing rule: create first, then add examples with workbench_shim_add_examples, with a concrete threshold (three or more per answer). No explicit when-not or exclusion versus siblings like workbench_shim_add_answer, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_shim_getRead one shimARead-onlyInspect
One shim in full: the question, where its inputs come from, every answer with its description and examples, what the shim still needs before it can build, and the newest build's report — held-out accuracy, recall per answer, which answers get mistaken for which, and the compiler's notes. Read it before writing examples: match the setting and the existing examples' register, and put new examples where recall is low or the compiler says an answer is thin.
| Name | Required | Description | Default |
|---|---|---|---|
| shimId | Yes | Shim id, from workbench_shim_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
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, yet the description goes well beyond them by enumerating the returned payload — question, input sources, per-answer descriptions and examples, build-readiness gaps, and build metrics like held-out accuracy, per-answer recall, confusion pairs, and compiler notes. With no output schema, this return-format disclosure is genuinely valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'One shim in full' followed by an em-dash inventory and then actionable guidance. It is dense and long, but nearly every clause conveys concrete content or instruction rather than filler, so it earns its place despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with no output schema, the description fully compensates by describing the return payload in detail and even explaining how to act on it (write examples toward low-recall answers). Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: shimId is documented as coming from workbench_shim_list, and workspace documents the personal-token/workspace-key rules. The description adds no additional parameter semantics, so the baseline 3 is appropriate — the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what this tool returns: the full contents of one shim — the question, input provenance, every answer with examples, build readiness, and the latest build report. This is clearly distinguishable from siblings like workbench_shim_list (enumeration), workbench_shim_create, and workbench_shim_add_answer/add_examples, so an agent can route correctly without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: 'Read it before writing examples', match the existing examples' register, and place new examples where recall is low or the compiler flags thin answers. That is strong when-to-use guidance tied to a workflow, but it names no explicit exclusion or alternative tool (e.g. don't call if you only need the id list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_shim_listList shimsARead-onlyInspect
Every shim the user can see: id, name, the question it answers, how many answers and examples it has, and the published version's held-out accuracy (null until something is published). A shim is a small decision model that runs inside an app with no model call. Start here to get a shimId.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real value beyond that: it discloses the exact return shape and the edge case that held-out accuracy is 'null until something is published', which no annotation conveys. Pagination/volume behavior is not mentioned, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each doing distinct work: the return-field list, the definition of 'shim', and the entry-point cue. The most actionable guidance (start here for a shimId) is not buried, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating every returned field plus the null-accuracy edge case. Combined with annotations covering safety and a fully documented single parameter, an agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (workspace) and schema description coverage is 100%, so the schema already documents slug semantics and token/default-workspace behavior. The description adds nothing about the parameter, which is the expected baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list every shim) and enumerates exactly what the listing contains: id, name, the question it answers, answer/example counts, and published held-out accuracy. It also defines the domain term 'shim', so the agent knows what it is listing without opening any schema, and it is clearly differentiated from the singular workbench_shim_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent as an entry point ('Start here to get a shimId'), which tells it to call this before the get/add_answer/add_examples siblings. It stops short of naming those siblings or stating when not to use it, so it is clear context rather than a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_actAct on a Task gate (record a verdict)AInspect
Records THIS user's verdict on a run that is waiting on them — the labels come from the gate (workbench_tasks_run_view shows them via the plan; a wrong label errors listing the real options). Echo the verdict + note back to the user in one line BEFORE calling; that echo is the confirmation. Refuses when the gate is assigned to someone else.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | The user's reasoning, attached to the verdict. | |
| runId | Yes | Task run id that is waiting_human. | |
| verdict | Yes | One of the gate's verdict labels, e.g. "confirmed". | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is handled structurally. The description adds genuinely new behavior: it refuses when the gate belongs to someone else (authorization rule), an invalid verdict errors and lists the real options (error contract), and it prescribes echoing the verdict and note before the call as the confirmation step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then constraints, then the confirmation convention. Dense but every clause carries information; the parentheticals are informative rather than filler. Slightly packed, which keeps it just under the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers the action, the valid-input source, the failure modes (wrong label, wrong assignee), and the required confirmation workflow. An agent has everything needed to invoke it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds meaning beyond the schema: verdict values must be one of the gate's labels, a bad label produces an error enumerating the valid ones, and note is the user's reasoning echoed back. That is useful semantic guidance the schema's terse field descriptions do not supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Records THIS user's verdict on a run that is waiting on them') and scopes it to the gate/run concept. It also distinguishes itself from the sibling workbench_tasks_run_view, which is named as the read-side tool that shows the labels, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to call: a run in waiting_human state that is waiting on this user, with labels sourced from the gate. It also names workbench_tasks_run_view as the way to discover valid labels and warns that a wrong label errors. No explicit exclusions beyond the assignment refusal, so it stops short of a full when/when-not pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_compileCompile a sentence into a Task planAInspect
Runs the compiler over a sentence and returns the PROPOSED plan (or repair-grade problems — fix by refining the sentence with the user, not by guessing). Nothing persists. Present the proposal in plain terms: which clauses run flows, which you will handle, who decides, what the compiler noted. computer.sites lists sites the plan names and whether the Task allows them; workbench_tasks_set_sites asks an admin to allow the rest. Then iterate or freeze. Compile may take ~15s.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | The task this sentence belongs to, when compiling an edit — keeps it out of the child-task candidates. | |
| sentence | Yes | The sentence to compile. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Re-call with the approvalId from a needs_confirmation response after the user approves. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: nothing persists, failures come back as repair-grade problems rather than partial state, the call takes ~15s, the response exposes computer.sites and whether the Task permits each site, and there is a confirmation path. The 'nothing persists' claim is a conservative but not contradictory pairing with readOnlyHint=false, which is based on the compile being a non-trivial compute rather than a pure read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the highest-value facts — what it does and that nothing persists — then the failure mode and latency. Dense but nearly every sentence earns its place; the presentation instruction ('which clauses run flows, which you will handle, who decides') is the one line that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so at a usable level: a proposed plan, repair-grade problems, and the computer.sites field. The finer shape of the plan object is left unspecified, but an agent knows what comes back and what to do with it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so taskId, sentence, workspace and approvalId are already documented. The description only adds meaning around the sentence (it must be refined iteratively) and doesn't touch taskId or workspace at all, so it sits at the baseline for well-documented params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — compile a sentence into a PROPOSED Task plan — and makes the non-persisting, proposal-only nature explicit. That distinguishes it from workbench_tasks_create, workbench_tasks_freeze and workbench_tasks_set_sites, all of which it names or implies as separate steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage rules: refine the sentence with the user rather than guessing when the compiler returns problems, use workbench_tasks_set_sites to resolve disallowed sites, then iterate or freeze. It stops short of stating when to reach for compile versus get/update on an existing task, so not a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_createCreate a draft TaskAInspect
Creates a DRAFT Task from a name + sentence. A Task is for work with people in the loop (someone approves, decides or acts on each item before anything else happens) or a specific process mapped in Compass; its runs are measured. When nobody but you acts on it and you'd just do the same thing each time on a schedule, make a routine instead (routines_create). Use this once the user's sentence feels settled after you've refined it together — then compile it. The sentence should be THEIR words: trigger first ('When a claim arrives…'), then steps, branches, and who decides what. Name rooms, sheets, tables, flows and people by their names, never by id: people read the sentence on the Task's page.
| Name | Required | Description | Default |
|---|---|---|---|
| sentence | Yes | The process sentence, in the user's words. | |
| taskName | Yes | Short task name. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=false; the description adds genuinely new behavior: the result is a draft (not a live process) and must be compiled afterward. It also discloses a user-facing readability constraint — entities must be named, not id-referenced, because people read the sentence on the Task's page. Minor gap: it does not mention the needs_confirmation/approvalId flow that the create call can hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then Task definition, then alternative and content guidance — a sensible order with no filler sentences. It runs slightly long and the closing sentence blends authoring guidance with a next-step instruction, but every sentence 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and thin annotations, the description covers what is produced (a draft), how the input should be composed, how to name entities, and what to do next (compile). Not fully complete: the approval/confirmation path and what the create response contains are left to the schema or unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema alone sets a baseline of 3. The description goes beyond it by specifying what the `sentence` content should look like: the user's own words, trigger first ('When a claim arrives…'), then steps, branches, and who decides what — plus the rule to reference rooms, sheets, tables, flows and people by name rather than id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and resulting state: 'Creates a DRAFT Task from a name + sentence'. It defines what a Task is (people in the loop, or a mapped process; runs measured) and explicitly contrasts it with a routine, so an agent can separate this from routines_create and the many workbench_tasks_* siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('once the user's sentence feels settled after you've refined it together') and when-not-to-use plus the named alternative ('when nobody but you acts on it and you'd just do the same thing each time on a schedule, make a routine instead (routines_create)'). It also routes the agent to the next step ('then compile it'), which is the natural follow-on action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_deleteDelete a Workbench TaskADestructiveInspect
Deletes a task. Runs still in flight are stopped (a gate waiting on someone is closed), and its schedule trigger stops firing; past runs stay in history. Check workbench_tasks_get for live runs and say so before proposing. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task id, from workbench_tasks_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by describing exactly what is destroyed versus retained: in-flight runs stopped, a waiting gate closed, schedule trigger halted, past runs kept in history. It also warns that the call may return needs_confirmation, which is real behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and effect, then the pre-check guidance and the confirmation note. Dense and largely waste-free, though the parenthetical about the gate is a slight tangent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter tool with no output schema, the description covers the mutation effects, the pre-call verification step, and the possible confirmation response. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so taskId, workspace, and approvalId are already fully documented in the schema. The description only indirectly adds meaning by explaining the needs_confirmation/approvalId loop, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a task') and immediately clarifies the effect scope: in-flight runs stopped, schedule trigger stops, past runs preserved. This distinguishes it implicitly from pause-like siblings such as workbench_tasks_freeze, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-flight condition: check workbench_tasks_get for live runs and disclose them before proposing deletion. It also signals the confirmation flow, but it does not name a non-destructive alternative (e.g. freeze) for when the agent should not delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_freezeFreeze a compiled plan (activate the Task)ADestructiveInspect
Freezes a reviewed plan as the Task's next version and activates it. Pass the EXACT plan object a compile returned — never hand-edit it (change the sentence and recompile instead). Freeze ONLY after the user has seen the proposal and said go; echo what you're freezing in one line first. In-flight runs keep their pinned versions. After freezing, offer to start a first run.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | The plan object from workbench_tasks_compile, verbatim. | |
| taskId | Yes | The task id (create a draft first if none). | |
| sentence | Yes | The sentence this plan was compiled from. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds real context beyond them: in-flight runs keep their pinned versions, and the action creates a new Task version with activation. It does not clarify what happens to the superseded prior version, so it stops short of fully characterizing the destructive scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each carrying a distinct rule, with the core action front-loaded and the workflow guardrails after. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the prerequisite (compile), the approval gate, the versioning effect on running executions, and the sensible next step. Nothing needed to invoke it correctly is missing, and annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a non-obvious constraint on the plan parameter — it must come verbatim from compile and must never be hand-edited, with recompilation as the remedy. That is meaning beyond the schema's plain 'verbatim' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — freezing a reviewed plan as the Task's next version and activating it — which is unmistakably distinct from compile, run, or start siblings. An agent can tell exactly what state change this causes 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing: freeze ONLY after the user has seen the proposal and approved, pass the exact plan object from workbench_tasks_compile, never hand-edit (recompile instead), and offer a first run afterward. It names the prerequisite (compile) and the gating condition (user approval) directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_getRead one Workbench Task (definition + recent runs)ARead-onlyInspect
One Task in full: its sentence, status, the latest saved plan (the clauses — which run flows, which the assistant handles, who decides at each gate) with the flow and people names the plan refers to, and its recent runs, plus the sites its machine may reach (allowedSites) and the sites its plan names or past runs were refused (computer.sites). Read this before editing a task's sentence (workbench_tasks_compile with taskId) and when the user asks what a task does. Get the taskId from workbench_tasks_list.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, non-destructive operation. The description adds rich context beyond annotations by spelling out what is returned, including plan clauses, flow and people names, recent runs, allowedSites, and refused sites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and every clause describes relevant return content or usage. It is somewhat dense and run-on in the first sentence, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description carries the burden of explaining return values, and it does so thoroughly. Combined with the usage guidance and annotation safety profile, an agent has enough information to call this read tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both taskId and workspace are already documented in the schema. The description usefully notes that taskId comes from workbench_tasks_list, but it adds little about workspace semantics or value formats beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'One Task in full' and explicitly enumerates the task sentence, status, latest saved plan, recent runs, allowedSites, and refused sites. That makes the verb/resource and scope clear enough to distinguish it from list, create, update, and compile siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use it: before editing a task's sentence via workbench_tasks_compile, and when the user asks what a task does. It also tells the agent where to get the required taskId from workbench_tasks_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_listList Workbench TasksARead-onlyInspect
Lists the workspace's Tasks — sentence-orchestrated processes — with their sentence, status, and recent runs (id, status, who a waiting run is on). Use this to find a task the user names ('claims intake') and to see what's in flight; workbench_tasks_get reads one in full.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the safety profile is covered. The description adds value by disclosing the shape of the listing, including that each run shows 'who a waiting run is on', which is not derivable from the schema. It stops short of pagination, ordering, or auth notes, but those gaps are modest given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and immediately followed by the routing rule to the sibling tool. The parentheticals add real specification (field list, concrete example) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly compensates by enumerating the returned fields, and the single optional parameter is fully documented in the schema. The only omission is list-size behavior or ordering, which is minor for a scoped, read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage on the single `workspace` parameter, including the personal-token vs. workspace-API-key nuance, so the schema does the heavy lifting. The description adds no parameter detail of its own, which is the expected baseline when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the workspace's Tasks'), defines what a Task is ('sentence-orchestrated processes'), and previews the returned fields (sentence, status, recent runs). It also distinguishes itself from workbench_tasks_get, which 'reads one in full', so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case with a concrete example ('find a task the user names ("claims intake")'), a second use case ('see what's in flight'), and names the alternative that handles the single-item case. Nothing about when to pick this over its siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_run_viewView a Task run (the lit sentence)ARead-onlyInspect
The run's current state rendered as its sentence: what ran (with timings), which path each gate took, what's waiting on whom and for how long, what's coming up. Use whenever the user asks where something stands, and after acting on a gate.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Task run id. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. With no output schema, the description earns real credit by disclosing the return contents (what ran with timings, gate paths, who is blocking and for how long, what is next). It omits any notes on freshness/pagination, so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the content of the view front-loaded before the usage trigger. Minor friction from the metaphorical 'rendered as its sentence' and the title's 'lit sentence', which add flavor but also decoding overhead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a two-parameter read with annotations covering safety and no output schema; the description fills the resulting gap by explaining what the response contains and when to fetch it. It is complete enough to call correctly, with only minor omissions like whether the view reflects live or cached state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so runId and workspace are already documented in the schema, including the workspace default/override nuance for personal tokens. The description adds no parameter-level meaning beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource — the current state of a Task run — and enumerates what the view contains (timings, gate paths, blockers, upcoming steps). That is far more concrete than a tautology like 'view a task run'. It does not explicitly distinguish itself from close siblings such as workbench_tasks_get or workbench_executions_get, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use whenever the user asks where something stands, and after acting on a gate' gives clear situational triggers, and the second clause implicitly routes the agent here after workbench_tasks_act. No when-not conditions or explicit named alternatives are provided, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_set_sitesSet the sites a Task can reachAInspect
Sets the full list of sites a Task's machine may reach (example.com, or *.example.com for its subdomains; up to 20), for steps that have to use a site like a person would. It replaces the list, so read workbench_tasks_get first (allowedSites, and computer.sites for what the plan names) and pass every site to keep. Always waits for approval, and only a workspace admin's approval applies it; for anyone else it says who can. The latest saved version runs with the new list.
| Name | Required | Description | Default |
|---|---|---|---|
| sites | Yes | Every site the Task may reach. | |
| taskId | Yes | Task id, from workbench_tasks_list. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the list is replaced wholesale (a real data-loss risk despite destructiveHint=false), that the call always waits for approval, that only a workspace admin's approval applies it and others get an explanation of who can approve, and that the latest saved version picks up the new list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences that front-load the action, then the replacement warning, then the approval gate. The 'up to 20' restates maxItems from the schema, but otherwise every clause carries new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, approval-gated tool with no output schema, the description covers the prerequisite read, replacement danger, approval requirement and who can satisfy it, and the downstream effect on the running version. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: accepted site syntax including subdomain wildcards, the replace-not-merge semantics of 'sites', and the leave-approvalId-off-on-first-call flow implied for the approval parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it sets the full list of sites a Task's machine may reach, with wildcard examples and a cap of 20. It also names the sibling it pairs with (workbench_tasks_get) and the scope constraint (full replacement), so an agent can distinguish it from routine-reading or task-editing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite read (workbench_tasks_get, including which fields to consult) and a usage condition ('steps that have to use a site like a person would'), plus the warning to pass every site to keep. It does not name a contrasting alternative such as routines_set_sites for a similar operation on routines, which keeps it short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_startStart a Task runAInspect
Kicks off a run of a Task and returns at once; the run carries on by itself and is live on the task's page. When the task expects an input document (its trigger has an input), pass the user's material as input — pasted text, extracted attachment text, or JSON. Tell the user it has started and what it does next. Check where it stands with workbench_tasks_run_view when they ask; don't poll it in a loop.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | Trigger payload — the document text / JSON the task starts from. | |
| taskId | Yes | Task id (from workbench_tasks_list). | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly=false, openWorld=true, destructive=false), the description discloses the key behavioral trait an agent cannot infer: the call is fire-and-forget, the run continues server-side, and results appear live on the task's page. It also prescribes post-call behavior ('Tell the user it has started and what it does next').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the asynchronous contract in the first clause, then layers input guidance and status-check guidance in order of usefulness. Slightly dense—the 'Tell the user it has started and what it does next' instruction is agent-facing coaching rather than tool semantics, though it does earn its place as orchestration guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers what happens after invocation, where to observe results, and how to supply input. The needs_confirmation/approvalId recovery path is left to the schema description rather than the tool description, which is a minor gap for an agent that may hit that response mid-flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds meaning by enumerating acceptable `input` forms ('pasted text, extracted attachment text, or JSON') and tying the parameter to a trigger having an input. It adds nothing extra for workspace or approvalId, but the schema already documents those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Kicks off a run of a Task') and immediately defines its scope with 'returns at once; the run carries on by itself'. This asynchronous framing distinguishes it from siblings like workbench_tasks_run_view or workbench_flows_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for passing `input` ('when the task expects an input document (its trigger has an input)'), names the alternative for status checks (workbench_tasks_run_view), and adds an explicit exclusion ('don't poll it in a loop'). When/when-not/alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workbench_tasks_updateRename a Workbench TaskADestructiveInspect
Changes a task's name — the gallery label only. The sentence and plan are versioned and change through workbench_tasks_compile + workbench_tasks_freeze, never here. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task id, from workbench_tasks_list. | |
| taskName | Yes | New name. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description does not need to establish mutability. It adds real value beyond the annotations by disclosing the confirmation flow ('May return needs_confirmation'), which is a behavior an agent must handle. It does not, however, explain what 'destructive' means here or that the change is reversible, leaving some behavioral context thin against a destructive annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the scope constraint front-loaded and the sibling routing in the second. No filler, every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity update tool with full schema coverage and no output schema, the description supplies the key non-obvious behaviors: gallery-label-only scope and the needs_confirmation response. Minor gaps remain (reversibility, what triggers confirmation), but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents all four parameters, including workspace auth nuances and approvalId semantics. The description adds no parameter-level detail beyond what the schema already provides, so the baseline of 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Changes a task's name') and immediately scopes it to 'the gallery label only'. It further distinguishes from siblings by naming workbench_tasks_compile and workbench_tasks_freeze as the tools that change the sentence and plan, so the agent can tell exactly what this tool does and does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away from this tool for sentence/plan edits ('change through workbench_tasks_compile + workbench_tasks_freeze, never here') and flags the 'needs_confirmation' flow. When and when-not are both covered without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_credit_getWorkspace credit postureARead-onlyInspect
The workspace's inference-credit position: plan, this month's grant and how much of it is spent, and the purchased balance runs draw on past the grant. Check this before proposing spend-heavy work (eval runs, batch expansions) when credit has come up — and cite the numbers. Read-only; top-ups and plan changes happen in accounts, by a human.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true/destructiveHint=false, so the safety profile is covered. The description goes beyond that by declaring the mutation path lives elsewhere (accounts, human-driven) and by naming the exact data fields returned, which is genuinely useful context a caller can't infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the returned data then the actionable guidance, with zero filler. The parenthetical examples ('eval runs, batch expansions') sharpen the trigger without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing the return contents and does so (plan, grant, spent, purchased balance). Read-only nature, out-of-scope mutations, and triggering context are all present, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema description coverage is 100% – the schema already explains the workspace slug, default-workspace override, and that it is ignored for workspace API keys. The description adds nothing about the parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (workspace's inference-credit position) and it enumerates exactly what is returned: plan, this month's grant and spent portion, and purchased balance. No sibling covers credit, and the agent can tell instantly what this yields versus the eval/dataset tools that consume spend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger ('before proposing spend-heavy work (eval runs, batch expansions) when credit has come up') and the follow-up action ('cite the numbers'). It also carves out out-of-scope operations ('top-ups and plan changes happen in accounts, by a human'), though it does not name a sibling tool to redirect to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_files_readRead a file from the workspaceARead-onlyInspect
Read an uploaded file (PDF, Word, PowerPoint, spreadsheet, text) as markdown. Find file ids with workspace_folders_browse (a folder's items of kind workspace_file) or search_workspace. For anything long, call with outline: true first: it returns the headings with their character offsets and the total length. Then read only the sections you need with offset and maxChars. Spreadsheets come back as tables. A file that can't be read as text says so; don't guess at its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | ||
| offset | No | Character offset to start from. Default 0. | |
| outline | No | Return the headings and their offsets instead of text. | |
| usedFor | No | The thing you're reading this file to work on (the page, change, flow…), when there is one. The file then shows it was used there, and the thing shows the file it drew on. Leave it out for a general question. | |
| maxChars | No | How much to return. Default 12000. | |
| workspace | No | Workspace slug. Ignored when the workspace is already set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds real behavioral context: spreadsheets render as tables, unreadable files self-report rather than returning fabricated text, and outline mode returns headings with character offsets plus total length. It does not discuss size limits or auth, but this is solid beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler, and the highest-value guidance (what it does, then how to find ids, then the long-file workflow) is front-loaded. Each sentence contributes a distinct usable fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing return format (markdown, tables, outline headings with offsets) and failure behavior for unreadable files. Nothing an agent needs to call this correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83% and the description reinforces the meaning of outline, offset, and maxChars by explaining the read strategy they enable ('headings with their character offsets and the total length', 'read only the sections you need'). It says nothing about usedFor or workspace, but those carry their own schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read an uploaded file ... as markdown') and enumerates the supported input types. It is immediately distinguishable from sibling retrieval tools like workspace_folders_browse and search_workspace, which it positions as id-lookup mechanisms rather than readers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the siblings to use for finding file ids and prescribes the workflow for long files ('call with outline: true first ... then read only the sections you need with offset and maxChars'). The agent knows both how to locate a file and how to sequence reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_files_save_from_chatSave a picture from this chat to your filesAInspect
Save a picture the user attached in THIS conversation to the workspace's files, in the Home folder "From chat", and get back its file id. Use it when the user wants a picture they sent you used somewhere — an interface shows it as (CSS: url(file:)). Pick the picture by name: the name in its [attached image: <name>] marker. Omit name only when the latest message with pictures has exactly one. Saving the same picture again returns the file it was already saved as. Only pictures from this conversation can be saved; a picture on a website can't be fetched, so ask the user to attach it here.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The picture's name, as in `[attached image: <name>]`. | |
| workspace | No | Workspace slug. Ignored when the workspace is already set for this chat. | |
| approvalId | No | Approval id from a prior needs_confirmation response. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds genuine behavior: idempotent re-saves return the already-saved file, and the destination folder is fixed. It does not discuss failures beyond the website-fetch case, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, destination, and return value, then the selection and constraint rules. Mostly earns its place, though the inline CSS/markup rendering detail is slightly incidental to invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the return (file id) and idempotency, the fixed destination, selection logic, and the source restriction. Nothing needed to call it correctly against the 3-param schema is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond it by explaining how to choose `name` (match the `[attached image: <name>]` marker) and the precise condition for omitting it (only when the latest message has exactly one picture), which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (save), resource (a picture attached in this conversation), and destination (workspace files, Home folder 'From chat'), plus the return value (file id). It is clearly distinguishable from sibling reads like workspace_files_read and workspace_folders_browse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('use it when the user wants a picture they sent you used somewhere') and an explicit boundary ('Only pictures from this conversation can be saved; a picture on a website can't be fetched, so ask the user to attach it here'). The fallback instruction to ask the user makes the when-not case actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_files_sortSort a folder's filesAInspect
Sorts the files sitting directly in a folder into its subfolders, making a subfolder when two or more belong together; with folderId: null, files loose at the top go into the best folder anywhere. The same reading that files uploads on arrival: it runs in the background, and Home shows what moved, why, and an undo for each. Reads up to 60 files a call. Use it when someone asks to tidy or organize a folder; to put specific things somewhere, use workspace_folders_file. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | The folder to sort; null sorts what's loose at the top. | |
| workspace | No | Workspace slug, for tokens without a default. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false) it discloses that the operation is asynchronous/background, that Home shows what moved and why, that every move has an undo, that it reads up to 60 files per call, and that it may return needs_confirmation. The undo guarantee is exactly the context needed to reconcile a file-moving mutation with destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then scope, then operational notes, then routing — good ordering with no filler sentences. The clause 'The same reading that files uploads on arrival' is slightly cryptic and costs a small deduction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema, the description covers async execution, undo, batch limits, and the confirmation flow, which is close to complete. It does not say what happens when no file qualifies for grouping (no-op vs. partial sort), a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a real nuance the schema lacks: with folderId null the loose top-level files go to the best folder 'anywhere', not just within a subtree. approvalId is left to the schema, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (sorts files directly inside a folder into subfolders) and describes the mechanism — creating a subfolder when two or more files belong together. It also distinguishes the null-folderId variant, so an agent can tell exactly what the tool does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('when someone asks to tidy or organize a folder') and an explicit alternative with its selection condition ('to put specific things somewhere, use workspace_folders_file'). This is the when-to-use / when-not-to-use / alternative pattern done fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_folders_browseBrowse the workspace's foldersARead-onlyInspect
Without a folder: every folder in the workspace as a tree, each with its id, full path, and how many things are filed directly in it. With a folder (by id or by name): what's inside it — subfolders, then the items themselves with their kind, id, title, tags, and path. Folders are the engagement axis: a client or project gathers work from every tool, so a folder is how you answer 'what do we have for Acme' when the answer spans flows, pages, and datasets. Reach for this when the user asks what's in a folder or wants the whole shape; to find one named thing, search_workspace (which also matches folder names and can be limited to a folder) is faster. Only shows items the user can see and kinds this token may read.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | A folder id, or its name (case-insensitive, exact). Omit to list the whole tree. | |
| workspace | No | Workspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only safety, but the description adds meaningful context beyond them: permission scoping ('only shows items the user can see and kinds this token may read') and the workspace/folder visibility constraints. Doesn't discuss pagination or sizing limits for the tree.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the two modes clearly, then motivation, then the sibling routing. Dense but every sentence carries weight; slightly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers both call modes, visibility scoping, and sibling routing for a read-only browse tool with a well-documented 2-param schema. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both params are documented there, so baseline is 3. The description restates the folder-mode behavior but adds no syntax or format beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with two clearly delineated modes (tree vs. folder contents) and describes exactly what data each mode returns (id, path, direct-item count; or kind, id, title, tags, path). Distinguishes itself from search_workspace by role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('user asks what's in a folder or wants the whole shape') and names the alternative (search_workspace) with the condition selecting it ('to find one named thing').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_folders_createMake a folderAInspect
Makes a folder in Home, at the top or inside another folder. Folders gather a client's or a project's work from every tool. Check workspace_folders_browse first so you don't make one that exists. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The folder's name. | |
| parentId | No | The folder to make it in; omit for the top. | |
| workspace | No | Workspace slug, for tokens without a default. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a non-destructive write operation, and the description adds that the call may return a needs_confirmation envelope. It does not explain the successful return shape or duplicate-name behavior, but the added confirmation warning is meaningful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by context, a duplicate-check warning, and the confirmation caveat. The second sentence about what folders gather is slightly explanatory but still earns its place by clarifying the resource's role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool, the schema is complete and the annotations cover the safety profile. The description adds the important duplicate-check prerequisite and the possibility of needs_confirmation, though it does not describe the successful result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description only implies the parent/child placement and folder name, adding little beyond the schema's own explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it makes a folder in Home, either at the top level or inside another folder. It is clear what the tool does, but it does not explicitly distinguish creation from sibling operations such as workspace_folders_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to check workspace_folders_browse first to avoid creating a duplicate folder, which is a useful prerequisite. It does not state what to do if a matching folder already exists, such as using an update tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_folders_fileMove things into a folderAInspect
Moves things into a folder, or out of every folder with folderId: null. Anything from any tool can go in: pass each one's kind and id as search_workspace or workspace_folders_browse gave them. A thing lives in one folder, so filing it somewhere moves it. Things the person can't see are skipped. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | The things to move: kind and id from search_workspace or workspace_folders_browse. | |
| folderId | Yes | Where they go; null takes them out of their folders. | |
| workspace | No | Workspace slug, for tokens without a default. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the one-folder-per-item model (filing elsewhere moves it), that invisible items are silently skipped (partial-failure semantics), and that a needs_confirmation envelope may come back, which explains the approvalId param. It omits any note on scale limits or what a success response contains, keeping it shy of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded, and each sentence carries information (verb, source of identifiers, move semantics, skip behavior, confirmation). The phrase 'Anything from any tool can go in' is slightly loose but still useful scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation tool with no output schema, the description covers the mutation model, identifier sourcing, silent skips, and the confirmation round-trip. The only real gap is the shape of a successful response, which is not covered by an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so `items`, `folderId`, `workspace`, and `approvalId` are already documented in the schema. The description restates the folderId:null behavior and the kind/id sourcing but adds no format or constraint detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (moves) and resource (things into/out of folders), and clarifies the null-folderId variant means removing from every folder. An agent can distinguish this from workspace_folders_browse or workspace_folders_create without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent where the required `kind` and `id` come from (search_workspace or workspace_folders_browse), which is the key precondition for calling it. It gives clear context but never states when not to use it or contrasts it with a sibling folder tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_folders_updateRename or move a folderAInspect
Renames a folder, or moves it (with everything in it) into another folder or to the top. May return needs_confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Its new name. | |
| folderId | Yes | The folder (id from workspace_folders_browse). | |
| parentId | No | Move it into this folder; null moves it to the top. | |
| workspace | No | Workspace slug, for tokens without a default. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses that moving a folder also moves everything inside it and that the call may return a needs_confirmation envelope. This adds useful mutation/confirmation context, though it does not cover permissions or name-conflict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core operations and no wasted wording. The confirmation caveat is kept brief and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema, the description covers the key operations and the confirmation flow. The rich parameter schema fills in the remaining input details, making the definition largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented in the schema. The description adds no parameter-specific detail beyond the general operations, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific update actions for a folder: renaming and moving, including moving contents and moving to the top. It is clearly distinct from create/browse/file siblings by operation, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the stated operations: use this tool to rename a folder or move it. There is no explicit guidance on when to choose rename vs move, prerequisites, or alternatives such as create/browse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_setupSet up folders and rooms for their workADestructiveInspect
Creates folders for the work someone described, rooms linked to those folders (with your first message in each, the concrete next step), and starting pieces filed inside. Records what the workspace is for, which orders what home offers first. Use it once you know what they're working on, typically near the end of setting a workspace up. Say in one sentence what you're setting up and call it; the approval card lists the folders, rooms, and pieces, so don't list them in words too. Every workspace already has a General room, so don't recreate it. May return needs_confirmation; then wait for approval.
Starting shapes by kind of work (adapt, drop, or combine; name everything after what they told you):
process_redesign: a folder per process being changed ("Claims intake redesign"). Pieces: a Compass page with pageType WORKFLOW describing how it works today, a Napkin diagram of current and proposed steps, a doc for the change plan. Room: " redesign". After setup, offer a Ledger expectation for the metric they want to move.
research: a folder per study or question. Pieces: a research-plan doc (question, who, method), a synthesis doc. Room: " research". After setup, offer a Prism field for the question.
ai_design: a folder per AI feature. Pieces: a spec doc (what it does, for whom, what good looks like), a Caliper dataset for test cases. Room: the feature's name, with the flow in it once one exists (file an existing flow via existing). After setup, offer to scaffold the flow and a rubric.
knowledge: a folder per domain. Pieces: Compass pages for the main topics. Room: "Ask about ".
exploring: usually nothing beyond their priorities and the General room; offer one small first thing instead. Priorities are Compass pages made with compass_pages_create before this, not pieces here; name folders after the work that moves them.
| Name | Required | Description | Default |
|---|---|---|---|
| folders | Yes | ||
| workKinds | No | What the workspace is for, from what they said. | |
| workspace | No | Workspace slug. Ignored for workspace API keys. | |
| approvalId | No | Approval id from a prior needs_confirmation envelope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/readOnlyHint annotations: discloses the needs_confirmation return and that the agent must wait for approval, explains the approval card already enumerates folders/rooms/pieces, notes the pre-existing General room, and describes the side effect that workKinds orders what home offers first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core contract (create folders/rooms/pieces, approval flow) before the detailed recipes, and nearly every sentence earns its place. It is long, but the length tracks the tool's genuine complexity rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation tool with no output schema, the description covers the mutation surface, the approval/confirmation loop, the return-shape caveat, and the domain model needed to populate nested folders/rooms/pieces correctly. Nothing an agent needs to invoke it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds real semantics on top: folders must be named after the actual work, workKinds drives scope/ordering, priorities are Compass pages created beforehand rather than pieces, and the per-kind recipes map the abstract fields to concrete content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource set: creates folders, rooms linked to them, and starting pieces, plus records what the workspace is for. This is clearly distinguishable from siblings like workspace_folders_browse, rooms_add_flow, or compass_pages_create, which each handle one piece of the same domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit timing: 'Use it once you know what they're working on, typically near the end of setting a workspace up.' Adds when-not guidance (don't recreate the General room) and routes priorities to compass_pages_create instead. The per-work-kind shapes tell the agent exactly what to build in each scenario.
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.
20 tool updates
- Changed
compass_opportunities_mark_implemented1 field changed- added
Input schema / properties / applyToMapAdded value: +{ + "description": "Also move the map from the landing date: who does the change's steps, and how long they take, change as the change's effects say (automate, reassign, assist, relax a check, remove). Confirm with the user first; it can't be undone.", + "type": "boolean" +}
- Added
compass_role_story - Added
compass_roles_overview - Changed
napkin_deck_compose1 field changed- added
Input schema / properties / previewsAdded value: +{ + "description": "Default true: the result includes a picture of every slide made. Pass false to skip the pictures — the call returns sooner, which helps with long decks; look at slides afterwards with napkin_slide_view.", + "type": "boolean" +}
- Added
rooms_create - Changed
rooms_read2 fields changed- added
Input schema / properties / beforeAdded value: +{ + "description": "A message id: return the messages before it.", + "maxLength": 100, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "An ISO time: return the messages from then on.", + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" +}
- Added
rooms_search - Changed
rooms_start_agent_work2 fields changed- changed
Input schema / properties / includeZv1 / descriptionPrevious value: -"Whether zv1 takes part too (default true)."New value: +"Whether the assistant takes part too (default true)." - changed
Input schema / properties / mode / descriptionPrevious value: -"'moderated' (zv1 picks who speaks) or 'in_order'. Default moderated."New value: +"'moderated' (the assistant picks who speaks) or 'in_order'. Default moderated."
- Changed
routines_create4 fields changed- added
Input schema / properties / interval / descriptionAdded value: +"Plain cadence. Omit when passing recurrence." - added
Input schema / properties / recurrenceAdded value: +{ + "anyOf": [ + { + "properties": { + "ends": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "every": { + "default": 1, + "maximum": 366, + "minimum": 1, + "type": "integer" + }, + "freq": { + "enum": [ + "hourly", + "daily", + "weekly", + "monthly", + "yearly" + ], + "type": "string" + }, + "hours": { + "properties": { + "from": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "to": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "minutes": { + "items": { + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "monthDays": { + "items": { + "maximum": 31, + "minimum": -1, + "type": "integer" + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + }, + "months": { + "items": { + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "nthWeekdays": { + "items": { + "properties": { + "nth": { + "maximum": 5, + "minimum": -1, + "type": "integer" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "nth", + "weekdays" + ], + "type": "object" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "skip": { + "items": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "maxItems": 100, + "type": "array" + }, + "starts": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "times": { + "items": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "maxItems": 24, + "minItems": 1, + "type": "array" + }, + "timezone": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "freq", + "timezone" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {\"freq\":\"hourly\"|\"daily\"|\"weekly\"|\"monthly\"|\"yearly\",\"every\":N,\"times\":[\"HH:MM\"],\"weekdays\":[0=Sun…6=Sat],\"monthDays\":[1…31,-1=last],\"nthWeekdays\":[{\"nth\":1…5|-1,\"weekdays\":[…]}],\"months\":[1…12],\"minutes\":[…],\"hours\":{\"from\",\"to\"},\"timezone\":\"<IANA>\",\"starts\",\"ends\",\"skip\":[\"YYYY-MM-DD\"]}. Examples: weekdays at 8 → {\"freq\":\"weekly\",\"weekdays\":[1,2,3,4,5],\"times\":[\"08:00\"],\"timezone\":\"America/Chicago\"}; the last business day of the month → {\"freq\":\"monthly\",\"nthWeekdays\":[{\"nth\":-1,\"weekdays\":[1,2,3,4,5]}],\"timezone\":\"…\"}; every other Friday → {\"freq\":\"weekly\",\"every\":2,\"weekdays\":[5],\"starts\":\"<a Friday>\",\"timezone\":\"…\"}. null clears it." +} - added
Input schema / properties / writesAdded value: +{ + "description": "Tools each run writes with on its own, without asking: the ones the job needs every time, like [\"napkin_tables_add_records\"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed.", + "items": { + "pattern": "^[a-z][a-z0-9_]{1,79}$", + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "name", - "instruction", - "interval" -]New value: +[ + "name", + "instruction" +]
- Added
routines_set_sites - Changed
routines_update2 fields changed- added
Input schema / properties / recurrenceAdded value: +{ + "anyOf": [ + { + "properties": { + "ends": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "every": { + "default": 1, + "maximum": 366, + "minimum": 1, + "type": "integer" + }, + "freq": { + "enum": [ + "hourly", + "daily", + "weekly", + "monthly", + "yearly" + ], + "type": "string" + }, + "hours": { + "properties": { + "from": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "to": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "minutes": { + "items": { + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "monthDays": { + "items": { + "maximum": 31, + "minimum": -1, + "type": "integer" + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + }, + "months": { + "items": { + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "nthWeekdays": { + "items": { + "properties": { + "nth": { + "maximum": 5, + "minimum": -1, + "type": "integer" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "nth", + "weekdays" + ], + "type": "object" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "skip": { + "items": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "maxItems": 100, + "type": "array" + }, + "starts": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "times": { + "items": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "maxItems": 24, + "minItems": 1, + "type": "array" + }, + "timezone": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "freq", + "timezone" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {\"freq\":\"hourly\"|\"daily\"|\"weekly\"|\"monthly\"|\"yearly\",\"every\":N,\"times\":[\"HH:MM\"],\"weekdays\":[0=Sun…6=Sat],\"monthDays\":[1…31,-1=last],\"nthWeekdays\":[{\"nth\":1…5|-1,\"weekdays\":[…]}],\"months\":[1…12],\"minutes\":[…],\"hours\":{\"from\",\"to\"},\"timezone\":\"<IANA>\",\"starts\",\"ends\",\"skip\":[\"YYYY-MM-DD\"]}. Examples: weekdays at 8 → {\"freq\":\"weekly\",\"weekdays\":[1,2,3,4,5],\"times\":[\"08:00\"],\"timezone\":\"America/Chicago\"}; the last business day of the month → {\"freq\":\"monthly\",\"nthWeekdays\":[{\"nth\":-1,\"weekdays\":[1,2,3,4,5]}],\"timezone\":\"…\"}; every other Friday → {\"freq\":\"weekly\",\"every\":2,\"weekdays\":[5],\"starts\":\"<a Friday>\",\"timezone\":\"…\"}. null clears it." +} - added
Input schema / properties / writesAdded value: +{ + "description": "Tools each run writes with on its own, without asking: the ones the job needs every time, like [\"napkin_tables_add_records\"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed.", + "items": { + "pattern": "^[a-z][a-z0-9_]{1,79}$", + "type": "string" + }, + "maxItems": 20, + "type": "array" +}
- Changed
search_workspace1 field changed- changed
Input schema / properties / kinds / items / enumPrevious value: -[ - "flow", - "page", - "dataset", - "eval", - "entry", - "board", - "file", - "shim", - "knowledge_base", - "task", - "rubric", - "review", - "spec", - "source", - "doc", - "sheet", - "diagram", - "interface", - "change", - "folder" -]New value: +[ + "flow", + "page", + "dataset", + "eval", + "entry", + "board", + "file", + "shim", + "knowledge_base", + "task", + "rubric", + "review", + "spec", + "source", + "doc", + "sheet", + "diagram", + "interface", + "change", + "field", + "study", + "metric", + "folder" +]
- Changed
workbench_flows_publish1 field changed- added
Input schema / properties / untriedAdded value: +{ + "description": "true only when the person asked to publish this draft without trying it first.", + "type": "boolean" +}
- Changed
workbench_flows_schedule3 fields changed- changed
Input schema / properties / interval / descriptionPrevious value: -"Cadence: hourly, daily, or weekly."New value: +"Plain cadence: hourly, daily, or weekly. Omit when passing recurrence." - added
Input schema / properties / recurrenceAdded value: +{ + "anyOf": [ + { + "properties": { + "ends": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "every": { + "default": 1, + "maximum": 366, + "minimum": 1, + "type": "integer" + }, + "freq": { + "enum": [ + "hourly", + "daily", + "weekly", + "monthly", + "yearly" + ], + "type": "string" + }, + "hours": { + "properties": { + "from": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "to": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "minutes": { + "items": { + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "monthDays": { + "items": { + "maximum": 31, + "minimum": -1, + "type": "integer" + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + }, + "months": { + "items": { + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "nthWeekdays": { + "items": { + "properties": { + "nth": { + "maximum": 5, + "minimum": -1, + "type": "integer" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "nth", + "weekdays" + ], + "type": "object" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "skip": { + "items": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "maxItems": 100, + "type": "array" + }, + "starts": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "times": { + "items": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "maxItems": 24, + "minItems": 1, + "type": "array" + }, + "timezone": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "freq", + "timezone" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {\"freq\":\"hourly\"|\"daily\"|\"weekly\"|\"monthly\"|\"yearly\",\"every\":N,\"times\":[\"HH:MM\"],\"weekdays\":[0=Sun…6=Sat],\"monthDays\":[1…31,-1=last],\"nthWeekdays\":[{\"nth\":1…5|-1,\"weekdays\":[…]}],\"months\":[1…12],\"minutes\":[…],\"hours\":{\"from\",\"to\"},\"timezone\":\"<IANA>\",\"starts\",\"ends\",\"skip\":[\"YYYY-MM-DD\"]}. Examples: weekdays at 8 → {\"freq\":\"weekly\",\"weekdays\":[1,2,3,4,5],\"times\":[\"08:00\"],\"timezone\":\"America/Chicago\"}; the last business day of the month → {\"freq\":\"monthly\",\"nthWeekdays\":[{\"nth\":-1,\"weekdays\":[1,2,3,4,5]}],\"timezone\":\"…\"}; every other Friday → {\"freq\":\"weekly\",\"every\":2,\"weekdays\":[5],\"starts\":\"<a Friday>\",\"timezone\":\"…\"}. null clears it." +} - changed
Input schema / requiredPrevious value: -[ - "flowId", - "interval", - "input" -]New value: +[ + "flowId", + "input" +]
- Changed
workbench_flows_schedules_update1 field changed- added
Input schema / properties / recurrenceAdded value: +{ + "anyOf": [ + { + "properties": { + "ends": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "every": { + "default": 1, + "maximum": 366, + "minimum": 1, + "type": "integer" + }, + "freq": { + "enum": [ + "hourly", + "daily", + "weekly", + "monthly", + "yearly" + ], + "type": "string" + }, + "hours": { + "properties": { + "from": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "to": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "minutes": { + "items": { + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "monthDays": { + "items": { + "maximum": 31, + "minimum": -1, + "type": "integer" + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + }, + "months": { + "items": { + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" + }, + "nthWeekdays": { + "items": { + "properties": { + "nth": { + "maximum": 5, + "minimum": -1, + "type": "integer" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "nth", + "weekdays" + ], + "type": "object" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "skip": { + "items": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "maxItems": 100, + "type": "array" + }, + "starts": { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "times": { + "items": { + "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", + "type": "string" + }, + "maxItems": 24, + "minItems": 1, + "type": "array" + }, + "timezone": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "weekdays": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "freq", + "timezone" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {\"freq\":\"hourly\"|\"daily\"|\"weekly\"|\"monthly\"|\"yearly\",\"every\":N,\"times\":[\"HH:MM\"],\"weekdays\":[0=Sun…6=Sat],\"monthDays\":[1…31,-1=last],\"nthWeekdays\":[{\"nth\":1…5|-1,\"weekdays\":[…]}],\"months\":[1…12],\"minutes\":[…],\"hours\":{\"from\",\"to\"},\"timezone\":\"<IANA>\",\"starts\",\"ends\",\"skip\":[\"YYYY-MM-DD\"]}. Examples: weekdays at 8 → {\"freq\":\"weekly\",\"weekdays\":[1,2,3,4,5],\"times\":[\"08:00\"],\"timezone\":\"America/Chicago\"}; the last business day of the month → {\"freq\":\"monthly\",\"nthWeekdays\":[{\"nth\":-1,\"weekdays\":[1,2,3,4,5]}],\"timezone\":\"…\"}; every other Friday → {\"freq\":\"weekly\",\"every\":2,\"weekdays\":[5],\"starts\":\"<a Friday>\",\"timezone\":\"…\"}. null clears it." +}
- Added
workbench_tasks_set_sites - Added
workspace_files_sort - Added
workspace_folders_create - Added
workspace_folders_file - Added
workspace_folders_update
8 tool updates
- Changed
compass_links_create3 fields changed- changed
Input schema / properties / sourceId / descriptionPrevious value: -"Id of the interview or page named by sourceKind."New value: +"Id of the interview, email thread, Prism report or page named by sourceKind." - changed
Input schema / properties / sourceKind / descriptionPrevious value: -"Who says this is true: an interview, a page (a DOCUMENT, or the PERSON who told you), or the user."New value: +"Who says this is true: an interview, an email thread, a Prism desk-research report (prism_report), a page (a DOCUMENT, or the PERSON who told you), or the user." - changed
Input schema / properties / sourceKind / enumPrevious value: -[ - "interview", - "page", - "user" -]New value: +[ + "interview", + "page", + "user", + "email_thread", + "prism_report" +]
- Changed
compass_step_claims_propose3 fields changed- changed
Input schema / properties / sourceId / descriptionPrevious value: -"The interview or page id, for those kinds."New value: +"The interview, email thread, Prism report or page id, for those kinds." - changed
Input schema / properties / sourceKind / descriptionPrevious value: -"Who says so: 'interview', 'page', or 'user' (the person you're talking with)."New value: +"Who says so: 'interview', 'email_thread', 'prism_report', 'page', or 'user' (the person you're talking with)." - changed
Input schema / properties / sourceKind / enumPrevious value: -[ - "interview", - "page", - "user" -]New value: +[ + "interview", + "page", + "user", + "email_thread", + "prism_report" +]
- Changed
compass_step_measures_propose2 fields changed- changed
Input schema / properties / sourceId / descriptionPrevious value: -"The interview or page id, for those kinds."New value: +"The interview, email thread, Prism report or page id, for those kinds." - changed
Input schema / properties / sourceKind / enumPrevious value: -[ - "interview", - "page", - "user" -]New value: +[ + "interview", + "page", + "user", + "email_thread", + "prism_report" +]
- Added
prism_research_reports_get - Added
prism_research_reports_list - Added
prism_research_run - Changed
search_workspace4 fields changed- added
Input schema / properties / folderIdAdded value: +{ + "description": "Only search inside this folder and the folders under it (ids from workspace_folders_browse or a folder hit).", + "maxLength": 100, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / kinds / descriptionPrevious value: -"Restrict to these kinds (flow, page, dataset, eval, entry, board). Omit to search everything."New value: +"Restrict to these kinds (file, folder, flow, page, doc, dataset, …). Omit to search everything." - changed
Input schema / properties / kinds / items / enumPrevious value: -[ - "flow", - "page", - "dataset", - "eval", - "entry", - "board", - "file", - "shim", - "knowledge_base", - "task", - "rubric", - "review", - "spec", - "source" -]New value: +[ + "flow", + "page", + "dataset", + "eval", + "entry", + "board", + "file", + "shim", + "knowledge_base", + "task", + "rubric", + "review", + "spec", + "source", + "doc", + "sheet", + "diagram", + "interface", + "change", + "folder" +] - changed
Input schema / properties / q / descriptionPrevious value: -"Case-insensitive substring matched against names/titles."New value: +"Words, any order, case-insensitive. Fewer words find more."
- Changed
workspace_files_read1 field changed- added
Input schema / properties / usedForAdded value: +{ + "description": "The thing you're reading this file to work on (the page, change, flow…), when there is one. The file then shows it was used there, and the thing shows the file it drew on. Leave it out for a general question.", + "properties": { + "id": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "kind": { + "maxLength": 60, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "id" + ], + "type": "object" +}
Related MCP Connectors
Build, run and publish Workbench flows, tasks, shims and knowledge bases.
Manage tickets, run agents and workflows, query tables, and search workspace knowledge.
1Query geospatial datasets, manage workflow jobs, deploy published releases, and search Tilebox docs.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables agents and scripts to explore and query enterprise databases and codebases, search symbols, find references, preview rows, and run read-only queries, and connect to enterprise tools such as issue trackers, source hosts, CI, scanners, and observability. It returns structured JSON for each command.04Apache 2.0

yotta-dev-mcpofficial
AlicenseNot gradedqualityBmaintenanceProvides deterministic local development tools over stdio MCP, including repository mapping, code review, secret and dependency scanning, release checks, whitelisted checks, scaffolding, and workflow state tracking.14 npmMIT- FlicenseAqualityAmaintenanceEnables coding agents to discover schemas, prepare simulations, inspect retained evidence, compare runs, and manage authorized synthetic tools through a standalone stdio client.1-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to inspect operational status and channels, lint human-reviewed plans, search and query ledger data, and run queue-based writes with dry-run defaults and safeguards against unverified or unapproved campaigns.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.