Skip to main content
Glama

Server Details

Governed retail, FMCG, and CPG operational tools: runs, cases, approvals, audit-ready execution.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.2/5.0

Scored across 381 tools

Disambiguation2/5

With 381 tools, there is significant overlap in purpose despite detailed descriptions. For example, multiple upload/complete pairs for different capture types (document, image, video) and several similar list/get functions for Clarity processes and people create ambiguity. Agents would likely struggle to select the correct tool among such a vast set.

Naming Consistency5/5

All tool names follow a consistent camelCase verb-noun pattern (e.g., createCase, getQueue, updateSchedule, deleteSecret). Verbs are used predictably (create, get, list, update, delete, set, remove, attach, etc.), and nouns clearly identify the target resource. This makes naming highly consistent and predictable.

Tool Count1/5

381 tools is an extreme count, far exceeding the typical 3–15 well-scoped range. Even for a comprehensive platform, this volume is overwhelming and indicates a lack of consolidation. The server would be nearly impossible for an agent to navigate effectively.

Completeness5/5

The tool set provides extensive CRUD and lifecycle coverage across all major domains: agents, automations, queues, cases, runs, triggers, schedules, secrets, credentials, skills, files, connections, integrations, Clarity processes/landscape, Pulse dashboards, notifications, and org/team management. There are no obvious missing operations for the stated purpose.

Available Tools

381 tools
acceptClarityCaptureSuggestionAccept Clarity Capture SuggestionAInspect

Accept a pending Process Landscape capture suggestion and create the durable capture request (manager+).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
suggestionIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a mutating, non-idempotent operation. The description adds meaningful behavioral context by stating that a durable capture request is created and that manager+ permission is required, going beyond the raw annotation flags.

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the action and object, then states the outcome and permission requirement. There is no wasted text.

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

Completeness3/5

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

The description covers the core purpose, permission, and outcome, but does not explain the two required parameters or mention alternatives like dismissal. Given no output schema and no parameter descriptions, the definition is adequate but has clear gaps for an agent to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for explaining nodeId and suggestionId. It does not explicitly map either parameter to its meaning, though 'pending Process Landscape capture suggestion' partially implies suggestionId. The nodeId role is left entirely to inference.

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

Purpose5/5

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

The description states a specific verb ('Accept'), a specific resource ('pending Process Landscape capture suggestion'), and the resulting outcome ('create the durable capture request'). It clearly differentiates from siblings like dismissClarityCaptureSuggestion and acceptClarityTeamAssignmentSuggestion by naming the Process Landscape capture suggestion scope.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when a Process Landscape capture suggestion is pending and the user has manager+ permissions. It does not explicitly name alternatives or exclusions, but the role and state requirements give sufficient guidance for selection.

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

acceptClarityLandscapeNodeAccept Clarity Landscape NodeAInspect

Accept a proposed area folder into the active process landscape, so it stops being a proposal and becomes part of the real structure (organization admin+). Only area folders can be accepted; a proposed process becomes real through assignClarityLandscapeNodeTeam instead. Re-accepting an already-active area is a no-op.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYesThe proposed area folder to accept.

TDQS

A3.6/5.0
Behavior1/5

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

The description discloses useful context: organization admin+ permission, area-folder-only constraint, and no-op behavior on re-acceptance. However, it directly contradicts the annotation 'idempotentHint: false' by asserting that re-accepting an already-active area is a no-op, which implies idempotent behavior.

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

Conciseness5/5

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

The description is three sentences with no filler. It front-loads the core purpose, then adds the key constraint, the alternative tool, and the no-op edge case. Every sentence carries useful information.

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

Completeness2/5

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

The description covers purpose, permissions, constraints, and an alternative, but the idempotency contradiction makes the behavioral model unreliable for an agent. Additionally, orgId is left undocumented in both the schema and the description, leaving a meaningful gap for a two-parameter tool.

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

Parameters3/5

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

Schema coverage is only 50%, with nodeId described but orgId not. The description adds meaning by clarifying that nodeId refers to a proposed area folder and that only area folders are valid, but it does not explain orgId beyond its parameter name, leaving part of the input semantics underspecified.

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

Purpose5/5

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

The description uses a specific verb ('Accept') and resource ('proposed area folder'), clearly explaining the state transition from proposal to active structure. It also distinguishes itself from assignClarityLandscapeNodeTeam, so an agent can tell them apart.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool (accepting proposed area folders) and when not to ('proposed process becomes real through assignClarityLandscapeNodeTeam instead'). It also clarifies the no-op behavior for already-active areas, giving clear operational guidance.

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

acceptClarityProcessJoinAccept Clarity Process JoinBInspect

Accept a clarity interview invite link and gain process access.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-idempotent mutation. The description adds that the outcome is gaining process access, but it does not disclose details like token consumption, failure behavior, or authorization requirements. This is acceptable 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.

Conciseness5/5

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

The description is a single efficient sentence that front-loads the action and states the outcome. There is no wasted wording or unnecessary repetition of the title.

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

Completeness3/5

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

For a simple tool with one required parameter and no output schema, the description provides the core idea but leaves parameter semantics and post-acceptance behavior unstated. It is minimally viable but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description never mentions the 'token' parameter directly. It only says 'invite link,' which gives vague context but does not explain that the token comes from the invite link, its format, or how to supply it.

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

Purpose4/5

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

The description uses a specific verb ('Accept') plus a resource ('a clarity interview invite link') and an outcome ('gain process access'), making the tool's purpose clear. It does not explicitly differentiate from sibling tools like getClarityProcessJoinInfo or createClarityInviteLink, but the action is distinct enough.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when a user has a clarity interview invite link and wants to accept it. However, it provides no explicit guidance about alternatives, prerequisites, or cases where this tool should not be used.

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

acceptClarityTeamAssignmentSuggestionAccept Clarity Team Assignment SuggestionAInspect

Accept a pending Process Landscape team-assignment suggestion and durably assign the suggested team (manager+).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
suggestionIdYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate this is not read-only, and the description adds that the assignment is 'durable', clarifying persistence and mutation. It does not disclose whether the accepted suggestion is consumed, whether a previous assignment is overwritten, or any other side effects. Given the annotations, this is 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.

Conciseness5/5

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

The description is a single, tightly worded sentence with no filler, tautology, or repetition of the tool name. It front-loads the action and then gives the essential object and outcome, making it easy to scan.

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

Completeness3/5

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

For a simple two-parameter mutation, the description covers the core purpose and effect, and the annotations cover the read-only/destructive expectations. However, it does not explain how to obtain a valid nodeId or suggestionId, nor what happens after acceptance. An agent would likely need external knowledge or sibling tools to invoke this correctly.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain what nodeId or suggestionId refer to beyond their self-descriptive names. It does not clarify where these IDs come from or how they relate to the 'suggested team' mentioned in the description. The description fails to compensate for the complete lack of parameter documentation.

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

Purpose5/5

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

The description uses a specific verb ('Accept'), identifies the exact resource ('pending Process Landscape team-assignment suggestion'), and states the resulting effect ('durably assign the suggested team'). It clearly differentiates this from sibling tools like dismissClarityTeamAssignmentSuggestion and assignClarityLandscapeNodeTeam by focusing on accepting an existing suggestion rather than dismissing or directly assigning.

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

Usage Guidelines3/5

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

The description implies the tool is for confirming an already-pending team assignment suggestion, which gives some contextual usage guidance. However, it does not explicitly state when to choose this tool over alternatives, nor does it mention related tools such as dismissClarityTeamAssignmentSuggestion or how pending suggestions are discovered. The usage condition is mostly left to inference.

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

acceptRevisionGenerationAccept Revision GenerationAInspect

Accept the reviewed generated configuration and complete the builder run. The saved draft is not activated.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYesThe revision identifier.
builder_run_idYesThe builder run returned by generation or status, belonging to this revision.
expected_started_atYesCopy started_at from the status being reviewed. Each prompt has its own builder run ID; stale review identities return 409.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-destructive, non-idempotent mutation. The description adds meaningful behavioral context by stating the acceptance completes the builder run and that the saved draft is not activated, preventing a likely misinterpretation that acceptance equals activation. No contradiction with annotations was found.

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

Conciseness5/5

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

Two short sentences with no filler. The primary action and outcome are front-loaded, and the critical non-activation caveat is placed second without redundancy.

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

Completeness4/5

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

For a three-parameter tool with fully documented schema properties, the description plus schema provides sufficient guidance for the agent to call it correctly. The one gap is the lack of explicit procedural context about when in the generation/review workflow acceptance should occur, though the description and parameter descriptions imply it well enough.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including the important guidance on expected_started_at and stale review identities returning 409. The description itself adds no parameter-level meaning, 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.

Purpose5/5

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

The description states a specific verb ('Accept') and resource ('reviewed generated configuration') and adds the outcome 'complete the builder run.' It also differentiates from related siblings like activateAutomationRevision by explicitly noting the saved draft is not activated, and from declineRevisionGeneration via the accept/decline contrast.

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

Usage Guidelines3/5

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

The context is implied: use this after reviewing a generated configuration and wanting to complete the builder run. However, it does not explicitly name alternatives such as declineRevisionGeneration, cancelBuilderRun, or resumeBuilderRun, nor does it provide clear when-not-to-use guidance beyond the non-activation clarification.

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

activateAutomationRevisionActivate Automation RevisionAInspect

Activate a revision — promote a draft to live, or roll back to a historic one. Reconciles build/queue/trigger state to the new active revision and, when requested, re-pins the automation's pending unclaimed cases onto it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRevision name recorded on activation (omit to keep the current one)
descriptionNoRevision description recorded on activation (null clears; omit to keep current)
revision_idYesRevision ID
automation_idYesAutomation ID
repin_pending_casesNoRe-pin the automation's pending, unclaimed cases onto the newly activated revision

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only indicate that this is a non-read, non-destructive, non-idempotent operation; the description adds important side effects: build/queue/trigger state is reconciled and pending unclaimed cases can be re-pinned onto the new revision. It also discloses the optional nature of the re-pin via 'when requested.' It does not contradict the annotations.

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

Conciseness5/5

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

Two sentences with no filler; the core action is front-loaded and the side effects are stated compactly. Every clause adds information, so it is appropriately concise.

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

Completeness4/5

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

The description covers the core operation and its main side effects, and the schema fully documents all parameters, so an agent has enough to invoke the tool correctly. It does not describe return values, but there is no output schema and that is not required. Minor gaps like permission requirements or what happens to the previous live revision are not addressed, but the essential context is present.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds useful framing by tying revision_id to 'draft' or 'historic' and repin_pending_cases to the re-pinning side effect, but it does not add meaning beyond what the schema already documents for name and description. Overall it supplements rather than replaces the schema.

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

Purpose5/5

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

States a specific action ('activate') on a specific resource ('automation revision') and clarifies two distinct outcomes: promoting a draft to live or rolling back to a historic revision. This distinguishes it from creation/update siblings like createAutomationRevision and updateRevision. The reconciliation and repinning details further define the tool's unique scope.

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

Usage Guidelines4/5

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

The description gives clear context: use this when you want to change the active revision of an automation, either to publish a draft or to revert. It does not explicitly name alternatives or state when not to use it, but the activation framing is unambiguous enough to guide selection among the revision-related siblings.

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

addAutomationAgentAdd Automation AgentBInspect

Add an agent to an automation on a team that changes its automations without revisions. The agent must not already belong to another automation. Adding an agent that is already a member succeeds unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
automation_idYesAutomation ID

TDQS

B3/5.0
Behavior1/5

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

The description contradicts the annotations: idempotentHint is false, yet the description states that adding an agent that is already a member succeeds unchanged, implying idempotent behavior. This is a direct conflict between structured metadata and free-text behavior.

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

Conciseness4/5

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

Three short sentences, action first, with no wasted words. The phrase 'on a team that changes its automations without revisions' is slightly awkward and costs a point, but the structure is otherwise efficient.

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

Completeness3/5

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

For a simple two-parameter mutation, the description covers the action, context, a precondition, and duplicate-member behavior. It is incomplete because it does not explain the outcome when the agent already belongs to another automation, and the idempotency contradiction leaves the agent with conflicting guidance.

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

Parameters3/5

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

Schema description coverage is 100%, with both agent_id and automation_id described as UUIDs. The description adds no parameter-level detail beyond the schema, 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.

Purpose4/5

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

The description clearly states the action: add an agent to an automation. It also hints at the distinguishing context of automations changed without revisions, which separates it from revision-based sibling tools, though it does not name 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.

Usage Guidelines3/5

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

The description implies this is for non-revision automation workflows and gives a precondition about the agent not belonging to another automation. However, it does not explicitly say when to prefer this over setAutomationRevisionAgent/removeAutomationAgent or what to do if the precondition is violated.

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

addAutomationQueueAdd Automation QueueCInspect

Add a queue to an automation on a team that changes its automations without revisions. The queue must not already belong to another automation. Adding a queue that is already a member succeeds unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID
case_queue_idYesQueue ID

TDQS

C2.7/5.0
Behavior1/5

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

The description says 'Adding a queue that is already a member succeeds unchanged', which describes an idempotent repeat behavior, but the annotations set idempotentHint=false. This is a direct contradiction. The description also does not disclose what happens when the queue already belongs to another automation, which is the most important failure behavior for this operation.

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

Conciseness3/5

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

The description is short and contains three sentences, but the first sentence's phrasing 'on a team that changes its automations without revisions' is confusing and does not earn its place. The second and third sentences are useful behavioral constraints, but the overall structure lacks clarity and flow.

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

Completeness3/5

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

For a simple two-parameter mutation tool, the description covers the core operation and one repeat-behavior nuance. However, it omits error outcomes for the uniqueness violation, any permissions or prerequisites, and a clear statement of the affected automation type. It is minimally viable but leaves important gaps.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters having at least basic descriptions like 'Automation ID' and 'Queue ID'. The description adds a uniqueness constraint but does not enrich parameter meaning beyond what the schema already provides. Baseline 3 is appropriate since the schema carries the parameter documentation burden.

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

Purpose4/5

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

The description clearly states the verb and resource: 'Add a queue to an automation'. The clarification that the queue must not already belong to another automation adds scope. However, the phrase 'on a team that changes its automations without revisions' is awkward and does not cleanly distinguish this tool from revision-related siblings like setAutomationRevisionQueue.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance is provided. The 'without revisions' phrase hints that this tool applies to direct automation edits rather than revision-based workflows, but it never names an alternative or states a selection criterion. The constraints about queue membership are behavioral, not usage routing.

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

addClarityLandscapeNodePersonAdd Clarity Landscape Node PersonAInspect

Add a person involved in the process behind a process landscape node. Name only records a placeholder; supplying an email also gives that person access to the process and emails them an invitation, so only pass an email the user asked you to invite.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
roleNo
emailNo
orgIdYes
nodeIdYesA process landscape node that is linked to a real process.
teamIdNo
teamRoleNo

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses a significant side effect: supplying an email gives the person access and sends an invitation. It also explains that name-only records a placeholder without access. This goes beyond the annotations (which only indicate readOnly, destructive, idempotent flags) and informs the agent of the consequence of including an email. However, it does not mention other potential effects like team membership or failure modes.

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

Conciseness5/5

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

The description is a single, well-structured sentence. It concisely states the main purpose, introduces the key caveat about email, and provides a clear instruction. There is no redundancy or unnecessary detail.

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

Completeness4/5

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

The description covers the core action and important side effect, which is sufficient for an agent to understand what the tool does. It does not mention the return value or output (no schema provided), nor does it explain the optional team parameters. However, for a mutation tool, the essential behavior is captured. The missing details about teamRole and teamId are less critical for basic usage.

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

Parameters3/5

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

The schema has low coverage (only nodeId has a description). The description adds meaning to 'name' (placeholder) and 'email' (triggers access/invitation), but does not explain orgId, teamId, teamRole, or role. Since the schema only describes 14% of parameters, the description only partially compensates, leaving several parameters ambiguous.

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

Purpose5/5

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

The description clearly states the action 'Add a person' and the resource 'process landscape node'. It also distinguishes from sibling tools like batchAddClarityLandscapeNodePeople by implying a single-person add, and from updateClarityLandscapeNodePerson by indicating an add operation. The mention of email invitation further clarifies the purpose.

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

Usage Guidelines4/5

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

The description provides specific guidance on when to supply an email ('only pass an email the user asked you to invite'), which is a key usage decision. It implicitly differentiates from batch add by being singular, but does not explicitly state when to prefer this tool over update or batch variants. The email instruction is actionable and prevents unintended side effects.

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

answerPulseDashboardQuestionAnswer Pulse Dashboard QuestionAInspect

Answer a pending question the Duvo Pulse agent asked and resume the paused run (creator or team editors). Use the toolCallId from the dashboard's message transcript.

ParametersJSON Schema
NameRequiredDescriptionDefault
answersYes
artifactIdYes
toolCallIdYes

TDQS

A3.9/5.0
Behavior4/5

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

With annotations already marking this as non-read-only and non-destructive, the description adds useful behavioral context: the tool resumes a paused run and is restricted to creators/team editors. It also explains that toolCallId comes from the dashboard transcript. No contradiction with annotations is present.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It states the action, the governing context, the allowed actors, and the key parameter source in an economical way.

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

Completeness2/5

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

While the description is clear about the tool's purpose and auth scope, it leaves two of three required parameters underspecified in a schema with zero descriptions. There is no output schema, so the description carries the full burden, but it does not explain what artifactId refers to or how the answers object should be populated.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only explains toolCallId's origin. artifactId and the structure/semantics of the answers object are left undefined, leaving an agent to guess what keys and values the answers object expects.

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

Purpose5/5

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

The description states a specific verb and resource: 'Answer a pending question the Duvo Pulse agent asked' and clearly identifies the follow-up effect: 'resume the paused run'. This is not a tautology and is specific enough to differentiate from generic tools like respondToHumanRequest or sendPulseDashboardMessage.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool: only for pending Duvo Pulse agent questions on a paused run, and only for 'creator or team editors'. It also gives a concrete source for toolCallId. It stops short of explicitly naming alternatives or saying when not to use it, so it does not reach a 5.

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

assignCaseLabelsAssign Case LabelsBInspect

Assign one or more labels to a case. Creates the labels on the queue if they don't already exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsYes
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier

TDQS

B3.4/5.0
Behavior3/5

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

The description adds a behavioral detail beyond the annotations: labels are created if they don't already exist. While the annotations already indicate the tool is not read-only, this note clarifies a side effect but does not cover other aspects like error handling 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.

Conciseness5/5

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

The description is a single, concise sentence that immediately states the action and the key side effect. It is well-structured with no redundant or extraneous information, making it easy to parse.

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

Completeness3/5

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

The description covers the primary action and a notable side effect, but it omits details about the return value or any error conditions. Since no output schema is provided, the agent is left without knowledge of what the tool returns, which is a gap for a complete understanding.

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

Parameters2/5

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

The schema describes queue_id and case_id, but the labels parameter lacks a description. The tool description does not compensate, offering no explanation of what 'labels' entails beyond its name. This leaves ambiguity for the labels structure, especially since it contains nested key-value pairs.

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

Purpose5/5

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

The description clearly states the action: 'Assign one or more labels to a case' and adds a specific side effect about creating missing labels. It distinctively describes the tool's function without ambiguity, and the name aligns well with the description.

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

Usage Guidelines2/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives like unlinkCaseLabels or updateCase. It merely states what the tool does, leaving the agent to infer the appropriate context from the tool name and sibling list.

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

assignClarityExtraCaptureRequestAssign Clarity Extra Capture RequestAInspect

Assign (or unassign, with user_id: null) a team member to fulfil an extra-capture request. Restricted to Lead Builders and above.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesTeam member to assign, or null to unassign
process_idYesThe clarity process id
request_idYesThe extra-capture-request id
transformation_proposal_idYesThe automation proposal id

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-idempotent, non-destructive write operation. The description adds the unassign behavior and role restriction, but it doesn't disclose side effects such as whether an existing assignee is replaced or what happens if the request is already assigned.

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

Conciseness5/5

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

The description is a single sentence that efficiently captures the action, the unassign mechanism, and the permission restriction. There is no filler or redundant restatement of the tool name.

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

Completeness4/5

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

For a four-parameter mutation with no output schema, the description covers the essential call semantics: what the tool does, how to unassign, and who is allowed to use it. It doesn't explain state assumptions or return behavior, but the schema already documents all required parameters, making the description sufficient for a straightforward assignment operation.

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

Parameters3/5

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

The input schema covers all four parameters with descriptions, so the schema is doing the heavy lifting. The description adds little parameter-level meaning beyond the schema; the user_id: null unassign behavior is already stated in the schema itself.

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

Purpose4/5

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

The description states a precise action: assign (or unassign) a team member to fulfil an extra-capture request. The verb and resource are clear and specific. It doesn't explicitly contrast with sibling assign tools like assignClarityLandscapeCaptureRequest, but the resource naming is distinct enough.

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

Usage Guidelines3/5

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

The description gives concrete usage clues: pass user_id: null to unassign, and the tool is restricted to Lead Builders and above. However, it doesn't explain when this tool should be chosen over sibling assignment tools or provide exclusions, so the agent must infer selection from the name.

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

assignClarityLandscapeCaptureRequestAssign Clarity Landscape Capture RequestAInspect

Assign an open Process Landscape capture request to a team member, or unassign it by sending userId: null (manager+).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
userIdYes
requestIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint: false) and not destructive. The description adds meaningful behavioral detail by specifying the manager+ permission requirement and the null-userId unassignment mechanism, which are not present in 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.

Conciseness5/5

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

The entire description is one efficient sentence that front-loads the primary action, states the object, and adds the unassignment variant plus permission level. Every clause earns its place with no filler.

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

Completeness3/5

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

The description covers the core behavior, target state, permission, and null-unassign case, which is enough for tool selection. However, with no output schema and no explanation of nodeId or requestId, an agent may still need domain context to invoke correctly, and there is no mention of behavior if the request is already assigned.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain the parameters. It clearly explains userId semantics (null means unassign), but nodeId and requestId are left implicit — the description does not state which ID identifies the capture request versus the landscape node. This leaves a meaningful gap for a 3-parameter tool with no schema descriptions.

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

Purpose5/5

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

The description names a specific action (assign/unassign), a specific resource (open Process Landscape capture request), and the target (team member). It also explicitly distinguishes unassignment via userId: null, which differentiates it from sibling tools like assignClarityExtraCaptureRequest or assignClarityLandscapeNodeTeam.

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

Usage Guidelines4/5

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

The description gives clear context for when the tool applies: the capture request must be open, the caller should be manager+, and unassignment is done by passing userId: null. It does not explicitly name alternative tools or state when not to use it, 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.

assignClarityLandscapeNodeTeamAssign Clarity Landscape Node TeamA
Idempotent
Inspect

Set the owning team of a process in the process landscape (organization admin+). On a proposed process this accepts the proposal and creates the real process for that team; on an existing process it moves the process, its captures and its brief to another team.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
intentNoPass "accept-proposal" when the node is expected to still be a proposed process; the call then fails if someone already accepted it, instead of silently moving a real process.
nodeIdYesThe process node whose owning team changes.
teamIdYesThe team that owns the process from now on. A process always belongs to a team, so null is rejected.

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses the side effects of moving captures and briefs, and explains the special behavior when intent is 'accept-proposal'. It also notes that null team is rejected. This aligns with the idempotent and non-destructive annotations without contradiction.

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

Conciseness5/5

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

The description is concise and well-structured, fitting two sentences without unnecessary detail. It front-loads the core action and then elaborates with conditional behavior, making it easy to parse.

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

Completeness4/5

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

The description provides enough context to call the tool correctly for both proposed and existing nodes, and mentions the moving of captures and briefs. The absence of an output schema is acceptable, and the behavioral nuances are covered. Minor lack of explicit 'when not to use' is not critical.

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

Parameters4/5

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

The schema provides descriptions for intent, nodeId, and teamId, clarifying their roles and constraints. The orgId lacks a description, but its purpose is inferable. The tool description reinforces parameter behavior but doesn't add significant new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's primary action ('Set the owning team of a process in the process landscape') and distinguishes behavior for proposed vs. existing processes. It also notes the admin permission requirement, which helps agents understand scope.

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

Usage Guidelines4/5

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

The description implicitly guides usage by explaining what happens in each scenario (accepting a proposal vs. moving an existing process). However, it does not explicitly contrast with sibling tools or state when to choose this over alternatives like acceptClarityLandscapeNode.

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

assignClarityProcessLabelsAssign Clarity Process LabelsCInspect

Assign process tags to a process.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
labelsNo
labelIdsNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description must explain side effects. It does not disclose whether assigning labels replaces existing process labels or appends to them, whether labels are created inline or referenced by ID, or what the response looks like. The word 'assign' only signals mutation without adding meaningful behavioral detail.

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

Conciseness4/5

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

The description is a single sentence with no filler, making it easy to scan and front-loaded with the main action. It is concise, though it is too sparse to be considered a fully developed definition.

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

Completeness2/5

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

For a three-parameter mutation tool with no output schema and no parameter descriptions, one sentence is not enough. It does not state whether labels and labelIds are alternatives, whether the operation replaces or adds tags, or what happens when only id is supplied, leaving agents unable to invoke it confidently.

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

Parameters1/5

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

The schema has 0% description coverage and the description adds no parameter-level meaning. It leaves the crucial labels-vs-labelIds distinction ambiguous, does not mention colorHue, and does not clarify that id is required while labels and labelIds are optional in the schema.

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

Purpose4/5

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

The description uses a specific verb ('assign') and identifies both the object ('process tags'/'labels') and the target ('a process'), so the core operation is clear. It does not explicitly distinguish itself from close siblings such as createClarityProcessLabel or assignClarityLandscapeNodeTeam, but it is not a tautology or misleading.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool instead of alternatives like assignCaseLabels, assignClarityExtraCaptureRequest, or unlinkClarityProcessLabels. The sentence merely restates the action and provides no conditions, exclusions, or selection criteria.

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

attachPulseDashboardConnectionAttach Pulse Dashboard ConnectionBInspect

Attach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (requires edit access).

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
connection_idYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-read, non-idempotent mutation. The description adds the edit-access requirement and the effect of enabling the agent's tools on the dashboard, which is useful context. It does not disclose whether attaching is additive vs. replacing existing connections, but it is not misleading.

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

Conciseness4/5

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

One sentence, front-loaded with the action and target, and the parenthetical clarifications ('data sources', 'requires edit access') earn their place. It is efficient without being terse to the point of ambiguity.

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

Completeness3/5

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

For a 2-param mutation with no output schema, the description covers the core action and the key prerequisite (edit access). It falls short of complete because it doesn't state whether the attachment replaces or appends to existing connections, and there is no mention of validation effects or error conditions. Still adequate for an agent to attempt the call correctly.

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

Parameters3/5

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

Schema description coverage is 0%, but the parameter names are strongly self-descriptive: artifactId clearly refers to the dashboard and connection_id to the data source. The description maps 'connections (data sources)' to connection_id and 'dashboard' to artifactId, providing just enough disambiguation. Since param names carry most of the meaning, a 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb ('Attach'), a resource ('connections/data sources'), and a target ('a Duvo Pulse dashboard'), and adds the agent-relevant outcome ('so the agent can use its tools'). It is clear enough to distinguish from siblings like detachPulseDashboardConnection, though it doesn't name that sibling explicitly.

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

Usage Guidelines3/5

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

The description implies the usage context: attaching an existing connection to a dashboard, and it parenthetically adds the prerequisite 'requires edit access'. However, it does not state when to prefer this over listPulseDashboardConnections or createConnection, nor give any exclusions or alternatives.

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

attachQueueJsonSchemaAttach Queue Json SchemaAInspect

Put a queue on an existing Case schema, so both queues share one document and a later change moves them together. The queue must not already have a schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
family_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations are all false, so they convey only that this is a mutating, non-idempotent, non-destructive operation in a closed world. The description adds meaningful behavioral context beyond that: the queue and Case will 'share one document' and 'a later change moves them together,' plus the precondition that the queue must not already have a schema. It does not mention failure behavior if the precondition is violated.

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

Conciseness5/5

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

Two sentences with no filler. The core action is front-loaded, the consequence is explained, and the precondition is delivered in the second sentence. Every word earns its place.

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

Completeness3/5

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

The conceptual model and precondition are covered, and there is no output schema to document. The main gap is that family_id — one of only two required parameters — is undefined in both the schema and the description, which an agent needs to call the tool correctly. The relationship to createQueueJsonSchema is also left implicit rather than explicit.

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

Parameters2/5

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

Schema coverage is only 50%: queue_id is described in the schema but family_id has no description. The tool description does not compensate — it never explains what family_id refers to (presumably the Case schema family), leaving half the required parameters semantically ambiguous for the agent.

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

Purpose5/5

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

The description states a specific action and resource: 'Put a queue on an existing Case schema.' It further explains the resulting shared-document behavior, which distinguishes this from siblings like createQueueJsonSchema (new schema) and detachQueueJsonSchema (remove attachment) 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.

Usage Guidelines4/5

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

The phrase 'existing Case schema' establishes the context: use this when a Case schema already exists and a queue needs to be joined to it, as opposed to creating a fresh schema. It also states the precondition 'The queue must not already have a schema.' However, it does not explicitly name alternatives or say when not to use it.

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

attachRevisionIntegrationsAttach Revision IntegrationsAInspect

Attach one or more integrations to an agent revision. To pin specific connections after attachment, use pinRevisionIntegrationConnection. IMPORTANT for the case-queue-producer and case-queue-consumer integrations: attaching the integration alone is NOT enough — the slot points at no queue and will fail at runtime until you link at least one queue with replaceRevisionIntegrationQueues. After wiring up, call getRevisionCaseQueueSetup to confirm every case-queue slot has linked_queue_count > 0 before starting work.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
integration_idsYesIntegration IDs (or custom integration IDs) to attach to the revision
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.7/5.0
Behavior4/5

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

The description discloses a critical non-obvious behavior: attaching case-queue integrations alone leaves the slot pointing at no queue and will fail at runtime until queues are linked. It also recommends a verification step. While annotations already indicate this is a mutating operation (readOnlyHint=false), the description adds meaningful behavioral caveats beyond the structured annotations.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action, then the alternative tool, then the important workflow caveat. Every sentence earns its place; no fluff or repetition of schema details.

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

Completeness5/5

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

Given the tool's complexity and lack of an output schema, the description is remarkably complete: it states the action, routes to the correct sibling for pinning, warns about a runtime failure mode, and tells the agent how to verify success. An agent has enough context to invoke this correctly and know when additional steps are required.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for integration_ids by singling out case-queue-producer and case-queue-consumer integrations and explaining their runtime requirements. This goes beyond the schema's generic 'Integration IDs...' description.

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

Purpose5/5

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

The description clearly states the verb and resource: 'Attach one or more integrations to an agent revision.' It also distinguishes itself from the sibling pinRevisionIntegrationConnection by explaining that pinning is a separate follow-up action. This is specific enough for an agent to know exactly 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.

Usage Guidelines5/5

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

It explicitly says to use pinRevisionIntegrationConnection for pinning connections after attachment. It also gives a clear workflow for case-queue integrations: attach → link queues via replaceRevisionIntegrationQueues → verify with getRevisionCaseQueueSetup. This is explicit when-to-use and when-to-use-alternative guidance.

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

attachRevisionLoginAttach Revision LoginBInspect

Attach a login to a revision so the agent can use it during Runs spawned from that revision. Personal logins can only be attached by their owner; team-shared logins require builder permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes
exposedCredentialIdYes

TDQS

B3.2/5.0
Behavior3/5

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

It discloses permission requirements (owner vs builder) but does not mention idempotency, side effects on existing attachments, or what happens if the login is already attached. The description is partially transparent about behavior.

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

Conciseness5/5

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

The description is concise, two sentences long, and contains no redundant or extraneous information. It efficiently conveys the core purpose and a key constraint.

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

Completeness3/5

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

The description provides the primary purpose and permission context, but it does not mention the return value, potential errors, or behavior in edge cases. Given the lack of output schema and parameter descriptions, it is not fully complete from an agent's perspective.

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

Parameters1/5

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

The schema provides no descriptions, and the tool description does not clarify the meaning of parameters like agentId, buildId, or exposedCredentialId. Users cannot infer from the description how these map to the concept of 'attach a login to a revision'.

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

Purpose5/5

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

The description clearly states the action (attach), the resource (login), and the target (revision), and explains the purpose (for use during Runs). It effectively distinguishes this from similar tools by focusing on the specific action and its intent.

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool versus alternatives like attachRevisionSecret or detachRevisionLogin. It provides permission constraints but lacks comparison or selection criteria for an agent.

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

attachRevisionSecretAttach Revision SecretAInspect

Attach an env-var secret to a revision so its keys are injected into Runs spawned from that revision. Personal secrets can only be attached by their owner; team-shared secrets require builder permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes
credentialIdYes

TDQS

A4/5.0
Behavior4/5

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

With annotations carrying only generic false hints, the description adds meaningful behavioral detail: the operational effect on Runs and the ownership/permission constraints. It does not contradict annotations and gives an agent a realistic expectation of 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.

Conciseness5/5

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

Two front-loaded sentences: the first states the action and effect, the second adds permission constraints. No redundant or filler content.

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

Completeness3/5

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

The description covers purpose, effect, and permissions, which is adequate for a simple mutation tool. However, with no output schema, no parameter descriptions, and no annotation details, an agent is left to infer the meaning of the three UUID parameters, so the definition is not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented agentId, buildId, and credentialId. It mentions 'secret' and 'revision' conceptually but never maps those concepts to the actual parameters or explains what each ID refers to.

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

Purpose5/5

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

The description uses a specific verb ('Attach'), names the resource ('env-var secret to a revision'), and states the expected effect ('keys are injected into Runs spawned from that revision'). This clearly differentiates it from siblings like attachRevisionIntegrations and detachRevisionSecret.

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

Usage Guidelines4/5

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

It states clear context for when this operation applies—attaching a secret to a revision for injection into Runs. It adds permission conditions for personal vs team-shared secrets, though it does not explicitly name alternatives or when-not-to-use cases.

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

authorizeMcpOAuthAuthorize Mcp OAuthAInspect

Start an OAuth-based connection with a remote MCP server using Dynamic Client Registration. Returns an authorization URL the user must open in a browser; once they grant consent, Duvo creates the matching connection and redirects the browser to the optional returnUrl.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name to display for the connection.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
return_urlNoWhere to send the user's browser after consent completes. Accepts an absolute URL on a domain Duvo allows, or a path relative to the Duvo frontend (e.g. `/integrations/slack`).
mcp_server_urlYesURL of the MCP server requiring OAuth.
oauth_client_idNoOAuth client ID of a client the user registered on the authorization server themselves (e.g. a NetSuite Integration record). Takes precedence over preregistered credentials and Dynamic Client Registration. Cannot be combined with custom_integration_id. On reconnect, omit to reuse the connection's stored credentials, or provide to replace (rotate) them.
integration_typeNoOptional catalog integration type (e.g. `netsuite`, `asana`). When it names a known MCP OAuth catalog integration and `mcp_server_url` matches that integration's registered server, the connection is treated as a catalog connection; otherwise it requires the custom MCP servers capability.
oauth_client_secretNoClient secret for `oauth_client_id`. Omit for public clients (PKCE-only).
custom_integration_idNoOptional ID of a custom integration this connection should be associated with.
reconnect_instance_idNoWhen set, the OAuth flow will update the existing connection in place rather than creating a new one.

TDQS

A3.8/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it reveals an interactive browser step, that the tool returns an authorization URL, that user consent is required, and that Duvo creates the connection afterward. These are important operational traits that annotations alone do not convey. It does not contradict the annotations.

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

Conciseness5/5

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

The description is a single, dense sentence that front-loads the purpose and then explains the full flow. Every phrase earns its place: the method (Dynamic Client Registration), the intermediate result (authorization URL), the required user action, and the final outcome (connection creation and redirect). No filler or redundancy.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, no output schema), the description is largely complete: it explains the interactive nature, the side effect of creating a connection, and the returnUrl behavior. It does not cover failure scenarios or mention prerequisites like required capabilities, but the schema covers parameter-level details well enough.

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

Parameters3/5

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

Schema description coverage is 100%, so the individual parameters are already fully documented. The description adds some context by mentioning Dynamic Client Registration and the optional returnUrl behavior, but it does not substantially explain parameters 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.

Purpose4/5

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

The description states a specific verb and resource: 'Start an OAuth-based connection with a remote MCP server using Dynamic Client Registration.' It clearly explains the tool's core function and outcome (returns an authorization URL, creates a connection after consent). However, it does not explicitly distinguish itself from sibling tools like startNativeOAuth or checkMcpOAuth, 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.

Usage Guidelines3/5

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

The usage context is reasonably implied: use this tool when you need to establish an OAuth connection to a remote MCP server. Yet the description never explicitly names alternatives, such as startNativeOAuth or probeMcpServer, or states when not to use this tool. This leaves the agent to infer routing from tool names rather than from explicit guidance.

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

batchAddClarityLandscapeNodePeopleBatch Add Clarity Landscape Node PeopleAInspect

Add one or more people to multiple Process Landscape nodes in a bounded batch. Email entries can create invitations; each node-person outcome reports success, conflict, or delivery failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
peopleYes
nodeIdsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations indicate non-read-only and non-idempotent behavior, and the description adds valuable context: email entries can create invitations, and each node-person outcome can report success, conflict, or delivery failure. This goes beyond the annotations by revealing side effects and per-item status granularity.

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

Conciseness5/5

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

The description is two sentences with the action and scope front-loaded, followed by the most important behavioral outcomes. Every sentence contributes information, and there is no redundant or vague filler.

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

Completeness3/5

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

For a mutating batch tool with no output schema and no field-level descriptions, the description covers the core action, bounded scope, invitation side effect, and outcome categories. However, it lacks explicit guidance on choosing this over the singular sibling, does not mention prerequisites or permission needs, and does not describe the expected response structure for the reported outcomes.

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

Parameters2/5

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

With schema description coverage at 0%, the description needed to compensate, but it only glosses over parameters as 'people' and 'Process Landscape nodes' and adds that email entries can create invitations. It does not explain the meaning of processRole, teamRole, or the relationship between nodeIds and people beyond the schema's raw names and constraints.

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

Purpose5/5

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

The description states a specific verb, resource, and scope: 'Add one or more people to multiple Process Landscape nodes in a bounded batch.' It also distinguishes itself from the singular sibling addClarityLandscapeNodePerson by emphasizing the multi-node batch nature and mentions the invitation side effect.

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

Usage Guidelines3/5

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

The description implies batch usage across multiple nodes and mentions boundedness, but it does not explicitly state when to use this tool versus addClarityLandscapeNodePerson or any alternatives. There are no exclusion criteria, prerequisites, or direct sibling comparisons, so the agent must infer the appropriate choice from the tool name and phrasing.

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

buildClarityAutomationBuild Clarity AutomationAInspect

Hand an automation proposal for a v2 clarity process off to the workflow-builder pipeline. Builds from transformation_proposal_id when supplied, otherwise from the process's live proposal. The proposal id is the durable idempotency key, so retries return the same run and a different proposal starts a new run. Returns 202 while the LLM run completes asynchronously, or 409 when the resolved proposal is still being written.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idYesThe clarity process id
transformation_proposal_idNoAutomation-proposal snapshot to build the automation from. Defaults to the process's live proposal.

TDQS

A3.5/5.0
Behavior1/5

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

The description claims the proposal id is a durable idempotency key and that retries return the same run, but annotations declare idempotentHint=false. This is a direct contradiction between the described behavior and the annotation metadata, which the scoring rules treat as a serious failure.

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

Conciseness5/5

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

The description is compact and well-structured: it states the action, explains the input-resolution rule, covers idempotency, and describes the two relevant HTTP statuses. Every sentence adds useful information without padding.

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

Completeness4/5

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

The description covers the key operational behaviors: input selection, idempotency, asynchronous completion, and conflict handling. It does not mention how to track the resulting run or what a successful response body contains, but for a fire-and-forget async build tool the provided context is largely sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that transformation_proposal_id defaults to the process's live proposal and acts as an idempotency key, giving the agent a better understanding of how the parameter controls execution.

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

Purpose4/5

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

The description clearly states the tool's function: handing an automation proposal off to the workflow-builder pipeline and building an automation from a proposal. It is specific about the resource and action, though it does not explicitly differentiate itself from sibling tools like createAutomation or updateAutomation.

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

Usage Guidelines4/5

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

The description provides clear context on how the tool selects its input: it uses transformation_proposal_id when supplied, otherwise the process's live proposal. It does not explicitly state when to use this tool versus alternative automation-creation tools, but the parameter-selection logic is clear.

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

bulkCreateTeamInvitesBulk Create Team InvitesAInspect

Invite several people to a team in one call, emailing each invitation immediately. Returns per-batch counts: succeeded were invited, skipped were already on the team, already had a pending invitation, or were a duplicate of an earlier entry in the same batch, failed could not be emailed (those invitations are rolled back). The accept link is always built from the server-configured app origin.

ParametersJSON Schema
NameRequiredDescriptionDefault
membersYesPeople to invite, at most 50 per request. An email already on the team, or already holding a pending invitation, is skipped rather than failing the batch.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
frontendUrlNoDeprecated. Accepted for backward compatibility and IGNORED: the accept link is always built from the server-configured app origin, so a caller cannot point invitation emails at another host.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses immediate emailing, per-batch outcome categories, rollback of failed invites, and the server-controlled accept-link origin. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences with no filler: the main action is first, followed by the return semantics, then a clarifying note about the accept link. Every sentence earns its place.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining return values; it defines succeeded/skipped/failed and rollback. Combined with the detailed team_id parameter schema, an agent has what it needs to invoke the tool correctly without guessing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value by explaining member-level outcomes (succeeded/skipped/failed), duplicate handling within the same batch, and rollback semantics for failed emails, which the schema does not fully spell out.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Invite several people to a team in one call, emailing each invitation immediately.' The bulk scope is explicit, which distinguishes it from single-invitation siblings such as createTeamInvite without needing to open the schema.

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

Usage Guidelines4/5

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

Batch context is clear and the team_id parameter guidance is unusually specific (API keys pinned to one team should omit or pass the same team; OAuth callers should pass the target team). It stops short of explicitly naming an alternative for single invites or stating when not to use the tool, but the context is clear enough.

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

bulkReprocessCasesBulk Reprocess CasesAInspect

Re-process multiple cases on a chosen agent. Any active runs on the selected cases are interrupted first; the cases are then reset to pending and assigned to the chosen agent for the next dispatcher tick. The chosen agent must already be connected to the queue as a case-queue-consumer (with the trigger enabled or disabled).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFree-text search selecting the cases when all_matching is true.
filtersNoFilters selecting the cases when all_matching is true.
agent_idNoThe agent that should run on the selected cases. Must be a consumer of this queue.
case_idsNoExplicit case IDs to act on (1-100). Provide this or set all_matching.
queue_idYesThe queue's unique identifier
all_matchingNoWhen true, act on every case matching the provided filters/search instead of an explicit id list.

TDQS

A3.9/5.0
Behavior5/5

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

The description discloses behavior well beyond the annotations: active runs are interrupted first, cases are reset to pending, and they are queued for the next dispatcher tick. It also surfaces the auth/topology precondition on the agent, giving the agent real operational context that the hints (readOnly=false, destructive=false, idempotent=false) 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.

Conciseness4/5

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

Three sentences that are front-loaded with the core action, then side effects, then the precondition. Nearly every clause earns its place, with only minor redundancy between the interrupt/reset/assign steps.

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

Completeness4/5

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

For a non-idempotent bulk mutation with no output schema, the description covers the critical unknowns: side effects on existing runs, the resulting state, and the agent precondition. It could additionally note the batch size constraint and what the response returns, but 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters, which sets the baseline at 3. The description only adds marginal meaning (clarifying the agent-must-be-a-consumer constraint on agent_id and the pending reset that relates to case selection), without explaining filter/search interaction or the 100-case cap.

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

Purpose4/5

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

The description states a specific verb (re-process) applied to a specific resource (multiple cases) with a target (a chosen agent), which clearly separates it from siblings like bulkUpdateCaseStatus or bulkUpdateCasePriority. It stops short of explicitly naming an alternative tool, so it is clear but not fully sibling-differentiating.

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

Usage Guidelines3/5

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

It gives a real prerequisite (the agent must already be connected to the queue as a case-queue-consumer), which is useful context for when the call will succeed. However, it never states when to prefer this over comparable tools such as startRun or bulkUpdateCaseStatus, leaving usage largely inferred.

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

bulkUpdateCasePriorityBulk Update Case PriorityAInspect

Set the priority of multiple cases. Priority only affects the order pending cases are picked up in: due postponed cases are handled first, then higher priority. It never interrupts runs or changes case status. Set none to clear priority back to the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFree-text search selecting the cases when all_matching is true.
filtersNoFilters selecting the cases when all_matching is true.
case_idsNoExplicit case IDs to act on (1-100). Provide this or set all_matching.
priorityYesTarget priority for each case. `medium`/`high` raise it above the default; `none` clears it.
queue_idYesThe queue's unique identifier
all_matchingNoWhen true, act on every case matching the provided filters/search instead of an explicit id list.

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond annotations (which only say non-readonly, non-destructive, non-idempotent) by explaining exactly what priority affects ('order pending cases are picked up'), what it does NOT do ('never interrupts runs or changes case status'), and how to clear it. This is rich behavioral context that prevents misuse.

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

Conciseness5/5

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

Three tight sentences: action, semantics/constraints, and clearing behavior. No filler. The most important constraint ('never interrupts runs') is front-loaded after the action statement.

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

Completeness4/5

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

For a bulk mutation tool with 6 params (nested filters/search/case_ids selection is complex), the description covers the priority semantics well. However, it doesn't mention the selection mechanism (case_ids vs. all_matching and filters) which is a key aspect of 'bulk' behavior. An agent might benefit from a note on how cases are selected.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters including the `none`/`medium`/`high` enum. The description adds the explicit statement that `none` clears priority, which is mild reinforcement but not substantial new meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Set the priority') and resource ('multiple cases'), clearly separable from siblings like bulkUpdateCaseStatus and updateCase. An agent can distinguish it immediately.

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

Usage Guidelines3/5

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

The description explains the effect of priority but gives no explicit when-to-use vs. alternatives (e.g., bulkUpdateCaseStatus, updateCase). Usage is implied by the tool name and effect description, but no routing guidance is offered.

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

bulkUpdateCaseStatusBulk Update Case StatusAInspect

Update the status of multiple cases to pending, completed, failed, or canceled. Interrupts any active runs and releases their case ownership, but never cancels their human-in-the-loop state — pending requests and open approval batches stay answerable/resolvable from the run view. Settling a case archives the pending requests on every run attached to it, both the runs this call interrupted and any that were already terminal, so they leave the activity inbox instead of outliving the case there. Resetting to pending archives nothing and re-dispatches cases to the queue's trigger consumer.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFree-text search selecting the cases when all_matching is true.
statusYesTarget status for each case. `completed`, `failed`, and `canceled` are terminal — `canceled` records a deliberate human stop, distinct from a system `failed`. `pending` resets the case (the queue's trigger consumer, if any, will re-claim it). `success` is not settable: it means an evaluation passed.
filtersNoFilters selecting the cases when all_matching is true.
case_idsNoExplicit case IDs to act on (1-100). Provide this or set all_matching.
queue_idYesThe queue's unique identifier
all_matchingNoWhen true, act on every case matching the provided filters/search instead of an explicit id list.

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses a rich side-effect surface well beyond the annotations (readOnlyHint=false, destructiveHint=false): it interrupts active runs, releases case ownership, preserves human-in-the-loop state, archives pending requests on both interrupted and already-terminal runs, and distinguishes terminal-status settling from pending resets. It even states what is NOT affected (approval batches stay resolvable), which is precisely the nuance structured hints 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.

Conciseness5/5

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

Three sentences with the core action front-loaded; the two follow-up sentences carry dense but essential side-effect information an agent must weigh before invoking a bulk mutation. No repetition of the title, no restating of annotation values, and no filler — every sentence earns its place.

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

Completeness5/5

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

For a complex bulk-mutation tool with six parameters, a nested filters object, and no output schema, the description comprehensively covers the operation's reach: runs, ownership, HITL state, pending-request archiving, and activity-inbox effects. Combined with the 100% schema coverage for selection semantics, an agent has everything needed to invoke it safely and predict its consequences.

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

Parameters3/5

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

Schema description coverage is 100%: every parameter (queue_id, status, case_ids, all_matching, search, filters) already carries a descriptive schema comment, including the status enum semantics ('success is not settable'), the case_ids/all_matching exclusivity, and the filters role. The prose description adds behavioral context but no parameter-level detail, so the coverage baseline of 3 applies.

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

Purpose5/5

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

The first sentence states a specific verb, resource, and scope: 'Update the status of multiple cases to pending, completed, failed, or canceled.' Enumerating the four supported target statuses removes ambiguity, and the bulk scope clearly separates it from single-case updateCase and from sibling mutations targeting different resources (bulkUpdateCasePriority, bulkReprocessCases).

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

Usage Guidelines4/5

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

The description gives clear operational context for choosing among statuses: settling (terminal statuses) interrupts active runs, releases ownership, and archives pending requests, while resetting to pending re-dispatches cases to the trigger consumer. It stops short of explicitly naming sibling alternatives or stating when-not-to-use, so it earns a 4 rather than a 5.

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

cancelBuilderRunCancel Builder RunAInspect

Cancel a running builder run and pause its sandbox

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesCancel an in-progress generation; review-pending changes must be declined instead.
builder_run_idYesThe builder run identifier.

TDQS

A4/5.0
Behavior3/5

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

The annotations already signal a mutating action (readOnlyHint=false) and non-idempotency (idempotentHint=false), so the description only needs to add context. It usefully discloses the sandbox pause side effect, but it does not explain reversibility or whether the run can later be resumed.

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

Conciseness5/5

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

A single crisp sentence with no filler. The core action and the non-obvious sandbox-pause effect are both front-loaded, and every word earns its place.

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

Completeness4/5

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

For a low-complexity two-parameter cancel action, the definition covers the action, the side effect, and the main state constraint. There is no output schema, so return behavior is not described, but annotations cover idempotency/safety signals and the schema covers parameters, leaving no critical gap for invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The builder_run_id description is generic, while the status description adds the key constraint ('review-pending changes must be declined instead'); the tool description itself adds no further parameter meaning.

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

Purpose5/5

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

The description uses specific verbs and resources: 'Cancel a running builder run' plus the explicit side effect 'pause its sandbox'. This clearly differentiates it from siblings like resumeBuilderRun and general stopRun without needing to open the schema.

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

Usage Guidelines4/5

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

The phrase 'running builder run' establishes a clear precondition, and the status parameter description adds an exclusion: review-pending changes must be declined instead. It does not name an alternative tool, but the context is concrete enough to route an agent correctly.

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

checkMcpOAuthCheck Mcp OAuthBInspect

Probe an MCP server URL to discover whether it supports OAuth Dynamic Client Registration. Returns the authorization endpoint and required scopes when supported. Useful as a precursor to /v2/teams/:team_id/connections/oauth/mcp/start or /v2/teams/:team_id/connections. Performs no writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
mcp_server_urlYesURL of the MCP server to probe for OAuth support.

TDQS

B3.3/5.0
Behavior1/5

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

The description states 'Performs no writes,' which directly contradicts the readOnlyHint=false annotation. This is a serious inconsistency: the annotation implies the tool may modify state while the description asserts it never writes. Because the description contradicts structured metadata, it earns the minimum score and should be flagged.

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

Conciseness5/5

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

The description is three sentences with no filler: it states the action, the return value, the intended precursor role, and the non-writing behavior. Key information is front-loaded before secondary details.

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

Completeness3/5

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

For a low-complexity single-parameter tool with no output schema, the description covers the main purpose and partially describes returns ('authorization endpoint and required scopes when supported'). However, it does not explain what happens when OAuth Dynamic Client Registration is not supported, and the annotation contradiction undermines the reliability of the tool's behavioral contract.

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

Parameters3/5

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

The single parameter mcp_server_url has 100% schema description coverage, so the schema already explains it as 'URL of the MCP server to probe for OAuth support.' The description adds no extra semantic detail beyond what the schema provides, 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.

Purpose4/5

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

The description clearly identifies a specific action (probe an MCP server URL), a resource (MCP server), and a concrete outcome (discover OAuth Dynamic Client Registration support, return authorization endpoint and scopes). It does not explicitly differentiate itself from the similar sibling 'probeMcpServer', so it falls 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.

Usage Guidelines4/5

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

The description gives clear usage context by naming the endpoints this tool is a precursor to ('/v2/teams/:team_id/connections/oauth/mcp/start' and '/v2/teams/:team_id/connections'). However, it does not mention alternatives like probeMcpServer or state when not to use it, so no exclusions are provided.

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

completeClarityArtifactImportComplete Clarity Artifact ImportAInspect

Complete a Miro artifact import after uploading to the signed URL. The uploaded bytes are validated before the import becomes a usable Clarity capture.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameYesName of the Miro export file. Supported extensions: .svg, .xml, .png, .jpg, .jpeg
capture_idYesThe pending capture id returned by the upload-url endpoint
process_idYesThe clarity process id
content_typeYesMIME type of the uploaded Miro export file

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already signal this is a non-read-only, non-idempotent operation. The description adds a useful behavioral detail: uploaded bytes are validated before the import becomes a usable capture. It does not disclose failure behavior or what happens if validation fails, but it provides more context than the annotations alone.

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

Conciseness5/5

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

Two short sentences with no filler or repetition. The core action is front-loaded, and the validation step is presented as a meaningful second sentence.

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

Completeness3/5

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

The description covers the main flow and outcome, and the schema fully documents parameters, but it omits response semantics and failure behavior for validation. For a non-idempotent state-changing tool without an output schema, this is a minimal but slightly incomplete definition.

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

Parameters3/5

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

The input schema already documents all four parameters with descriptions and constraints at 100% coverage. The description adds general workflow context but no parameter-specific meaning beyond what the schema provides, 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.

Purpose4/5

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

The description identifies a specific verb ('complete') and resource ('Miro artifact import'), and adds process context about uploading to a signed URL and becoming a usable Clarity capture. It is distinguishable from sibling upload-completion tools by 'artifact import,' though it does not explicitly contrast them.

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

Usage Guidelines4/5

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

The description clearly states the temporal context: call this tool after uploading to the signed URL. It does not mention alternatives or exclusions, but the sequencing is explicit enough for an agent to understand when in the workflow this belongs.

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

completeClarityDocumentUploadComplete Clarity Document UploadAInspect

Complete a document capture after uploading to GCS via signed URL

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the uploaded document file
captureIdYesThe capture ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-idempotent, non-destructive mutation, so there is no contradiction. The description adds the useful precondition that the upload must already have happened, but it does not disclose what state changes occur, whether repeated calls fail, or what downstream effects completion triggers.

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

Conciseness5/5

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

A single sentence with the action front-loaded and the key prerequisite included. There is no redundant restatement of the schema or filler.

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

Completeness4/5

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

For a simple three-parameter completion step with fully documented parameters, the description gives the essential workflow context: this call finalizes a document capture after the GCS signed-URL upload. It does not describe return values or detailed side effects, but those are not necessary for a basic completion call given the schema and annotations.

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

Parameters3/5

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

The schema covers 100% of parameters with meaningful descriptions: id, captureId, and fileName are all explained. The description adds no parameter-level details beyond the schema, so it meets the baseline for high schema coverage without needing to compensate.

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

Purpose4/5

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

The description identifies a concrete action ('Complete a document capture') and a specific workflow step ('after uploading to GCS via signed URL'), which separates it from upload-creation tools and from image/video completion tools. It does not explicitly contrast with completeClarityOrganizationDocumentUpload or completeClarityTeamDocumentUpload, so some sibling differentiation relies on the tool name.

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

Usage Guidelines3/5

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

The phrase 'after uploading to GCS via signed URL' provides a clear temporal condition and tells the agent when in the workflow this tool should be called. However, it does not name alternative completion tools or state when to prefer the organization/team/artifact variants, leaving routing to inference.

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

completeClarityImageUploadComplete Clarity Image UploadAInspect

Complete an image capture after uploading it to GCS via a signed URL

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the uploaded image file
captureIdYesThe capture ID

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already establish this is a non-read-only, non-idempotent, non-destructive write. The description adds one genuinely useful behavioral trait beyond that: the hard prerequisite that the GCS upload via signed URL must happen first. However, it does not disclose what 'complete' does to the capture's state, what happens if invoked before the upload, or the consequences of calling twice (relevant given idempotentHint=false).

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

Conciseness5/5

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

A single 15-word sentence that front-loads the verb and object, then appends the only necessary context (the GCS signed-URL prerequisite). There is no redundancy with the title, no fluff, and every word contributes.

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

Completeness3/5

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

For a tool with 3 required params, no output schema, and no nested objects, the description covers the basic what and when. But it leaves gaps: it never references the createClarityImageUploadUrl pairing that produces the signed URL, it does not clarify how the three IDs relate to the upload flow, and with no output schema it says nothing about what a successful completion returns or triggers.

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

Parameters3/5

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

Schema description coverage is 100% — each of the three parameters (id, captureId, fileName) has a description in the schema. Per the baseline for high coverage, the description need not repeat param details, and it doesn't. The description adds no extra meaning about which ID maps to which part of the flow, but the schema already carries the documentation burden adequately.

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

Purpose5/5

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

The description uses a specific verb ('Complete') with a specific resource ('an image capture') and adds the scoping context ('after uploading it to GCS via a signed URL'). This cleanly distinguishes it from the sibling family: completeClarityVideoUpload, completeClarityDocumentUpload, and the other complete* tools differ by resource type (image vs video vs document/artifact).

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

Usage Guidelines4/5

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

The phrase 'after uploading it to GCS via a signed URL' gives clear sequencing context: this is the second step of a two-phase flow, implicitly paired with a URL-creating tool like createClarityImageUploadUrl. It does not explicitly name alternatives or state exclusions (e.g., 'use completeClarityVideoUpload for videos'), so it stops short of full when-not-to-use guidance.

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

completeClarityOrganizationDocumentUploadComplete Clarity Organization Document UploadAInspect

Complete an organization document capture after uploading to GCS; extracts text and stores it as a transcript so it feeds Process Landscape generation

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
fileNameYesName of the uploaded document file
interviewIdYesThe organization interview ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark it non-read-only and non-destructive; the description adds useful behavioral context by stating it extracts text, stores a transcript, and feeds Process Landscape generation. It does not mention idempotency consequences, but idempotentHint=false already signals that risk.

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

Conciseness5/5

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

A single, front-loaded sentence states the action, the precondition, the processing behavior, and the downstream consumer with no filler. Every clause contributes to helping the agent decide and invoke the tool.

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

Completeness4/5

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

For a 3-parameter, multi-step completion operation with no output schema, the description covers the main workflow and downstream outcome, which is enough for a capable agent. The main gap is that it does not describe the return value or what happens on failure, but these are minor against the clear purpose and schema coverage.

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

Parameters3/5

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

The schema describes interviewId and fileName but leaves orgId undocumented at 67% coverage. The description does not add parameter-specific meaning or explain how orgId/interviewId/fileName relate to the capture, so it neither compensates for the missing orgId description nor enriches the covered parameters.

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

Purpose5/5

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

The description uses a specific verb ('complete'), identifies the resource ('organization document capture'), and defines what completion entails: text extraction and transcript storage for Process Landscape generation. This distinguishes it from sibling upload-completion tools like completeClarityTeamDocumentUpload or completeClarityImageUpload.

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

Usage Guidelines3/5

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

It states a clear precondition ('after uploading to GCS') and implies the organization-document workflow, but it does not name alternatives or say when not to use it. An agent must infer that this is the org-specific counterpart to completeClarityDocumentUpload rather than being told.

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

completeClarityTeamDocumentUploadComplete Clarity Team Document UploadAInspect

Complete a team document capture after uploading to GCS; extracts text and stores it as a transcript so it feeds Process Landscape generation

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
fileNameYesName of the uploaded document file
interviewIdYesThe team interview ID

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses the key state-changing behavior beyond the annotations: it 'extracts text and stores it as a transcript'. This aligns with readOnlyHint=false and destructiveHint=false, and adds useful context about what happens when the tool is invoked. It does not discuss idempotency or failure modes, but the core behavioral trait is transparent.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and context, then states the purpose. Every clause earns its place: the GCS precondition, the extraction/storage behavior, and the downstream use. There is no extraneous information.

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

Completeness4/5

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

For a tool with no output schema and three well-documented parameters, the description gives the essential operational context: when to call it, what it does, and why it matters. It could mention return behavior or error conditions if the GCS upload hasn't happened, but those are not critical for basic selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents interviewId, fileName, and team_id thoroughly. The tool description adds no additional parameter-specific meaning, which is acceptable at the baseline given the schema's strong coverage.

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

Purpose5/5

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

The description names a specific verb ('Complete'), a specific resource ('team document capture'), and the concrete outcome ('extracts text and stores it as a transcript'). The phrase 'after uploading to GCS' clearly situates it in a two-step upload pipeline, and 'team' distinguishes it from sibling tools like completeClarityDocumentUpload and completeClarityOrganizationDocumentUpload.

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

Usage Guidelines4/5

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

The description gives a clear sequential context: use this after the file has been uploaded to GCS. It also signals downstream relevance by noting the transcript 'feeds Process Landscape generation'. It does not explicitly enumerate when-not-to-use or name alternative sibling tools, but the team-specific wording makes the intended context clear.

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

completeClarityVideoUploadComplete Clarity Video UploadAInspect

Complete a video capture after uploading to GCS via signed URL

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the uploaded video file
captureIdYesThe capture ID

TDQS

A4/5.0
Behavior3/5

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

Annotations already signal that this is a non-read-only, non-idempotent mutation, so the description does not need to repeat those hints. It adds the useful sequencing context that the upload must already have happened, but it does not disclose what 'complete' does to the capture (e.g., status transition, validation, irreversibility).

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It leads with the action and resource, then adds the essential precondition, making it efficient for an agent to parse.

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

Completeness4/5

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

For a three-parameter tool with no output schema and no nested objects, the description plus schema is adequate to invoke the tool: it names the action, the resource, and the required precondition. It could be more explicit about what completing the upload entails or that it pairs with createClarityVideoUploadUrl, but nothing essential is missing for correct invocation.

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

Parameters3/5

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

The input schema already documents all three parameters with clear descriptions (clarity process ID, capture ID, uploaded file name) at 100% coverage. The description adds no parameter-specific semantics beyond tying fileName to the GCS upload flow, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Complete a video capture') and the resource ('video capture'), with an explicit precondition ('after uploading to GCS via signed URL'). The word 'video' plus the completion-vs-creation verb clearly sets it apart from sibling tools like createClarityVideoUploadUrl and the other complete* upload variants.

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

Usage Guidelines4/5

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

It clearly indicates the triggering condition: the tool should be called only after the video file has been uploaded to GCS via a signed URL. It does not explicitly name alternative tools or list when-not-to-use scenarios, but the context is sufficient for basic selection.

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

consumeAgentSuggestionConsume Agent SuggestionAInspect

Apply a suggestion: stage its change into the Agent's draft revision, then auto-clear any pending suggestions it makes moot.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe suggestion's unique identifier
revision_idNo
create_new_draftNo
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4/5.0
Behavior4/5

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

Beyond the annotations, the description discloses two meaningful side effects: the suggestion's change is staged into the Agent's draft revision, and pending suggestions made moot are auto-cleared. This is valuable behavioral context that complements the non-readonly annotation without contradicting it.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the core action and includes the most important side effect. Every word earns its place with no filler or redundancy.

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

Completeness4/5

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

For a mutating action with no output schema, the description captures the essential behavior: applying, staging into a draft, and clearing moot suggestions. It could mention what happens to the applied suggestion itself or failure conditions, but the core calling context is sufficiently clear.

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

Parameters3/5

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

Schema coverage is only 50%, with revision_id and create_new_draft lacking descriptions, and the tool description does not directly explain those parameters. However, the phrase 'Agent's draft revision' provides useful context for understanding revision-related fields, and selected_automation_revision_id already has a thorough schema description.

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

Purpose5/5

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

The description states a clear verb and resource: 'Apply a suggestion' and then explains the exact mechanism — staging the change into the Agent's draft revision and auto-clearing moot suggestions. This is specific enough to distinguish it from rejectAgentSuggestion and the Clarity-focused accept/dismiss suggestion tools.

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

Usage Guidelines3/5

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

The primary usage is implied by the verb 'Apply' — use this tool when you want to accept an agent suggestion — but it never explicitly contrasts with rejectAgentSuggestion or other accept variants. There is no stated when-not-to-use guidance or prerequisite such as 'only after reviewing via getAgentSuggestion'.

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

createAgentCreate AgentAInspect

Create a new agent. Optionally include a build configuration to create the first build in the same request.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable agent name
typeNoFlavour of the step to create. Fixed at creation — it selects the config family every build of this step must use, and the two cannot be mixed.agent
buildNoOptional inline build. When present, a first build is created alongside the agent. Only valid for an agent step.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
thread_idNoExisting thread ID to associate with the agent
automation_idNoAutomation this agent belongs to. If omitted on a team using the automations model, a new automation named after the agent is created automatically.
source_build_idNoBuild ID whose case-queue-consumer setup should be copied to the new agent

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already signal a mutating, non-idempotent operation (readOnlyHint=false, idempotentHint=false), and 'Create' is fully consistent with them — no contradiction. The description adds one genuine side-effect disclosure: passing a build creates the first build in the same request. Other behavioral traits, such as automation_id's note that an automation is auto-created when omitted and type being fixed at creation, live in the schema rather than the description, leaving the description itself thin on behavior.

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

Conciseness5/5

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

Two sentences totaling roughly twenty words, with the core purpose front-loaded in sentence one and the optional capability in sentence two. There is no filler, no repetition of the title or schema, and every word earns its place. This is a model of compact description writing.

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

Completeness4/5

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

Despite high complexity — 7 parameters with deeply nested build/config/data objects — the schema comprehensively documents every level, including side effects and alternative routes (code-step builds routed to revisions, team_id key-pinning rules for API vs OAuth callers). The main description is brief, but the definition as a whole equips an agent to select and invoke the tool correctly. The absence of an output schema and any hint of what the create response returns keeps this from a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies, and the schema is unusually rich: files distinguishes path from GCS id, agent model conditions on the team's oss_models flag, plugins distinguishes built-ins from GitHub URLs, and subAgents documents its own retirement. The main description contributes only marginal parameter context ('Optionally include a build configuration'), which merely echoes the schema's own detailed build documentation. The schema carries the load here.

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

Purpose4/5

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

The description opens with 'Create a new agent,' a specific verb+resource that clearly matches the tool name and sets it apart from narrow siblings like createAgentCaseTrigger, createAgentFolder, and createAgentSlackTrigger. The second sentence adds real scope detail (optional inline build), clarifying this is the full agent-creation entry point. It stops short of a 5 because it never explicitly names what it is not, such as duplicateAgent or the code-step revision path.

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

Usage Guidelines3/5

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

The top-level description only implies when to use the tool (whenever a new agent is needed) and gives no explicit alternatives or exclusions. The strongest guidance is embedded in the schema: the build.config description explicitly says code steps' first builds must go through POST /v2/agents/{agent_id}/revisions, and the type description warns the step flavor is fixed at creation. There is no routing guidance against related tools like updateAgent or duplicateAgent, so guidance is partial rather than complete.

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

createAgentCaseTriggerCreate Agent Case TriggerAInspect

Create a case trigger for an agent. An agent may have at most one case trigger; this returns 409 if one already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYesWhether the trigger is active. Disabled triggers do not dispatch runs.
agent_idYesThe agent's unique identifier
concurrencyNoConcurrency cap for the target queue. The cap is queue-wide, so this affects every Agent working the queue, not just this trigger. Only 1 (run cases one at a time) or null (reset the whole queue's cap to the platform default) can be set here; higher caps are configured per-queue via PATCH /v2/admin/case-queues/{queueId}/concurrency. Omit to leave the queue's current cap unchanged.
case_queue_idYesQueue whose new cases should trigger this agent

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint=false). The description adds valuable behavioral context beyond that: the at-most-one invariant and the specific 409 failure mode when a trigger already exists. It does not detail success behavior or side effects, but the conflict behavior is a strong disclosure.

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

Conciseness5/5

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

Two sentences, no filler. The primary action is front-loaded, and the important uniqueness/conflict constraint follows immediately. Every sentence adds useful information.

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

Completeness4/5

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

The schema comprehensively documents all four parameters, and the description supplies the key behavioral constraint for a create operation. The main gap is that it does not describe the successful response shape or explicitly guide the agent toward update/upsert alternatives when a trigger already exists, but these are minor for this tool.

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

Parameters3/5

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

Input schema coverage is 100%, so the description does not need to restate parameter meanings. The description adds no parameter-specific semantics beyond what the schema already provides; it only describes a trigger-level constraint.

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

Purpose5/5

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

The description states a specific action and resource: 'Create a case trigger for an agent.' It clearly differs from sibling tools by specifying 'case trigger' rather than, say, a Slack trigger, and it adds the meaningful uniqueness constraint that an agent can have at most one.

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

Usage Guidelines3/5

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

The description implies this tool is for creating a new case trigger and that an existing trigger will cause a 409. However, it does not explicitly mention alternatives such as updateAgentCaseTrigger or upsertAgentTrigger, nor does it say when to prefer one over the others.

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

createAgentFolderCreate Agent FolderCInspect

Create a new agent folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable folder name
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
parent_folder_idNoParent folder ID for nested folders. Omit or null to create at the root level.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations provide readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds no behavioral context beyond the creation act itself. It does not mention side effects, return values, uniqueness constraints, or how the folder relates to agents. No contradiction with annotations.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no filler, which is appropriate for a simple create operation. However, it is minimal enough that it essentially restates the title, so it does not quite reach the highest tier.

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

Completeness3/5

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

The definition is largely sufficient given the fully documented schema and simple semantics. However, there is no output schema, and the description does not indicate what a successful creation returns or how the new folder is subsequently used, leaving some ambiguity for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including detailed team_id and parent_folder_id semantics. The description itself 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.

Purpose4/5

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

The description states a specific verb and resource: 'Create a new agent folder.' This is unambiguous and clearly distinct from siblings like createAgent or createClarityFolder by resource type, 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.

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus related tools such as listAgentFolders, updateAgentFolder, deleteAgentFolder, or moveAgentsToFolder. There are no usage conditions, exclusions, or alternative routing.

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

createAgentSlackTriggerCreate Slack Channel TriggerAInspect

Create a Slack channel trigger on an agent (Agent in the Duvo UI): the agent starts a Run whenever a matching message is posted in the channel. An agent can carry one trigger per channel, so call this once per channel. The Slack workspace must be installed for the team AND bound to the agent's live build first (see the Slack bound-workspaces endpoint) — otherwise this returns 400.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
channel_idYesSlack channel ID to watch, e.g. `C0123ABCD`.
is_privateNoWhether the channel is private. Defaults to false. Private channels require the Duvo Slack app to be invited to the channel.
match_ruleYesWhich channel messages fire the trigger: `{"kind":"all"}` for every message, or `{"kind":"contains","values":["invoice"]}` to match keywords.
channel_nameYesSlack channel name shown in Duvo, without the leading `#`, e.g. `support-inbox`.
trigger_typeYesTrigger type. Only `slack_channel_message` (a message posted in a Slack channel) is supported here.
slack_team_idNoSlack workspace (team) ID the channel belongs to, e.g. `T0123ABCD`. Defaults to the team's default installed workspace. Discover the workspaces an agent can use with the bound-workspaces endpoint.
integration_instance_idNoSpecific bound Slack connection to run the trigger off. Omit to use your own connection, or pass one returned by the bound-workspaces endpoint.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only convey read/write/idempotency/destructiveness flags. The description goes beyond them by explaining the trigger's side effect (a Run starts on matching messages), the one-trigger-per-channel limit, the binding prerequisite, and the 400 failure mode. This is substantial extra behavioral context.

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

Conciseness5/5

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

Three sentences carry all operative information with no filler: purpose/behavior, cardinality constraint, and prerequisite/failure. The most important scoping guidance is front-loaded.

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

Completeness5/5

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

For an 8-parameter create operation with no output schema, the description covers what happens on success, the per-channel limitation, prerequisite setup, and the error condition, while the schema documents every parameter. There are no invocation requirements left unaddressed.

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

Parameters3/5

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

Schema coverage is 100%, with each of the 8 parameters already described by name, format, defaults, and examples. The description reinforces the general matching and per-channel concepts but adds no parameter-specific semantics beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource — 'Create a Slack channel trigger on an agent' — and then defines the tool's effect as starting a Run when a matching message is posted. Naming 'Slack channel trigger' distinguishes it from sibling case-trigger tools such as createAgentCaseTrigger.

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

Usage Guidelines4/5

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

It gives operational conditions: call once per channel, and only after the Slack workspace is installed and bound to the agent's live build, with a 400 failure otherwise. It doesn't explicitly contrast with alternatives like upsertAgentTrigger or updateSlackTrigger, 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.

createAutomationCreate AutomationAInspect

Create a new automation. Its first agent is created alongside it so the caller lands on something editable. On a team on revision semantics the automation holds a single draft revision and no live revision, with the agent's default build bound into that draft, and the first activation makes the draft revision 1; on any other team the automation is a bare container and the build stands on its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable automation name.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.2/5.0
Behavior5/5

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

Even with annotations already indicating this is a mutating, non-idempotent operation, the description adds substantial behavioral disclosure: the first agent is auto-created, the revision/draft lifecycle is explained, the default build is bound into the draft, first activation promotes to revision 1, and non-revision teams get a bare container. This is exactly the kind of side-effect detail that agents cannot 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.

Conciseness5/5

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

Two sentences carry the core action up front and then pack necessary behavioral nuance into a dense but efficient second sentence. There is no filler, and the conditional structure clearly separates revision-semantics teams from all others.

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

Completeness4/5

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

The description is behaviorally complete for the two team scenarios and covers the side effects of creation. It does not mention what the caller receives back (e.g., the created automation's ID), which would be helpful given there is no output schema, but the schema and annotations cover most remaining operational needs.

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

Parameters3/5

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

Schema description coverage is 100%, with both name and team_id already well documented in the input schema. The tool description adds no parameter-specific meaning beyond what the schema provides, 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.

Purpose5/5

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

The description opens with a specific verb and resource ('Create a new automation') and adds that the first agent is created alongside it, which clearly distinguishes it from related create tools like createAgent. The added behavioral detail makes the tool's purpose unmistakable even among a large sibling set.

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

Usage Guidelines3/5

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

The description provides rich context about how the tool behaves on teams with revision semantics versus other teams, which helps a caller set expectations. However, it never explicitly names alternatives such as createAgent for standalone agent creation or updateAutomation for modifying an existing automation, so when-to-use versus alternatives is only implied.

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

createAutomationRevisionCreate Automation RevisionAInspect

Create a draft revision branched from a base revision (defaults to the active revision), copying its agent, queue, and trigger bindings.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional draft name
descriptionNoOptional draft description
automation_idYesAutomation ID
base_revision_idNoRevision to branch from (defaults to the active revision)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a mutating, non-destructive operation. The description adds useful behavioral context by explaining that the operation branches a draft rather than altering the base, copies agent/queue/trigger bindings, and defaults to the active revision. It does not cover permissions or return values, but the core behavior is transparent.

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

Conciseness5/5

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

The description is a single concise sentence with no filler. The most important behavior—draft creation, branching, default source, and copied bindings—is clearly front-loaded.

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

Completeness4/5

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

For a low-complexity create-style tool with no output schema, the description adequately covers core behavior, defaults, and copied resources. It omits return-value details and any mention of later activation, but those are minor and inferable from the draft-revision semantics.

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

Parameters3/5

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

Schema description coverage is 100%, with all four parameters already documented, including the base_revision_id default. The description reinforces branch/copy semantics but does not add per-parameter meaning beyond what the schema already provides.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Create a draft revision branched from a base revision.' It also names the distinct automation context by mentioning copied agent, queue, and trigger bindings, which distinguishes it from generic createRevision/createSkillRevision.

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

Usage Guidelines3/5

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

The description makes the usage context clear: the tool creates a draft revision, defaults to the active revision, and branches from a base revision. However, it does not explicitly state when to prefer this over related tools such as createRevision, activateAutomationRevision, or promoteRevision, nor does it mention exclusions.

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

createCaseAttachmentUploadUrlCreate Case Attachment Upload UrlAInspect

Issue a signed URL for uploading a file to a case. The client must PUT the bytes to the returned URL with the returned Content-Type, then call the finalize endpoint so the attachment becomes visible on the case.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
filenameYes
queue_idYesThe queue's unique identifier
mime_typeYes
size_bytesYes

TDQS

A4/5.0
Behavior4/5

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

Goes meaningfully beyond the sparse annotations (all false hints) by disclosing that the tool issues a signed URL and that the attachment does not become visible until the finalize endpoint is called — a genuinely non-obvious two-phase behavioral trait. It also specifies the PUT-with-Content-Type requirement, which an agent could not infer from the schema. Signed-URL expiry and authorization needs are not mentioned, but the core behavioral disclosure is strong.

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

Conciseness5/5

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

Two sentences, roughly 50 words, with the core purpose front-loaded in the first sentence and the essential follow-up protocol in the second. Every clause earns its place; there is 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.

Completeness4/5

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

For a moderate-complexity tool with no output schema and minimal annotations, the description conveys the critical facts: what is returned (signed URL and Content-Type), the exact PUT protocol, and the dependency on the finalize endpoint. Minor omissions — signed-URL expiry, explicit size-limit emphasis, and failure behavior — leave some room, but the core flow is fully actionable.

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

Parameters3/5

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

Schema description coverage is only 40% (case_id and queue_id), so the description must partially compensate for filename, mime_type, and size_bytes. It adds real meaning by tying mime_type to the 'returned Content-Type' and framing the file fields as the payload to PUT, but it does not individually explain their constraints or semantics, leaving the 50MB size ceiling and length limits solely to the schema.

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

Purpose4/5

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

States a specific verb and resource — 'Issue a signed URL for uploading a file to a case' — which is unambiguous and anchored to the case domain, distinguishing it from generic upload-URL siblings like createFileUploadUrl. The finalize-step mention further scopes its role. It does not explicitly name a sibling for disambiguation, but the case-specific framing is sufficient.

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

Usage Guidelines4/5

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

Provides explicit protocol guidance: the client 'must PUT the bytes to the returned URL with the returned Content-Type, then call the finalize endpoint,' which tells an agent exactly how to consume the result and that a mandatory follow-up call exists. It does not state exclusions or route among alternatives such as createFileUploadUrl, but the intended usage context is clearly conveyed.

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

createCaseQueueEvalRubricCreate Case Queue Eval RubricAInspect

Add one case-level evaluation rubric to a queue's current rubric set. Case-level rubrics judge the whole case (across every Run that touched it) as a Pass/Fail question at settlement. The rubric is added to the queue's current version (build-set) — the set new cases are judged against; a queue only gets one after its first Agent-processed case settles, so this fails with 409 before then, and once the version holds 12 rubrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesShort, human-readable Pass/Fail rubric title.
queue_idYesThe queue's unique identifier
descriptionYesA 1-2 sentence Pass condition phrased as a question.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations provide only false/non-informative hints, so the description carries the full burden. It discloses meaningful behavioral detail: rubrics attach to the current version/build-set, the 409 precondition, and the 12-rubric cap. This is exactly the kind of context an agent needs beyond 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.

Conciseness4/5

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

The first sentence front-loads the core purpose, and the second sentence earns its place by defining case-level evaluation. The third sentence is dense, packing versioning, the 409 condition, and the 12-rubric limit into one clause, but it remains informative and reasonably sized for the complexity.

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

Completeness4/5

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

Given no output schema and non-informative annotations, the description gives enough context to invoke the tool correctly: the target version, the prerequisite, the failure mode, and the maximum rubric count. The only minor weakness is the slightly ambiguous phrasing around the 12-rubric condition, but it does not block correct use.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantic value beyond the schema by explaining that rubrics are Pass/Fail questions evaluated at settlement across the whole case. This helps the agent understand what the title and description parameters should contain, even though the schema already documents their basic format.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Add one case-level evaluation rubric to a queue's current rubric set.' It clarifies what makes this rubric distinct ('judge the whole case across every Run that touched it') and distinguishes it from siblings like createEvalRubric and replaceCaseQueueEvalRubrics.

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

Usage Guidelines4/5

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

The description gives clear usage context: this adds a single rubric to the current build-set, only works after the first Agent-processed case settles, and fails with 409 before then. It does not explicitly name alternative tools such as replaceCaseQueueEvalRubrics, but the additive scope and constraints make the intended use reasonably clear.

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

createCasesCreate CasesAInspect

Create one or more cases in a queue. Provide either a single case object or a cases array (1-100); providing both returns 400. Each case takes a title (max 500 chars), optional labels that will be assigned to the case on creation (missing labels are created on the queue), and an optional priority (none, medium, or high; medium/high raise it above the default in the queue, none is the default; priority only affects the order pending cases are picked up in: due postponed cases are handled first, then higher priority). For the case payload, send free-form data OR a structured json_data object, never both, and a single request must be all free-text or all structured. json_data is validated against the queue's Case schema and requires the queue to have one; a schema-guarded queue accepts only json_data, while a queue without the guard also accepts free-text data. A guarded queue that has no schema yet accepts free-text data only when the team has typed Case schemas turned off (there is then no way to declare a schema, so the guard cannot apply).

ParametersJSON Schema
NameRequiredDescriptionDefault
caseNo
casesNo
queue_idYesThe queue's unique identifier

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only supply the safety profile (readOnly=false, idempotent=false, destructive=false); the description goes well beyond that by disclosing the 400 on dual payloads, schema validation of json_data, guarded-queue acceptance rules, and the all-or-nothing structured/free-text constraint per request.

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

Conciseness4/5

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

Front-loaded with the core action and every sentence carries substantive constraint information. It is a single dense paragraph with long parenthetical clauses, so readability suffers slightly versus a bulleted structure, but there is no filler.

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

Completeness4/5

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

For a nested, 3-parameter mutation with no output schema and low schema coverage, the description covers payload shape, validation, error conditions, and guard behavior thoroughly. It stops short of stating what the call returns (e.g. created case IDs), which would help a batch caller.

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

Parameters4/5

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

Top-level schema coverage is only 33%, so the description carries the load: it explains case/cases exclusivity and 1-100 limits, title limits, label auto-creation on the queue, priority ordering semantics, and json_data mutual exclusivity with data. queue_id is left to the schema, which is a minor omission.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Create one or more cases in a queue.' Clear enough to distinguish from siblings like updateCase, listCases, and bulkReprocessCases 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.

Usage Guidelines4/5

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

Gives concrete conditions for choosing the single `case` object vs the `cases` array (both together returns 400), for `data` vs `json_data`, and constrains priority to explicit instruction ('do not infer it on your own'). It does not, however, name sibling tools or say when to prefer them over this one.

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

createClarityArtifactImportUploadUrlCreate Clarity Artifact Import Upload UrlAInspect

Create a signed upload URL for importing a Miro export into a Clarity v2 process. Supports SVG, XML, PNG, and JPEG exports. The caller must upload the file to the returned URL, then complete the import.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameYesName of the Miro export file. Supported extensions: .svg, .xml, .png, .jpg, .jpeg
process_idYesThe clarity process id
content_typeYesMIME type of the Miro export file
extra_capture_request_idNoOptional extra-capture-request id to bind this import to

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses a non-obvious two-step behavior: this tool only creates the URL; the caller must separately upload and then complete the import. This goes beyond the minimal annotation set, which only says readOnlyHint=false and destructiveHint=false. It does not mention expiration or side effects, but the core workflow is transparent.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the operation, the second lists supported formats, and the third explains the required follow-up. The most important scoping information is front-loaded.

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

Completeness4/5

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

With no output schema, the description still makes clear that a URL is returned for uploading and that a completion step is required. It could name the exact complete-import sibling tool or describe the response shape, but the essential context for invocation and next steps is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents process_id, file_name, content_type, and extra_capture_request_id. The description reinforces the supported file types but does not add meaningful parameter semantics 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.

Purpose5/5

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

The description clearly states a specific verb, resource, and scope: 'Create a signed upload URL for importing a Miro export into a Clarity v2 process.' It names the supported formats and, by focusing on Miro artifacts, is distinguishable from sibling tools like createClarityDocumentUploadUrl and createClarityImageUploadUrl.

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

Usage Guidelines4/5

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

The description gives clear workflow context: the caller must upload the file to the returned URL and then complete the import. It does not explicitly name alternatives or exclusion conditions, but the Miro/Clarity-v2 framing is specific enough to guide selection.

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

createClarityDocumentUploadUrlCreate Clarity Document Upload UrlBInspect

Create a signed URL for uploading a PDF, TXT, Markdown, BPMN, XLSX, or CSV document directly to GCS

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the document file
contentTypeYesMIME type of the document
extraCaptureRequestIdNoExtra-capture-request id to bind this capture to

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate this is a mutating, non-read-only, non-idempotent operation. The description adds useful context about direct GCS upload and supported file types, but it does not disclose the full upload flow or side effects beyond signed URL creation.

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

Conciseness5/5

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

Single front-loaded sentence with no filler. It efficiently communicates the action, supported formats, and destination while leaving schema details to the schema.

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

Completeness3/5

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

Adequate for a straightforward signed-URL generation tool, and the lack of an output schema is partly mitigated by the description implying the returned artifact is a URL. However, it omits the relationship to the completion step and does not distinguish this endpoint from several closely related upload-URL siblings.

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

Parameters3/5

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

Schema coverage is 100%, and parameter descriptions already provide clear meanings for id, fileName, contentType, and extraCaptureRequestId. The description reinforces the document-upload purpose but adds no additional semantics beyond the schema.

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

Purpose4/5

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

States a specific action (create a signed URL) and resource (Clarity document upload to GCS), and lists the supported formats. It distinguishes from image/video upload tools via the format list, but does not differentiate among closely related document-upload siblings such as organization, team, or artifact uploads.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling upload tools like createClarityOrganizationDocumentUploadUrl or createClarityTeamDocumentUploadUrl. It also does not mention follow-up steps such as completing the upload after GCS transfer.

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

createClarityFolderCreate Clarity FolderCInspect

Create a process folder

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the folder to create.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already indicate this is not read-only, not idempotent, and not destructive, and the description adds no behavioral context beyond the word 'create.' It does not disclose side effects, naming collisions, permissions, or what kind of object is produced, so the description adds little beyond the structured metadata.

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

Conciseness4/5

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

The description is a single, efficient sentence with no filler or repetition. It is front-loaded and easy to parse, though it is minimal to the point of under-specification in other dimensions.

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

Completeness3/5

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

For a simple two-parameter create operation with a rich schema, the description is minimally adequate: the agent knows it creates a folder and needs a name. However, it lacks context about what a process folder is used for, whether folders are hierarchical, and what the tool returns, leaving some ambiguity for an agent navigating a large sibling toolset.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter descriptions already document the 'name' field and thoroughly explain 'team_id', including API-key and OAuth behavior. The tool description adds no extra parameter-level meaning, 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.

Purpose4/5

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

The description states a clear action and object: 'Create a process folder.' It is not a tautology and the verb 'create' maps directly to the tool's function. However, it does not differentiate from sibling folder tools such as createAgentFolder or clarify what a 'process folder' is within the Clarity domain.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like createAgentFolder, setupClarityFoldersFromLandscape, or updateClarityFolder. There is no mention of prerequisites, team context, or folder hierarchy, leaving the agent to infer usage from the name alone.

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

createClarityGuidanceCreate Clarity GuidanceCInspect

Create a new automation guidance message for a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
contentYesAutomation guidance to add to the process.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, so the tool is understood to mutate state, but the description adds no behavioral context: it does not state whether creation is idempotent, whether it appends to existing guidance, what side effects occur, or what happens on duplicate IDs. For a mutation tool with minimal annotation detail, this is a significant gap.

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

Conciseness3/5

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

The description is a single concise sentence, which is efficient. However, it is a near-restatement of the tool name and title, providing little additional value beyond what the structured metadata already conveys.

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

Completeness2/5

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

The tool has two required parameters and no output schema, and the description omits important context such as whether the guidance is appended or replaces existing guidance, whether a clarity process must already exist, or what the response/result indicates. The description is minimally adequate for basic invocation but incomplete for confident use.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters and their types. The description adds the phrase 'automation guidance message', slightly clarifying the content field's purpose, but does not add meaning beyond the schema's own descriptions.

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

Purpose4/5

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

The description states a specific verb ('Create') and resource ('automation guidance message for a clarity process'), making the basic action clear. However, it does not distinguish itself from sibling create_* tools or from updateClarityGuidance, and the term 'clarity process' is domain-specific without elaboration.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus updateClarityGuidance or other createClarity* tools. The context of a clarity process and automation guidance is implied by the name and schema, but there is no explicit usage context, prerequisites, or alternatives.

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

createClarityImageUploadUrlCreate Clarity Image Upload UrlAInspect

Create a signed URL for uploading a PNG, JPEG, or WebP image directly to GCS

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the image file
contentTypeYesMIME type of the image
extraCaptureRequestIdNoExtra-capture-request id to bind this capture to

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide only negative hints, so the description carries the behavioral burden. It discloses that the tool only creates a signed URL rather than performing the upload, and that uploads happen directly to GCS. This is meaningful beyond the structured fields, though it does not mention expiration or follow-up completion steps.

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

Conciseness5/5

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

A single, front-loaded sentence provides the essential action, target, and constraints with no filler. Every word contributes to understanding what the tool does.

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

Completeness4/5

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

For a simple tool with complete schema coverage, the description sufficiently conveys the outcome: a signed URL for direct image upload. It does not specify response shape or follow-up behavior, but the tool's purpose is clear enough for correct invocation.

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

Parameters3/5

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

All parameters are fully described in the schema, including the contentType enum and UUID formats. The description adds no extra parameter-level meaning, so the baseline score of 3 applies.

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

Purpose5/5

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

The description names a specific action (create a signed URL), a specific target (GCS), and supported formats (PNG, JPEG, WebP). This clearly distinguishes it from sibling tools like createClarityDocumentUploadUrl or completeClarityImageUpload.

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

Usage Guidelines4/5

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

The description makes the usage context clear: use this when an image needs to be uploaded directly to GCS via a signed URL. It does not explicitly name alternatives or exclusion conditions, but the format and storage constraints imply the right scenario.

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

createClarityLandscapeNodeCreate Clarity Landscape NodeBInspect

Create an area folder in the process tree. An active area (the default) requires organization admin+; a "proposal" area may be added by any organization member.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
orgIdYes
parentIdNo
ownerLabelNo
descriptionNoOne or two sentences saying what family of work this area groups. Persisted as the area's summary.
creationModeNoUse "proposal" to add an area for review instead of asserting it exists. A proposal is idempotent: an equivalent live area under the same parent is returned untouched rather than duplicated. Defaults to "active" — except in a landscape-onboarding chat, which may only propose, and so defaults to "proposal".

TDQS

B3.2/5.0
Behavior3/5

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

The description adds useful context beyond the sparse annotations by disclosing that active areas require organization admin+ while proposals are open to any member. However, it does not disclose side effects, return behavior, or the idempotency nuance described in the creationMode schema.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It packs the core purpose and key permission distinction into minimal space.

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

Completeness2/5

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

With six parameters, no output schema, and weak annotations, the description is too thin to be complete. It lacks guidance on parent/owner fields, sibling alternatives, and what the tool returns or how creation is confirmed.

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

Parameters3/5

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

The description partially compensates for the low 33% schema coverage by explaining the creationMode distinction and its permission implications. However, it adds no meaning for parentId or ownerLabel, and name/orgId remain only schema-defined, so the description does not fully carry the parameter-semantics burden.

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

Purpose4/5

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

The description clearly states a specific verb ('Create'), resource ('area folder'), and location ('in the process tree'), which distinguishes it from sibling tools like createClarityFolder or createClarityProcessNode. It does not explicitly name a sibling, so it stops short of the clearest possible differentiation.

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

Usage Guidelines2/5

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

The description gives a permission-based distinction between 'active' and 'proposal' areas but does not explain when to prefer this tool over alternatives such as createClarityFolder or updateClarityLandscapeNode. No explicit when-to-use or when-not-to-use guidance is provided.

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

createClarityOrganizationDocumentUploadUrlCreate Clarity Organization Document Upload UrlAInspect

Create a signed URL for uploading a PDF, TXT, Markdown, or BPMN document as an organization-level Clarity capture

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
fileNameYesName of the document file
contentTypeYesMIME type of the document

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation-but-non-destructive nature is covered. The description adds the signed-URL semantics and upload-oriented behavior, but does not disclose details like URL expiration, single-use behavior, or the follow-up completion step.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes to identifying the action, scope, and file types without redundancy.

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

Completeness4/5

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

For a simple 3-parameter URL creation tool with no output schema, the description is largely sufficient: it names the resource, scope, file types, and the upload purpose. It does not explicitly point to the paired completeClarityOrganizationDocumentUpload step or response shape, but 'signed URL' communicates the key output clearly.

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

Parameters4/5

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

Schema description coverage is 67%, with orgId lacking a description, but the description adds meaningful semantic mapping: PDF/TXT/Markdown/BPMN maps to the contentType enum and 'organization-level' clarifies the role of orgId. This goes beyond what the raw schema provides.

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

Purpose5/5

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

The description states a specific verb ('Create'), a concrete resource ('signed URL'), and explicit scope ('organization-level Clarity capture'). It also enumerates supported file types, making it easy to distinguish from sibling tools like createClarityTeamDocumentUploadUrl and createClarityDocumentUploadUrl.

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

Usage Guidelines4/5

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

The 'organization-level' phrasing provides clear context about when this tool applies, distinguishing it from team- or artifact-scoped upload URL tools. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.

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

createClarityProcessCreate Clarity ProcessAInspect

Create a new Clarity v2 process for the current team (Builder+). Optional name defaults server-side when omitted. Response uses camelCase createdAt to match existing FE clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional process name; server default applies when omitted
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.7/5.0
Behavior3/5

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

The annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds useful behavior beyond those: optional name defaults server-side, and the response uses camelCase createdAt for existing FE clients. However, it does not disclose potential side effects, error behavior, or what else the response contains, so the added transparency is modest.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence front-loads the core action and scope, and the second covers the only server-side default plus a response-format note. Every sentence contributes actionable information.

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

Completeness3/5

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

For a create tool with two optional parameters and no output schema, the description covers the basic purpose, team scope, name default, and one response-format detail. However, the full return payload is only hinted at via 'createdAt', and failure conditions such as team mismatch are only present in the schema. It is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents both parameters thoroughly, including the team_id pinned-team fallback and OAuth behavior. The description only repeats the name defaulting and omits team_id entirely, so it adds no meaningful parameter semantics 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.

Purpose5/5

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

The description states a specific action and resource: 'Create a new Clarity v2 process for the current team (Builder+)'. This unambiguously distinguishes the tool from sibling tools like duplicateClarityProcess, createClarityProcessLabel, and createClarityProcessNode. The 'v2' and 'current team (Builder+)' qualifiers add useful precision.

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

Usage Guidelines3/5

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

The description implies the primary use case (creating a new Clarity process) and notes the team scope, but it does not explicitly compare against alternatives like updateClarityProcess or duplicateClarityProcess, nor does it state when not to use this tool. The context is clear enough to infer usage, but no direct routing guidance is provided.

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

createClarityProcessLabelCreate Clarity Process LabelCInspect

Create process tags for an organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
valueYes
colorHueNo

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already indicate this is a non-read-only write operation, and the description adds little beyond that. It does not disclose side effects, permissions, uniqueness behavior, default colorHue application, or whether the operation is idempotent despite the idempotentHint being false.

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

Conciseness5/5

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

The single sentence is front-loaded and contains no filler. Every word adds meaning: the action, the resource type, and the organizational scope are all present.

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

Completeness2/5

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

The tool has three parameters, no output schema, and minimal annotations, so the description carries a heavy burden. It fails to mention what the tool returns, how colorHue is used, what happens on duplicate values, or any prerequisites, leaving an agent under-equipped to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only loosely maps 'organization' to orgId and 'tags' to value. colorHue is completely absent from the description, and no parameter-level constraints or defaults are explained.

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

Purpose4/5

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

The description states a specific action ('Create'), a clear resource ('process tags' / Clarity Process Label), and a scope ('for an organization'). This distinguishes it from related tools like assignClarityProcessLabels, updateClarityProcessLabel, and deleteClarityProcessLabel, though it doesn't explicitly name them.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as listAvailableClarityProcessLabels, assignClarityProcessLabels, or updateClarityProcessLabel. The description only implies creation, but doesn't address reuse, duplication, or relationship to process-process label assignment.

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

createClarityProcessNodeCreate Clarity Process NodeAInspect

File an existing Clarity process into an area of the process landscape (team manager or organization admin+). Use this for a process that already exists but sits in Unsorted; use proposeClarityLandscapeProcess to create a brand-new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
parentIdYesThe area folder the process is filed under.
processIdYesAn existing Clarity process to file into the landscape. Unsorted processes are listed as `unlinkedProcesses` by getClarityProcessLandscape.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations by specifying required permission (team manager or organization admin+) and clarifying the operation is about relocating an existing process into the landscape. It does not explicitly describe side effects on the Unsorted folder, but the wording implies filing/moving, and the annotations indicate a non-read-only, non-destructive mutation.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action and immediately followed by the alternative-tool routing. There is no filler or redundant restating of the schema.

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

Completeness4/5

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

For a simple 3-parameter mutation tool, the description gives the action, the target context, permission requirements, and the key sibling distinction. It does not explain error cases or the exact return value, but those are not critical for an agent selecting and invoking this tool correctly.

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

Parameters3/5

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

The schema already documents parentId and processId well, and the description reinforces the processId semantics by tying it to processes in Unsorted. However, the description does not add much meaning for orgId, and schema coverage is only 67%, so the description only partially compensates for the gap.

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

Purpose5/5

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

The description clearly states the action: file an existing Clarity process into an area of the process landscape. It also distinguishes this tool from proposeClarityLandscapeProcess, which creates a brand-new process, making the tool's purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly gives the when-to-use condition: when the process already exists but sits in Unsorted. It also names the alternative tool for the opposing case. This is strong routing guidance for an agent.

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

createClarityTeamDocumentUploadUrlCreate Clarity Team Document Upload UrlAInspect

Create a signed URL for uploading a PDF, TXT, Markdown, or BPMN document as a team-level Clarity capture

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
fileNameYesName of the document file
contentTypeYesMIME type of the document

TDQS

A3.8/5.0
Behavior3/5

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

The description adds context beyond the sparse annotations by clarifying that it creates a signed URL rather than performing the upload itself, and by listing allowed content types. However, it does not disclose URL expiration, side effects, or the need to follow up with completeClarityTeamDocumentUpload, which is significant since readOnlyHint=false indicates a potentially state-changing operation.

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

Conciseness5/5

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

A single front-loaded sentence states the action, resource, supported formats, and scope with no redundant wording. It avoids repeating the title or parameter details while still conveying the core semantics.

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

Completeness4/5

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

For a low-complexity tool with full schema parameter coverage and clear file-type constraints, the description is nearly complete: it tells the agent what operation is performed and which document types qualify. It is slightly incomplete because there is no output schema and the description does not mention the upload-completion workflow or the shape of the returned signed URL.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already provides a detailed team_id description covering API-key fallback and OAuth behavior. The description's file-type list aligns with the contentType enum but does not add significant meaning beyond the schema; the mapping from 'BPMN' to application/xml is only implicit.

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

Purpose5/5

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

The description uses a specific action ('Create a signed URL'), a concrete resource ('team-level Clarity capture'), and lists the supported document types (PDF, TXT, Markdown, BPMN). This clearly distinguishes it from org-level or general document upload URL tools based on the team-level scope.

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

Usage Guidelines3/5

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

The description implies the appropriate context by specifying 'team-level,' and the schema's team_id description gives useful auth guidance (omit for API keys, pass for OAuth callers). However, it does not explicitly name sibling alternatives such as createClarityDocumentUploadUrl or createClarityOrganizationDocumentUploadUrl, nor does it state when not to use this tool.

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

createClarityVideoUploadUrlCreate Clarity Video Upload UrlAInspect

Create a signed URL for uploading a video file directly to GCS

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
fileNameYesName of the video file
contentTypeYesMIME type of the video
extraCaptureRequestIdNoExtra-capture-request id to bind this capture to

TDQS

A4/5.0
Behavior4/5

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

The annotations only provide generic flags (readOnlyHint=false, destructiveHint=false) and do not explain the operation's nature. The description adds meaningful behavioral context: the tool does not upload the video itself but returns a signed URL, and the upload is performed directly to GCS. This helps the agent understand the expected flow, though expiration or lifecycle details are not disclosed.

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

Conciseness5/5

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

The description is a single, focused sentence that states the core purpose and the key storage destination ('directly to GCS'). There is no filler, repetition, or unnecessary detail, making it easy for an agent to parse quickly.

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

Completeness4/5

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

For a simple four-parameter tool with no nested objects, the schema fully documents inputs and the description explains the output concept ('signed URL') and the storage target. The main missing piece is explicit guidance on the follow-up completion flow, but the description is complete enough to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, with all four parameters already documented meaningfully in the schema (id, fileName, contentType, extraCaptureRequestId). The description does not add parameter-specific detail beyond referring to 'uploading a video file', which the schema already captures. A baseline score of 3 is appropriate because the schema carries the parameter documentation burden.

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

Purpose5/5

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

The description names a specific verb ('Create'), a specific resource ('a signed URL'), and a specific context ('uploading a video file directly to GCS'). This clearly distinguishes it from sibling upload-URL tools like createClarityImageUploadUrl, createClarityDocumentUploadUrl, and createFileUploadUrl without requiring the agent to inspect schemas.

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

Usage Guidelines3/5

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

The description implies the usage context: this is the URL-generation step before a video is uploaded directly to GCS, and the sibling completeClarityVideoUpload suggests a follow-up step. However, it does not explicitly say when to choose this over other upload-URL tools or mention the completion step, so the usage guidance remains implicit rather than explicit.

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

createConnectionCreate ConnectionBInspect

Create a new user-provided connection (custom MCP server) for the current team. OAuth-based integrations (native) require an interactive browser flow — start them with the dedicated OAuth endpoints (/v2/teams/:team_id/connections/oauth/native/:provider/start or /v2/teams/:team_id/connections/oauth/mcp/start) instead of calling this endpoint directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeNocustom_mcp
headersNo
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
providerYes
server_urlNo
auth_methodYes
custom_integration_idNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish that this is a non-read-only, non-idempotent mutation. The description adds useful context that the tool creates a custom MCP connection and that OAuth flows need different endpoints. It does not disclose side effects, failure behavior, or what happens when auth_method is set to oauth, but with annotations present this is a moderate level of transparency.

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

Conciseness5/5

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

The description is two sentences with the core purpose front-loaded. The caveat about OAuth flows is placed immediately after the main statement, and the explicit endpoint paths add practical value without excessive verbosity.

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

Completeness2/5

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

Given 8 parameters, a nested headers object, an auth_method enum that includes oauth, and no output schema, the description is not complete enough. It leaves unclear how auth_method interacts with the warning about OAuth flows, what server_url and headers mean for a custom MCP server, and what response or validation behavior to expect. The tool needs more behavioral and parameter context to be safely invoked.

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

Parameters2/5

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

Schema description coverage is only 13%, and the description provides almost no parameter-level guidance. It does not explain name, server_url, headers, auth_method, or custom_integration_id beyond what the bare schema types and enum imply. The team_id parameter is well described in the schema, but most required and optional parameters remain semantically opaque.

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

Purpose4/5

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

The description states a clear verb-resource pair: "Create a new user-provided connection (custom MCP server) for the current team." It names the resource type, the scope (team), and clarifies that this is specifically for custom MCP servers. It also explicitly contrasts with OAuth-based integrations, though it doesn't differentiate from closely named siblings like createCustomIntegration or createCredential.

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

Usage Guidelines4/5

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

The description explicitly tells agents when NOT to use this tool: OAuth-based integrations with an interactive browser flow should use the dedicated OAuth endpoints instead, and it names those endpoints. However, it doesn't provide guidance for choosing between this and other connection-related siblings such as createCredential, createCustomIntegration, or probeMcpServer.

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

createCredentialCreate credentialAInspect

Create a login. At least one of password or otp_secret must be provided. Personal by default; pass shared: true to create a team-shared login (requires lead builder role).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
sharedNo
userIdYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
passwordNo
usernameNo
otp_secretNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only establish that this is a mutating, non-idempotent operation. The description adds useful behavioral context: personal-by-default sharing behavior, the lead-builder role gate for shared logins, and the at-least-one validation constraint. These details go beyond what annotations alone reveal.

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

Conciseness5/5

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

Three short sentences front-load the purpose, then state the required combination constraint and the shared-mode behavior/role requirement. Every sentence earns its place with no redundant wording.

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

Completeness3/5

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

The definition is minimally sufficient for a basic personal credential: required fields are visible in the schema, the validation rule is explicit, and the shared path is explained. However, with no output schema and no description of what userId/domain represent, the agent must infer important invocation details rather than being told them.

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

Parameters3/5

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

Schema description coverage is only 14%, so the description must carry param semantics. It explains shared, password, and otp_secret meaningfully, but leaves the required userId and domain parameters unexplained, and also doesn't clarify username. This is a partial compensation for a 7-parameter tool.

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

Purpose4/5

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

The description states a specific action and resource ('Create a login') and clarifies that a credential is a login rather than a generic secret or connection. It doesn't explicitly name a sibling alternative, but the resource type is specific enough to distinguish it from tools like createSecret or updateCredential.

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

Usage Guidelines3/5

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

The description gives clear parameter-level guidance: at least one of password or otp_secret is required, and shared: true is the switch for team-shared logins with a role requirement. However, it doesn't say when to prefer this tool over related alternatives like updateCredential or createSecret, so the tool-selection guidance is mostly implied.

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

createCustomIntegrationCreate Custom IntegrationAInspect

Create a custom integration type (team-level catalog entry) that users can then connect as user-provided MCP connections. Requires manager-or-above role.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
server_urlYes
auth_methodYes
oauth_client_idNo
oauth_client_secretNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already signal readOnly=false, idempotent=false, and destructive=false, so the write behavior is known. The description adds valuable behavioral context beyond annotations: the created entity is a team-level catalog entry, the operation requires manager-or-above permissions, and users will later connect it as an MCP connection. This is meaningful for an agent deciding whether to call 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.

Conciseness5/5

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

The description is a single, dense sentence with no filler or repetition. The verb and resource are front-loaded, and the role requirement is appended without bloating the text. Every part earns its place.

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

Completeness3/5

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

The description is sufficient to understand the high-level purpose and permission requirement, but it does not cover parameter dependencies such as when oauth_client_id and oauth_client_secret are needed, nor does it clarify the server_url/auth_method semantics. With no output schema and only 17% schema description coverage, the definition is minimally viable but has clear gaps.

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

Parameters2/5

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

Schema description coverage is only 17%, with team_id carrying the sole description. The tool description does not explain server_url, auth_method, oauth_client_id, oauth_client_secret, or how they relate to each other. Since the schema leaves most parameters undescribed, the description needed to compensate but does not.

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

Purpose5/5

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

The description states a specific action ('Create'), a specific resource ('custom integration type'), and adds a clarifying parenthetical ('team-level catalog entry') that distinguishes it from a concrete connection. The follow-up clause about users connecting them as user-provided MCP connections makes the tool's purpose unmistakable and separates it from sibling tools like createConnection.

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

Usage Guidelines4/5

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

The description gives clear context: this creates a reusable catalog entry rather than an actual connection, and it requires a manager-or-above role. It does not explicitly name alternatives or say 'when not to use', but the catalog-vs-connection framing provides enough guidance for an agent to select it appropriately.

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

createEvalRubricCreate Eval RubricAInspect

Add one Agent-specific evaluation rubric to a build. A build may hold at most 5 custom rubrics; this fails with 409 once that ceiling is reached. Defaults to the Agent's live build; pass build_id to target a specific revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesShort, human-readable Pass/Fail rubric title.
agentIdYesThe agent's unique identifier (Assignment ID)
build_idNoAdd the rubric to this build (revision). Defaults to the agent's live build when omitted.
descriptionYesA 1-2 sentence Pass condition phrased as a question.
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: the 5-custom-rubric ceiling, the 409 failure mode, and the default live-build behavior. It does not contradict annotations, which already signal a non-read-only write; the more nuanced selected_automation_revision_id behavior is 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.

Conciseness5/5

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

Three short sentences front-load the core action, then state the most important constraint (5-rubric ceiling with 409) and the default targeting behavior. There is no filler, repetition, or unnecessary detail.

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

Completeness4/5

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

For a 5-parameter write tool with no output schema, the description covers the key failure mode and default target behavior, which is solid. It does not mention the success return value or summarize selected_automation_revision_id's draft/active/historic branching, but that parameter's behavior is fully documented in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 even with no parameter enrichment in the description. The description does add default-build semantics for build_id, but this largely restates the schema. It does not meaningfully enrich title, agentId, description, or selected_automation_revision_id beyond what the schema already says.

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

Purpose5/5

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

The description names the specific verb and resource: 'Add one Agent-specific evaluation rubric to a build.' It distinguishes this tool from sibling queue-level rubric tools like createCaseQueueEvalRubric, and from replace/delete/update rubric tools, by specifying the Agent-specific build scope.

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

Usage Guidelines4/5

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

The description provides clear invocation context: it defaults to the Agent's live build and says to pass build_id to target a specific revision. It does not explicitly name alternatives or state when not to use this tool, but the Agent-specific build framing implies the intended situation.

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

createFileUploadUrlCreate File Upload UrlBInspect

Generate a signed URL for uploading a file directly to GCS.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
fileNameYesName of the file to upload
contentTypeYesMIME type of the file

TDQS

B3.3/5.0
Behavior3/5

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

The description adds some behavioral context beyond the annotations by indicating that this generates a signed URL for direct GCS upload, implying the actual file transfer happens client-side. However, it does not disclose URL expiry, required permissions, or what happens after generation. Annotations are not contradicted.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. 'Generate a signed URL' appears first, followed by the purpose qualifier 'for uploading a file directly to GCS,' and every word earns its place.

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

Completeness3/5

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

The tool is simple and the schema fully documents all parameters, so the description is mostly adequate for invoking it. However, the large sibling set creates ambiguity about when this generic upload URL tool should be chosen over domain-specific ones, and the absence of an output schema leaves return-value details unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters fileName, contentType, and team_id are already fully documented in structured form. The description contributes no additional parameter-level meaning beyond referring to 'a file.'

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

Purpose4/5

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

The description states a specific verb and resource: generate a signed URL for uploading a file directly to GCS. It is clear about what the tool does, though it does not distinguish itself from the many sibling create*UploadUrl tools.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives like createCaseAttachmentUploadUrl, createClarityDocumentUploadUrl, or createSandboxUploadUrl. The description gives context but no explicit or implicit selection criteria beyond 'file directly to GCS.'

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

createOrgTeamCreate Org TeamAInspect

Create a new team under an organization you administer. Requires an organization Admin, Executive, or Owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
orgIdYesOrganization ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-idempotent, non-destructive mutation, and the description adds the authorization requirement (Admin/Executive/Owner) plus the constraint that the organization must be one the caller administers. This goes beyond what the schema or annotations say, and there is no contradiction with the annotations.

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

Conciseness5/5

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

Two sentences with no filler: the action is stated first, and the required role is stated second. Every sentence carries information an agent needs.

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

Completeness4/5

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

For a 2-parameter create operation with no nested objects or output schema, this covers action, target scope, and authorization adequately. It does not describe duplicate-name behavior or return value, but those are minor at this complexity level.

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

Parameters3/5

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

Only orgId has a schema description; name has just type and minLength. The description maps both parameters implicitly—name is the new team's name and orgId is the target organization—but it does not explain naming constraints or uniqueness behavior, so compensation is partial.

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

Purpose5/5

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

The description opens with the verb 'Create' and a specific resource, 'a new team under an organization,' which is exactly what the tool does. It also narrows scope to organizations the caller administers, which distinguishes it from generic team/invite-related siblings like createTeamInvite and inviteOrgMember.

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

Usage Guidelines4/5

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

It gives an explicit precondition: only organization Admins, Executives, or Owners should call this. It does not name an alternative tool for other roles or for listing teams, but the resource and role context make the intended use clear.

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

createPulseDashboardCreate Pulse DashboardAInspect

Create a new Duvo Pulse dashboard from a natural-language prompt (e.g. 'open cases by queue this week') and dispatch the first generation turn. Generation is asynchronous — poll GET /artifacts/{artifactId} until status is completed. The dashboard is private to you unless you set visibility to 'team', which shares it with your whole team straight away — with permission 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it).

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
permissionNo
visibilityNo
connection_idsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations establish that this is a non-read-only, non-idempotent create operation, and the description adds valuable behavior beyond that: generation is asynchronous, requires polling GET /artifacts/{artifactId}, and visibility/permission defaults to private unless team sharing is chosen. It does not contradict the annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: the core create action, the async polling behavior, and the privacy/permission model. The most important information is front-loaded and there is no filler.

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

Completeness4/5

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

For a create operation with no output schema, the description covers the core task, async generation, polling endpoint, and team-sharing semantics. It is slightly incomplete because it does not explicitly state what the initial response contains (e.g. artifactId) or what connection_ids does, but these are inferable or optional.

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

Parameters3/5

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

With 0% schema description coverage, the description must explain the parameters, and it does explain message via the natural-language-prompt example, plus visibility and permission semantics. However, it never mentions connection_ids, leaving the agent to guess its role from the schema alone.

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

Purpose5/5

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

The description opens with a specific action ('Create a new Duvo Pulse dashboard'), specifies the input mode ('from a natural-language prompt'), and states the follow-up behavior ('dispatch the first generation turn'). This clearly distinguishes it from sibling tools like sendPulseDashboardMessage or answerPulseDashboardQuestion, which operate on an existing dashboard.

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

Usage Guidelines3/5

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

The description implies when to use it — when a new dashboard is needed from a prompt — but never names an alternative or an exclusion. There is no explicit guidance such as 'use updatePulseDashboard for existing dashboards' or 'use sendPulseDashboardMessage to continue a conversation.'

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

createPulseDashboardAttachmentUploadUrlCreate Pulse Dashboard Attachment Upload UrlAInspect

Issue a presigned upload URL for a file to attach to a Duvo Pulse dashboard message (e.g. an HTML dashboard to copy, or a screenshot to match). POST the file bytes to the returned upload_url as multipart form data under the field name 'file', then pass the returned attachment_id in the attachments array of POST /artifacts/{artifactId}/messages. The agent reads the file directly from its sandbox. Files live as long as the dashboard's sandbox (about 12 hours), so upload shortly before sending.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName of the file being attached, without any path segments
mime_typeYesMIME type of the file, e.g. text/html or image/png
artifactIdYes
size_bytesYesSize of the file in bytes (max 25MB)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already show readOnlyHint=false and idempotentHint=false, but the description adds meaningful behavioral context: the URL is presigned, the file is read directly from the agent's sandbox, and files expire with the dashboard's sandbox in about 12 hours. This goes beyond the structured annotation fields without contradicting them.

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

Conciseness5/5

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

Three sentences with no filler: purpose, exact upload protocol, and lifetime warning. The critical usage constraint is front-loaded, and every sentence contributes actionable information.

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

Completeness5/5

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

There is no output schema, but the description explicitly names both returned values (upload_url and attachment_id) and explains how to use them. It also covers the file lifetime and sandbox context. For a 4-parameter upload tool, this is complete enough for an agent to call and act on the result.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema already documents filename, mime_type, and size_bytes. The description adds that artifactId is used in the messages path and that the multipart field must be named 'file', which is useful but does not deeply explain each parameter. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: 'Issue a presigned upload URL for a file to attach to a Duvo Pulse dashboard message.' It also gives concrete examples (HTML dashboard, screenshot) and the tool name alone distinguishes it from sibling upload tools like createCaseAttachmentUploadUrl or createSandboxUploadUrl.

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

Usage Guidelines4/5

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

The description gives a clear workflow: POST the file as multipart form data to the returned upload_url, then pass the attachment_id to POST /artifacts/{artifactId}/messages. It explicitly advises uploading shortly before sending due to the 12-hour lifetime. It does not explicitly compare against sibling upload-URL tools, but the intended context is clear.

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

createPulseDashboardCommentCreate Pulse Dashboard CommentAInspect

Start a comment thread on a Duvo Pulse dashboard (requires view access). Pass element — captured from the dashboard canvas — to pin the thread to one element; omit it for a comment on the dashboard as a whole.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
elementNo
artifactIdYes
revision_idNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate this is not read-only (readOnlyHint: false). The description adds the 'requires view access' constraint, which is useful, but it does not describe what the operation returns or any side effects beyond creating a thread. Given annotation coverage of the write nature, this is 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.

Conciseness5/5

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

The description is two sentences, directly stating the purpose and the key parameter behavior. There is no redundancy or irrelevant information; every word adds value.

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

Completeness2/5

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

The description omits essential context for the required parameters (`artifactId` and `body`) and does not mention how the thread is associated with the dashboard. While it covers the element-to-dashboard distinction, it leaves users to infer the meaning of required fields, making it incomplete for a create operation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only explains the `element` parameter. It does not clarify `artifactId` or `body`, which are required. With four parameters and zero schema descriptions, the description fails to compensate for the missing semantics of the required fields.

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

Purpose5/5

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

The description clearly states the action ('Start a comment thread'), the resource ('Pulse dashboard'), and the key behavior of the `element` parameter. It distinguishes this tool from related actions like replying to a comment, making the purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly mentions the view access requirement and explains the conditional use of `element` (pass for element-level, omit for dashboard-level). However, it does not explicitly contrast with alternatives like createPulseDashboardCommentReply, leaving the choice slightly implicit.

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

createPulseDashboardCommentReplyCreate Pulse Dashboard Comment ReplyAInspect

Reply to a comment thread on a Duvo Pulse dashboard (requires view access). commentId must be a thread root; threads are one level deep. A thread already marked complete still accepts replies and stays complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
commentIdYes
artifactIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only state readOnlyHint:false and destructiveHint:false, leaving behavioral disclosure to the description. The description adds valuable context: 'requires view access' (permission requirement), 'threads are one level deep' (structural constraint), and 'a thread already marked complete still accepts replies and stays complete' (a non-obvious behavior). No contradiction with annotations.

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

Conciseness5/5

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

Three concise sentences with no filler. The primary purpose is front-loaded ('Reply to a comment thread'), followed by essential constraints and behavioral quirks. Every sentence earns its place.

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

Completeness4/5

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

For a low-complexity tool with three flat parameters and no output schema, the description covers the core purpose, a critical parameter constraint, and a behavioral edge case. It does not describe body or artifactId explicitly, but these are reasonably inferable from context. Overall adequate for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must explain parameters. It does clarify that commentId must be a thread root, which is useful. However, body and artifactId are left entirely to inference (body is likely the reply text, artifactId likely the dashboard identifier). Given the 0% coverage, the description only partially compensates.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Reply to a comment thread on a Duvo Pulse dashboard.' This clearly distinguishes it from sibling tools like createPulseDashboardComment (which creates a new thread) and sendPulseDashboardMessage (for dashboard messages). It also notes the one-level-deep thread structure, reinforcing that this is strictly a reply operation.

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

Usage Guidelines4/5

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

The description makes it clear this is for replying to an existing thread, which implies when to use it. However, it does not explicitly name alternatives (e.g., 'Use createPulseDashboardComment for new threads') or state when not to use it. The constraint on commentId being a thread root provides practical guidance but not tool-selection guidance.

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

createQueueCreate QueueCInspect

Create a new queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesQueue name. A standalone queue must be uniquely named within the team. A queue created inside an automation instead has to be uniquely named within a revision, which is checked when that revision is activated.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folder_idNoOptional folder to nest the queue under.
descriptionNoOptional human-readable description.
automation_idNoAutomation this queue belongs to. Optional for teams not yet migrated to Automations; required once a team has migrated.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-read-only operation. The description adds no additional behavioral detail about side effects, idempotency implications, permissions, or failure modes. It contributes nothing beyond the annotations already provide.

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

Conciseness4/5

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

The description is a single sentence with no filler, and the core action 'Create a new queue' is front-loaded. It is appropriately concise, though it sacrifices useful context that would justify a perfect score.

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

Completeness2/5

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

With five parameters, no output schema, and many queue-related sibling tools, a single generic sentence is insufficient for an agent to fully understand the operation's context, return value, or prerequisites. The schema fills in some gaps, but the description alone is inadequate for complete tool selection and invocation.

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

Parameters3/5

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

The input schema has 100% description coverage for all five parameters, including detailed notes on name uniqueness, team_id fallback behavior, and automation_id migration requirements. The description itself adds no parameter-level information, but the schema fully carries that burden, 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.

Purpose4/5

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

The description 'Create a new queue' clearly identifies the action (create) and the target resource (queue), making it distinct from similar siblings like createQueueAggregation, createQueueLabel, and createQueueJsonSchema. It is direct and unambiguous, though it does not explain what a queue is or when it should be used.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as updateQueue, deleteQueue, or listQueues. It also omits important contextual conditions like the automation migration requirement mentioned in the automation_id parameter description. An agent receives no direction for choosing this tool correctly.

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

createQueueAggregationCreate Queue AggregationBInspect

Create an immutable aggregation definition on a queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
definitionYes
maximum_stale_age_secondsNo

TDQS

B3.4/5.0
Behavior3/5

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

The word 'immutable' adds useful behavioral context beyond the annotations, signaling that a created aggregation definition cannot later be modified in-place. However, the description does not mention side effects, permissions, what happens if the queue does not exist, or whether creation replaces any existing definition.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no filler or repetition. It is appropriately concise for stating the core action, though it sacrifices useful detail that would require a second sentence, so it is not quite excellent.

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

Completeness2/5

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

For a tool with a highly complex nested input schema and no output schema, one short sentence is insufficient. Missing context includes parameter semantics, lifecycle implications of immutability, relationship to evaluateQueueAggregation/refreshQueueAggregation, and what a successful response looks like.

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

Parameters2/5

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

Schema description coverage is only 33%, so the description needed to compensate for the undocumented parameters, but it does not. It only says 'aggregation definition on a queue' and never explains maximum_stale_age_seconds or the meaning/structure of the definition object's measures, dimensions, filters, or timeDimension.

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

Purpose5/5

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

The description names a specific action ('Create') and a specific resource: an immutable aggregation definition on a queue. It is concise and distinguishable from sibling tools such as listQueueAggregations, evaluateQueueAggregation, and refreshQueueAggregation.

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

Usage Guidelines3/5

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

The description implies this tool is for creating a new aggregation definition, but it does not explicitly state when to use it versus related tools like evaluateQueueAggregation or refreshQueueAggregation. No exclusions, prerequisites, or alternative routing guidance are provided.

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

createQueueJsonSchemaCreate Queue Json SchemaAInspect

Declare a queue's first Case schema by hand, so a person can type a queue up front instead of waiting for its producing agent to declare the shape. Fails if the queue already has a schema — replace an existing one with PUT.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
schemaYes
queue_idYesThe queue's unique identifier

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already signal a non-read-only, non-idempotent write, and the description adds a concrete failure mode: it fails if the queue already has a schema. It also clarifies that the schema is manually declared rather than agent-generated, adding useful 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.

Conciseness5/5

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

The description is two sentences with no filler. The core purpose is front-loaded, and the failure condition plus replacement guidance follow naturally. Every clause earns its place.

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

Completeness3/5

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

For a three-parameter create tool with no output schema, the description covers purpose, failure behavior, and replacement routing well. However, the meaning of name and the concrete shape of the schema payload remain underspecified, so it is not fully complete.

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

Parameters3/5

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

Only queue_id is described in the schema, so the description must compensate. It adds meaning by explaining that schema is a hand-declared Case schema and that it must be the first one, but it does not explain the name parameter or the expected structure of the schema object. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific action ('Declare a queue's first Case schema by hand'), the exact resource, and the constraint that it is the first schema. It also distinguishes itself from replacement/update siblings by noting the 'first' aspect and the PUT replacement path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool (manual up-front schema declaration before the producing agent declares the shape) and when not to use it (if the queue already has a schema), pointing to replacement via PUT. This gives an agent clear routing guidance among the queue-schema siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createQueueLabelCreate Queue LabelBInspect

Create a label on a queue without assigning it to a case.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
valueYes
queue_idYesThe queue's unique identifier
color_hueNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation that is non-idempotent and non-destructive. The description adds the useful distinction that the label is not assigned to a case, but it does not disclose behavior like duplicate handling, idempotency implications, or required permissions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no wasted words. It front-loads the action and resource, though it is somewhat terse given the tool's parameter complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters, low schema coverage, and no output schema, the description is too thin. It omits parameter semantics, return behavior, and any operational context, leaving the agent to infer too much.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, with queue_id documented. The description loosely implies queue_id and value (label text) but does not explain key or color_hue at all. With low schema coverage, the description was expected to compensate, and it largely does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Create a label on a queue' and explicitly distinguishes it from case-level labeling. This clearly differentiates it from siblings like assignCaseLabels and aligns with the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without assigning it to a case' gives a partial routing signal, implying this is for queue-level labels rather than case labels. However, it does not explicitly name alternatives such as assignCaseLabels, updateQueueLabel, or listQueueLabels, nor state when to prefer this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createRevisionCreate RevisionBInspect

Create a new revision for an existing agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBuild name
configNoBuild configuration. An agent step takes the latest agent schema (legacy v1 agent configs are not accepted); a code step takes a code-step config. Omit it to get the step family's default first build.
agent_idYesThe agent's unique identifier
handover_toNoThe single agent or code step to run after this one completes ("Handover to"). Mutually exclusive with handover_target_ids.
source_build_idNoBuild ID to copy integrations and queue links from
handover_optionsNoCode steps only. The targets the program may request, and whether it must. Null clears them; omit to inherit the source build's. Mutually exclusive with handover_to.
handover_target_idsNoAgent IDs that this agent can hand work off to
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, so the mutation profile is covered. The description adds minimal context: 'for an existing agent' implies the agent must already exist, which is a small useful constraint. No contradiction with annotations, but no deeper behavioral detail is added beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the key action front-loaded. It is appropriately sized and contains no waste, though it is thin on content for a tool of this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 8 parameters including an intricate config schema and no output schema, the one-sentence description is under-specified. It does not explain the agent-step versus code-step distinction, the config semantics, or the handover/selected_automation_revision_id options, leaving the agent to rely entirely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 8 parameters including the complex config payload. The description adds no parameter information itself, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('a new revision for an existing agent'), making the core action clear. It does not explicitly differentiate from siblings like createAutomationRevision, createSkillRevision, or updateRevision, but the target resource is unambiguous enough that an agent can distinguish it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as updateRevision, generateRevision, or promoteRevision. Nothing states when to create versus modify a revision, nor any prerequisites beyond the agent existing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSandboxCreate SandboxAInspect

Create a new sandbox for file uploads. The returned sandbox_id can be passed to POST /v2/teams/:team_id/runs to stage data for a run.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is not read-only, not idempotent, and not destructive. The description adds the useful downstream behavior that the returned sandbox_id is passed to a run endpoint, but it does not disclose other behavioral traits such as cleanup, persistence, or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary purpose is stated first, followed by the actionable downstream usage. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter creation tool with no output schema, the description is complete: it names the resource, states what is returned (sandbox_id), and explains how to use it. An agent has enough information to call the tool and understand its role in the broader workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there is no parameter ambiguity. The description appropriately focuses on what the tool returns and how that return value is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Create a new sandbox for file uploads.' It also explains the sandbox's role in staging data for a run, which distinguishes it from sibling tools like createSandboxUploadUrl or uploadSandboxFile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when a sandbox is needed for file uploads before staging data for a run. It does not explicitly mention alternatives or when-not-to-use, but the downstream use case is specific enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSandboxUploadUrlCreate Sandbox Upload UrlAInspect

Get a presigned URL for uploading a file into a sandbox. Use for files larger than 10MB; smaller files can be uploaded directly via POST /v2/sandboxes/:sandbox_id/files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath where the file will be uploaded (e.g. /workspace/data.csv)
sandbox_idYesThe sandbox's unique identifier

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide the safety profile (not read-only, not idempotent, not destructive), so the bar for additional disclosure is lower. The description adds the presigned-URL mechanism and the size threshold as useful behavioral context. However, it does not disclose URL expiration, whether the sandbox must already exist, or side effects of generating the URL. With annotations present, the added value is moderate but not rich — a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core function is front-loaded in the first sentence, and the second sentence earns its place by providing the routing decision. Every word contributes either to what the tool does or when to use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-param tool with fully documented schema and clear annotations, the description covers the essential calling decision: what it returns (a presigned URL), when to use it (files > 10MB), and its sandbox scope. Minor gaps remain: no output schema means the exact response shape is unspecified, and it doesn't explicitly differentiate from the generic createFileUploadUrl sibling — though the sandbox scoping largely handles that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both sandbox_id and path are already documented in the schema with meaningful descriptions. The tool description reinforces the upload context via the 10MB threshold, but adds no parameter-level syntax or format detail beyond the schema. Per calibration, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a presigned URL for uploading a file into a sandbox.' The sandbox scoping and the presigned-URL mechanism clearly distinguish it from siblings like uploadSandboxFile (which performs the upload) and createFileUploadUrl (generic, non-sandbox URL). An agent can tell this tool apart from its nearest alternatives 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the decision rule for this tool: 'Use for files larger than 10MB; smaller files can be uploaded directly via POST /v2/sandboxes/:sandbox_id/files.' This is model usage guidance — it states when to use this tool, when not to, and provides the exact alternative endpoint. 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.

createScheduleCreate ScheduleCInspect

Create a schedule for an agent. The schedule fires against the agent's live build. The authenticated user owns the schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo
cronNo
timeNo
enabledYes
agent_idYesThe agent's unique identifier
timezoneYes
frequencyYes
recurringNo
day_of_monthNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the schedule fires against the agent's live build, providing some behavioral insight. However, it does not mention side effects such as overwriting existing schedules, whether the action is idempotent (though annotations indicate idempotentHint=false), or what the response contains. Since annotations provide no additional hints (e.g., readOnlyHint, destructiveHint), the description carries the burden but only partially fulfills it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the primary purpose. It avoids unnecessary words and is well-structured, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters (4 required) and no output schema, the description is severely incomplete. It does not explain scheduling semantics, how parameters interact, or what the return value looks like. Users would need to consult external documentation or infer from parameter names, which is insufficient for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any of the parameters beyond the schema's minimal coverage (only agent_id has a description). It does not clarify the meaning of frequency, day, cron, time, recurring, or day_of_month, leaving users to infer their roles. With schema description coverage at only 11%, the description adds no value to parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Create a schedule' and specifies the resource 'agent'. It adds context about the schedule firing against the agent's live build and ownership by the authenticated user, which helps differentiate it from other create tools like createAutomation. However, it does not explicitly list the schedule type or frequency options, leaving some ambiguity about the exact purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives such as updateSchedule, deleteSchedule, or createAutomation. It does not mention scenarios where scheduling is needed or when other tools might be more appropriate. The only contextual hint is that the schedule fires against the agent's live build, but this is not framed as a usage criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSecretCreate SecretAInspect

Create an env-var secret. Personal by default; pass shared: true to create a team-shared secret (requires lead builder role).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
sharedNo
valuesYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
service_slugNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal non-readonly, non-idempotent, non-destructive behavior. The description adds useful context beyond annotations: the default personal scope and the role requirement for shared secrets. This helps the agent anticipate authorization behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The core action is front-loaded, and the key parameter behavior (`shared: true` plus role requirement) is stated efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five parameters, low schema coverage, and no output schema, the description covers the main creation flow but leaves `service_slug` unexplained. It also does not mention what the tool returns, although the absence of an output schema lowers that burden. Overall, it is adequate for the common case but not fully complete for all parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description must compensate. It does clarify the `shared` parameter semantics and default behavior, and "env-var secret" implies the shape of `values`. However, it says nothing about `service_slug`, which remains undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Create an env-var secret," which clearly identifies the operation and the object type. It also distinguishes personal vs. team-shared scope, helping the agent differentiate this from sibling tools like createCredential or updateSecret.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: personal is the default, and team-shared requires both `shared: true` and the lead builder role. It does not explicitly enumerate when to avoid this tool in favor of siblings, but the create operation and env-var type make the primary use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSkillCreate SkillAInspect

Create or update a skill from a JSON body. The server constructs SKILL.md from the provided fields and stores it. If a skill with the same name already exists in the team, it is updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSkill name. 1-64 lowercase alphanumeric chars and hyphens; no leading/trailing or consecutive hyphens.
contentYesMarkdown body of SKILL.md without YAML frontmatter. The server prepends the frontmatter from the other fields.
licenseNoOptional: license name or reference to a bundled license file.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
metadataNoOptional: arbitrary key-value metadata.
descriptionYes1-1024 chars describing what the skill does and when to invoke it.
allowed-toolsNoOptional (experimental): space-delimited list of pre-approved tools.
compatibilityNoOptional: 1-500 chars describing environment requirements.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the key non-obvious side-effect: if a skill with the same name already exists in the team, it is updated, which implies possible overwriting of existing content. It also clarifies that the server generates SKILL.md from the provided fields, adding 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core action, and includes the important update behavior without filler. Every clause contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential create/update behavior and team-scoped name uniqueness, while the schema handles parameter documentation. However, with no output schema, the description does not say what the call returns, and it gives no indication of how this tool relates to the revision workflow represented by createSkillRevision and promoteSkillRevision.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents name constraints, content behavior, team_id fallback rules, and optional fields. The description adds only the high-level 'JSON body' framing and SKILL.md construction, which is helpful but does not meaningfully expand parameter-level understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Create or update a skill') and adds concrete behavior: the server constructs SKILL.md and stores it. It is clear, but it does not explicitly differentiate the tool from closely related siblings like createSkillRevision or updateSkillRevision, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance is provided, and the description never mentions alternatives such as createSkillRevision, updateSkillRevision, or updateSkillFile. The only usage hint is the conditional update-on-same-name behavior, which describes behavior rather than telling the agent when to select this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSkillRevisionCreate Skill RevisionA
Idempotent
Inspect

Open a draft revision of a skill, copying its files from the active revision (or from source_revision_id). Edit the draft with updateSkillRevisionFile, then activate it with promoteSkillRevision — the previously active revision stays intact and can be re-activated later. A skill has at most one open draft: if one already exists this returns it with created: false.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID.
source_revision_idNoRevision to fork the new draft from. Defaults to the live revision (or the skill's current files if there is no live revision yet).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate an idempotent, non-destructive, read-write operation, and the description adds valuable context: files are copied from the active revision, the previously active revision remains intact and re-activatable, and an existing draft is returned with created: false. This prevents the agent from assuming duplicate creation or destructive overwrite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver purpose, workflow, and idempotence behavior without redundancy. The main action is front-loaded, and every sentence contributes unique information needed to use the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains the return semantics (returns the draft with created: false for existing drafts), the file-copy behavior, and the lifecycle relationship to edit and promote operations. Nothing essential for invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters fully. The description's mention of copying from the active revision or source_revision_id adds minimal meaning beyond the existing schema descriptions, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Open a draft revision of a skill'), explains the copy source, and clarifies the create-or-get behavior. It explicitly names companion operations (updateSkillRevisionFile, promoteSkillRevision), making it distinguishable from other revision-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description embeds the tool in a clear workflow: open a draft, edit it, then promote it. It also warns about the one-open-draft constraint and the existing-draft fallback. However, it does not explicitly contrast this with related tools such as createRevision, so exclusion guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createTeamInviteCreate Team InviteAInspect

Invite one person to a team. Pass processId to invite them to a specific Clarity process instead of the whole team (that requires the team:clarity-member role). Creating the invitation does NOT email anyone — call sendTeamInviteEmail with the returned id to deliver it, or use bulkCreateTeamInvites, which creates and emails in one step.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesTeam role to grant. One of: team:owner, team:superadmin, team:admin (deprecated), team:manager, team:builder, team:member, team:clarity-member. You cannot grant a role above your own. Process invitations must use team:clarity-member.
emailYesEmail address of the person to invite.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
processIdNoInvite the person to this Clarity process rather than the whole team. Requires the team:clarity-member role.
process_role_idNoConfigured Process role to assign alongside the Clarity invitation. Requires processId; the role must belong to that Process.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the sparse annotations (readOnlyHint=false, idempotentHint=false, etc.), the description discloses a key non-obvious behavior: creating the invitation does NOT email anyone, and the result is an id to pass to sendTeamInviteEmail. It also flags the team:clarity-member role requirement for process invites. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, followed by the process variant and the critical no-email caveat. Every sentence carries distinct information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description supplies the essential return hint ('returned id') and the follow-up step, while the schema covers parameter-level details. The description and schema together leave no critical gap for an agent invoking this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter (email, role, team_id, processId, process_role_id) already has a detailed schema description. The tool description adds no new parameter semantics beyond echoing processId's purpose, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Invite one person to a team') and immediately clarifies the process-scoped variant using processId. It distinguishes itself from sibling tools by naming sendTeamInviteEmail and bulkCreateTeamInvites, making its role in the invitation flow unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states that creating the invitation does NOT email anyone and routes to the correct sibling: call sendTeamInviteEmail with the returned id to deliver, or use bulkCreateTeamInvites to create and email in one step. It also explains when to pass processId and the associated role requirement, giving clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

declineClarityLandscapeNodeDecline Clarity Landscape NodeAInspect

Reject a proposed process landscape node while it is still a proposal, removing it and any proposed descendants. Real processes nested underneath survive and move back to Unsorted. Only proposals can be declined — an accepted node is removed with deleteClarityLandscapeNode.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYesThe proposed node to reject.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are thin (readOnly=false, destructiveHint=false, no idempotency), so the description carries the disclosure burden and succeeds. It reveals the cascade effect (proposed descendants are removed), what survives (real processes), and their relocation (back to Unsorted). There is mild tension between destructiveHint=false and the removal behavior, but the description's explicit scoping to transient proposals resolves rather than contradicts the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: primary action and effect, survival/relocation behavior, then the exclusion condition with the named alternative. The most decision-relevant information is front-loaded, and nothing restates the tool's name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-UUID-parameter tool with no output schema, the description covers the action, cascade behavior, survival of real processes, relocation to Unsorted, and the proposal-only restriction. The only gaps are what the call returns and behavior on an invalid or already-declined node — minor given the annotations and explicit state restriction.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: nodeId has a description but orgId is undocumented in both the schema and the tool description. The description adds the key state constraint ('Only proposals can be declined'), reinforcing nodeId's semantics, but it does not compensate for the undocumented orgId or clarify how the two parameters relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: 'Reject a proposed process landscape node.' It immediately scopes the operation to proposal state and names the sibling it is not (deleteClarityLandscapeNode for accepted nodes), so an agent can distinguish it from acceptClarityLandscapeNode and deleteClarityLandscapeNode 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the condition for use ('Only proposals can be declined') and names the alternative tool for the other case ('an accepted node is removed with deleteClarityLandscapeNode'). This gives both positive and negative routing guidance, leaving no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

declineRevisionGenerationDecline Revision GenerationAInspect

Discard generated changes by restoring checkpoint_config and completing the builder run. The saved draft is not activated.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYesThe revision identifier.
builder_run_idYesThe builder run returned by generation or status, belonging to this revision.
expected_started_atYesCopy started_at from the status being reviewed. Each prompt has its own builder run ID; stale review identities return 409.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate non-readOnly, non-idempotent, and non-destructive, but the description clarifies that the action discards generated changes (destructive in nature) and completes the builder run, which is not obvious from annotations. It also notes that the saved draft is not activated, providing key behavioral details beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that conveys the action and consequence without redundancy. It is front-loaded with the core purpose and adds one critical caveat about draft activation. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the action and effect. The schema provides additional necessary context for parameter usage. Minor gap: it does not describe any conditions under which the decline might fail (other than 409 on stale identity) or side effects beyond checkpoint restoration, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for build_id and builder_run_id, but the description adds no extra detail for them. However, the schema description for expected_started_at includes crucial guidance about stale review identities returning 409, which is essential for correct parameter usage. This exceeds baseline for schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Discard generated changes'), the resource (checkpoint_config), and the outcome (revision not activated). It also mentions completing the builder run, which is distinct from related actions like acceptRevisionGeneration or cancelBuilderRun. The title and description align, making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a user wants to discard changes, but it does not explicitly differentiate from similar tools like cancelBuilderRun or acceptRevisionGeneration. The schema description on expected_started_at adds critical guidance about copying started_at from the status being reviewed, which aids correct usage, but lacks explicit alternatives or when-not scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAgentDelete AgentA
DestructiveIdempotent
Inspect

Delete an agent and cascade-clean its schedules, case triggers, builder runs, and handover targets. Any active jobs are interrupted and their sandboxes paused.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, so the description adds purely additive value: it specifies exactly what gets destroyed (schedules, case triggers, builder runs, handover targets) and discloses runtime side effects (active jobs interrupted, sandboxes paused). This is precisely the behavioral context an agent needs beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with zero waste. The core action and cascade scope are front-loaded in sentence one, and the side effects on active jobs and sandboxes follow in sentence two. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive one-parameter tool, the combination of annotations (destructive, idempotent) and description (cascade scope, job interruption, sandbox pause) gives an agent nearly everything needed. With no output schema, return behavior is not specified, but the idempotentHint=true annotation partially covers the error/no-op question for already-deleted agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the single agent_id parameter is already described as 'The agent's unique identifier' with a UUID format. The description adds no parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an agent') and then details the full scope of what deletion entails via the cascade list. This distinguishes it clearly from partial-deletion siblings like deleteAgentCaseTrigger, deleteAgentFolder, deleteSchedule, and deleteAutomation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of use is clear: this is the whole-agent destruction path. The cascade-clean detail implicitly signals to an agent that if it only wants to remove a schedule, trigger, or run, a more targeted sibling should be used. However, no alternative is named explicitly and no when-not-to-use conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAgentCaseTriggerDelete Agent Case TriggerA
DestructiveIdempotent
Inspect

Delete a case trigger. Only the trigger creator or a builder/admin can delete it.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
trigger_idYesThe case trigger's unique identifier

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation destructive and non-read-only; the description adds the authorization requirement, which annotations do not convey. No contradiction with idempotentHint is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action; the permission note is the only additional information. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter delete with safety annotations already provided, the description covers the essential action and authorization context. It doesn't explicitly mention the agent-trigger ownership relationship, but that is strongly implied by the tool name and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully described in the schema with UUID formats and meanings, so schema coverage is 100%. The description adds no parameter-specific details, matching the baseline for schema-covered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a direct verb and object ('Delete a case trigger'), stating exactly what the tool does. The phrase 'case trigger' distinguishes it from sibling deletion tools such as deleteSlackTrigger, and the permission clause further narrows the operation's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The authorization constraint ('Only the trigger creator or a builder/admin can delete it') gives an agent clear context on when invocation is permitted. It does not name alternatives like updateAgentCaseTrigger, but for a delete tool this is sufficient context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAgentFolderDelete Agent FolderA
DestructiveIdempotent
Inspect

Delete an agent folder. If the folder contains assignments or subfolders, pass force=true to delete it and move the contained assignments to the root level.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoPass 'true' to delete a folder that still contains assignments or subfolders. Any contained assignments will be moved to the root level.
folder_idYesThe folder's unique identifier

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the destructive nature and the side effect of moving assignments when force is used. While annotations already indicate destructiveHint, the description adds context about the force condition. It does not contradict annotations, but could mention that without force the delete will fail on non-empty folders, which is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, two sentences, with no redundant words. It efficiently conveys the core action and the conditional behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

In the context of agent folder management, this description fully covers what the tool does and when to use force. It does not require additional explanation about return values or errors, as no output schema is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions for both parameters are clear and match the tool description. The folder_id is described as a unique identifier, and force explains the condition and effect. The tool description repeats the force semantics but adds no new information beyond schema, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (delete) and the resource (agent folder), and distinguishes it from sibling tools like createAgentFolder and updateAgentFolder. It also mentions the force option, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly specifies when to use the force parameter ('If the folder contains assignments or subfolders') and describes the resulting behavior (moving assignments to root level). This provides clear guidance for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAgentTriggerDelete Agent TriggerA
DestructiveIdempotent
Inspect

Permanently delete one of your own event triggers on an agent. The agent stops starting Runs for that event and the trigger's filter config is lost. To keep the trigger but stop it firing, upsert it with enabled: false instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier
triggerIdYesThe trigger to delete

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description fully discloses the permanent nature, the loss of filter config, and the immediate effect on Runs. It also aligns with the destructiveHint and idempotentHint annotations, going beyond them to explain specific 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, direct and free of extraneous information. It packs essential details into a compact structure without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with no output schema, the description covers the core action, consequences, and alternative. No additional context (e.g., error handling, prerequisites) is necessary for an agent to understand and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have clear descriptions in the schema (agentId as 'The agent's unique identifier' and triggerId as 'The trigger to delete'). The description adds no further parameter-specific detail, but the schema coverage is 100%, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (permanently delete), the resource (event triggers on an agent), and the effect (stops starting Runs, filter config lost). It also distinguishes from the alternative of disabling via upsert, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool vs. the alternative: 'To keep the trigger but stop it firing, upsert it with `enabled: false` instead.' This directly tells the agent when not to use it, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAllNotificationsDelete All NotificationsA
DestructiveIdempotent
Inspect

Soft-delete all notifications for the authenticated user's current team, read or unread. Returns the count of notifications that were deleted. Destructive — only call on explicit user request, never bulk-delete unprompted. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the destructiveHint annotation by explaining that deletion is soft, that the call returns the deleted count, and that a disabled feature yields 404. These details give an agent accurate expectations about side effects and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly scoped sentences lead with the action and scope, then cover return value, safety rule, and error condition. No filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive bulk operation with a single optional parameter, the description covers scope, return value, when it is permitted, feature requirements, and failure behavior. There is no output schema, but the description states what is returned, so 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single team_id parameter completely, so the description adds no extra parameter semantics. With 100% schema coverage, the baseline of 3 is appropriate because the description doesn't need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('soft-delete'), a precise resource ('all notifications ... read or unread'), and a scope ('authenticated user's current team'). It also distinguishes itself from sibling deleteReadNotifications by explicitly covering both read and unread notifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: only on explicit user request and never unprompted, plus the Notification Center feature prerequisite and 404 behavior. It does not name an alternative tool such as deleteReadNotifications for the read-only case, 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.

deleteAutomationDelete AutomationA
DestructiveIdempotent
Inspect

Soft-delete an automation. Its member agents and queues stop dispatching and disappear from listings, but their underlying rows and run history are preserved (not erased) so the automation can be restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true and idempotentHint=true; the description adds substantial nuance by revealing the soft-delete nature: member agents and queues stop dispatching and vanish from listings while underlying rows and run history survive and can be restored. This directly answers what gets destroyed versus what is preserved, going well beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb-resource pair followed by one clause detailing the behavioral consequences. Every sentence earns its place; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete operation with rich annotations, the description covers the key questions: what happens to the automation, its member agents and queues, and its underlying data. It omits the response shape and a note on idempotency in prose, but these are either captured by the idempotentHint annotation or minimal for a delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — automation_id is fully documented with type, format, pattern, and a description ('Automation ID'). The description adds no parameter-level detail, so the baseline score of 3 applies; the schema carries the full burden and does so adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Soft-delete an automation,' which names a specific verb and resource, and immediately distinguishes itself from hard-delete semantics with '(not erased)'. It clearly anchors on automations, separating it from the many other delete* siblings like deleteAgent and deleteQueue, while defining the precise scope of the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The soft-delete framing plus the explicit consequences — member agents and queues stop dispatching, disappear from listings, and data is preserved for restoration — give an agent a clear picture of when this tool is appropriate. It does not name alternative tools or state exclusions, but the resource is unambiguous and no hard-delete automation alternative exists among siblings, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteAutomationRevisionDelete Automation RevisionA
DestructiveIdempotent
Inspect

Discard a draft revision and its bindings. Only drafts can be discarded; live and historic revisions are immutable history.

ParametersJSON Schema
NameRequiredDescriptionDefault
revision_idYesRevision ID
automation_idYesAutomation ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, and the description's 'Discard' aligns with those. It adds useful context by stating that bindings are removed along with the revision and that only drafts are eligible, which goes beyond the structured annotations. It does not mention permissions or irreversibility, but the core destructive behavior is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two highly efficient sentences with the primary action front-loaded and the key constraint in the second sentence. There is no filler, no repetition of the title or schema, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive operation with full schema coverage and appropriate annotations, the description is complete: it identifies the target, the side effect on bindings, and the eligibility restriction. No output schema exists, so omitting return-value details is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both revision_id and automation_id already documented as UUID IDs. The description's mention of 'draft revision and its bindings' adds a little semantic context about what is deleted, but it does not need to elaborate on the individual parameters given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Discard') and a specific resource ('a draft revision and its bindings'). The follow-up sentence, 'Only drafts can be discarded; live and historic revisions are immutable history,' clearly distinguishes the tool from revision-lifecycle siblings such as activateAutomationRevision or promoteRevision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when the tool should be used—discarding a draft revision—and gives a clear when-not: live and historic revisions cannot be discarded because they are immutable. It does not name an alternative tool, but the boundary is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCaseDelete CaseA
DestructiveIdempotent
Inspect

Delete a case. Interrupts any associated active runs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive and idempotent. The description adds valuable context by disclosing that active runs are interrupted before deletion, which is not inferable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: the action is first, and the key behavioral caveat is included without excess. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter destructive operation, the description is complete. Annotations cover idempotency and destructive intent, and the description covers the main side effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the single case_id parameter with type, format, and description. The tool description adds no additional parameter detail, so it does not need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Delete a case.' The addition that it interrupts active runs first further distinguishes it from simple delete operations and clarifies scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: use this when a case should be permanently removed. It does not explicitly compare against alternatives like updating a case or stopping runs, though the interruption note hints at related workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCaseAttachmentDelete Case AttachmentA
DestructiveIdempotent
Inspect

Remove a file from a case. The row is soft-deleted; deletion of the stored object is attempted best-effort.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier
attachment_idYesThe attachment's unique identifier

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds important behavioral detail beyond the annotations by disclosing that the database row is soft-deleted and that the stored object deletion is best-effort. This sets accurate expectations about reversibility and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the primary action front-loaded and the critical side-effect immediately after. No filler, repetition, or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the essential behavior: soft deletion and best-effort object removal. It could add permission or error details, but the annotations already cover idempotency and destructiveness, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage of all three UUID parameters with descriptions. The tool description adds no per-parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Remove a file from a case.' This clearly matches the tool name and distinguishes it from generic deleteCase or deleteFile operations, though it does not explicitly contrast with sibling attachment tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as finalizeCaseAttachment, getCaseAttachmentDownloadUrl, or deleteFile. The intended usage is only implied by the name and the 'from a case' scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCaseQueueEvalRubricDelete Case Queue Eval RubricA
DestructiveIdempotent
Inspect

Remove a single case-level evaluation rubric. Cases settled after this are no longer judged against it; already-judged cases keep their original verdicts. Removing the queue's last remaining rubric is refused with 409 — whole-case evaluation regenerates rubrics for an empty set at the next settlement, so the removal would not stay removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
rubric_idYesThe case-level rubric's unique identifier

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though destructiveHint and idempotentHint already flag safety, the description reveals substantive behavior beyond annotations: settled cases retain verdicts, future cases stop being judged, and the 409 refusal is explained with a rationale. This is exactly the kind of context an agent needs for a destructive deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences carry action, consequence, and edge case with no filler. The most important information is front-loaded, and the 409 exception is explained rather than merely stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers what happens to future and already-judged cases, the edge case that triggers refusal, and why that refusal exists. Nothing essential for calling or understanding the outcome is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already defines queue_id and rubric_id as unique identifiers. The description adds mild context by tying rubric_id to a single case-level rubric and queue_id to the queue's last-remaining-rubric check, but it does not materially extend the schema's parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence 'Remove a single case-level evaluation rubric' specifies the action, object, and scope precisely. The queue context and the single-rubric constraint separate it from generic deleteEvalRubric and from create/update/replace siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when deletion applies through 'single' and the queue context, and it gives a concrete exclusion: removal of the last remaining rubric is refused. However, it never names alternative tools such as updateCaseQueueEvalRubric or replaceCaseQueueEvalRubrics, so the when-vs-alternatives 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.

deleteClarityArtifactChatConversationDelete Clarity Artifact Chat ConversationA
DestructiveIdempotent
Inspect

Soft-delete an open or running artifact-chat conversation for the current user.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idYesThe Clarity process id
conversation_idYesThe artifact-chat conversation id

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already flag destructive=true, but the description adds meaningful behavioral context: the deletion is a 'soft-delete' rather than a hard purge, and it is scoped to the current user. It also conditions validity on the conversation being 'open or running.' Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the operative verb, and no filler or repetition of the title. Every phrase ('soft-delete', 'open or running', 'current user') adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive action, the description provides the target, operation type, state precondition, and user scope; the schema covers parameter specifics. It does not describe return values or observable effects of a soft-delete, but with destructive and idempotent annotations this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema documents both parameters fully with format, pattern, and descriptions, so the 100% coverage baseline applies. The tool description adds no additional meaning about process_id or conversation_id beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact verb ('soft-delete'), the resource ('artifact-chat conversation'), and the relevant qualifiers ('open or running', 'for the current user'). This clearly distinguishes it from other delete and artifact-chat tools without requiring inspection of the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the valid state ('open or running') and user scope explicit, so an agent can infer when it applies. However, it does not name the closely related alternative stopClarityArtifactChatConversation or explain when to choose this delete operation over stopping a conversation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityCaptureDelete Clarity CaptureC
DestructiveIdempotent
Inspect

Delete a capture from a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
captureIdYesThe capture ID to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already carry destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds no behavioral context beyond what the annotations already signal — it doesn't mention permanence, side effects, cascading deletions, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no wasted words. It is concise and front-loaded, though it could add a short clause about permanence or side effects without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (2 params, no output schema), but the description omits consequences of deletion, such as whether it is permanent or whether dependent data is affected. The annotations cover the destructive nature, making this minimally sufficient but not complete for an agent that needs to anticipate side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both id and captureId fully documented as UUIDs with clear meanings ('The clarity process ID', 'The capture ID to delete'). The description adds no additional parameter meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete a capture from a clarity process.' This distinguishes it from sibling tools like deleteClarityProcess or deleteClarityFolder, though it doesn't clarify what a 'capture' is or how it differs from a 'suggestion' in sibling tools like dismissClarityCaptureSuggestion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as getClarityCapture, listClarityLandscapeCaptures, or dismissClarityCaptureSuggestion. No prerequisites, exclusions, or context are provided to help an agent choose this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityFolderDelete Clarity FolderA
DestructiveIdempotent
Inspect

Delete a process folder. Contained processes fall back to Unfiled.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folderIdYesFolder to delete.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds the key non-obvious behavior that contained processes are not destroyed but reassigned to Unfiled, which is valuable beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no repetition of the title or redundant qualifiers. The action is front-loaded and the side effect is stated in the second sentence, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with complete schema coverage, strong annotations, and no output schema, the description provides the critical behavioral consequence (processes fall back to Unfiled). Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with team_id already documented in detail and folderId described as 'Folder to delete.' The tool description adds no parameter-level meaning beyond what the schema provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Delete') and a specific resource ('a process folder'), and the second sentence clarifies scope by distinguishing folder deletion from process deletion. It differentiates this from siblings like deleteClarityProcess and updateClarityFolder 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this when the goal is to remove a process folder. The fallback-to-Unfiled side effect gives useful context for choosing this over deleting processes individually, but no explicit when/when-not conditions or alternative tools are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityLandscapeNodeDelete Clarity Landscape NodeA
DestructiveIdempotent
Inspect

Soft-delete a tree node and its descendants. Organization admins may delete any subtree; team managers may delete a childless process node owned by their team. The targeted node's linked clarity process and captures are deleted, while nested processes detach to the Unsorted bag.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits beyond annotations: it is a soft-delete, it deletes linked clarity process and captures, and nested processes detach to the Unsorted bag. These side effects are critical for the agent to understand the impact. This goes well beyond the destructiveHint annotation and provides specific consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action and followed by essential details. No filler or redundancy. It efficiently covers the core behavior and conditions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with cascading effects, the description covers permissions, the scope of deletion, and the fate of linked and nested entities. It is complete enough for an agent to understand the consequences and prerequisites. The absence of an output schema is acceptable, and the description does not omit critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameter meaning. It explicitly identifies nodeId as the tree node being deleted, but orgId is not directly defined; its role is implied by 'Organization admins.' This partial clarification is insufficient for full compensation, though the context helps infer orgId's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: soft-deleting a tree node and its descendants. It distinguishes this from other delete operations by specifying the scope (subtree vs childless) and the cascading effects on linked processes and captures. The name and description align, and it's unambiguous what resource is acted upon.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit conditions for usage: organization admins can delete any subtree, while team managers can delete childless process nodes owned by their team. This gives clear permission-based guidance. However, it does not explicitly name alternative tools (e.g., deleteClarityProcess) or state when to choose this over others, though the distinction is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityLandscapeNodeInterviewDelete Clarity Landscape Node InterviewB
DestructiveIdempotent
Inspect

Delete an organization-scoped folder interview

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization ID
nodeIdYesThe clarity process folder node ID
interviewIdYesThe folder interview ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish destructiveHint=true and idempotentHint=true; the description adds the scoped target and implies the interview is removed rather than the folder/node, but it does not disclose permanence, cascading effects, or permission requirements. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It efficiently states the action and the resource, and every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-ID delete, the schema and annotations supply most invocation details, and there is no output schema to explain. However, the description omits usage context such as which sibling delete tools it should be chosen over and what side effects, if any, occur, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter has a clear description, so the schema carries the parameter meaning. The tool description adds little beyond the 'organization-scoped' phrasing, which maps loosely to orgId, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb ('Delete') and a specific resource ('organization-scoped folder interview'), so an agent can see this removes a folder/node-level interview. It is clear, but it relies on the title and sibling names to disambiguate from deleteClarityOrganizationInterview and deleteClarityTeamInterview, so it does not earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no conditions, prerequisites, or exclusions, and never mentions the alternative interview-deletion tools. An agent has to infer when this tool is the right one from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityOrganizationInterviewDelete Clarity Organization InterviewC
DestructiveIdempotent
Inspect

Delete an organization-level Clarity interview

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
interviewIdYesThe organization interview ID

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already supply destructiveHint=true, idempotentHint=true, and readOnlyHint=false, and the description is consistent with them, so there is no contradiction. However, the description adds no behavioral context beyond the structured hints — it does not say whether deletion cascades to related artifacts, is permanent or recoverable, or affects associated data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence has zero wasted words and front-loads the action verb. But it is essentially a paraphrase of the tool title, so the brevity reflects under-specification rather than deliberate compression of rich content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema and only 50% parameter coverage, the description is too thin to support safe autonomous invocation. Missing are the effect of deletion (permanent vs. reversible), any cascade or scoping behavior, and the meaning of the orgId parameter — all of which an agent needs to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: interviewId has a minimal description ('The organization interview ID') while orgId is entirely undocumented in the schema. The tool description compensates for neither — it contains no information about the parameters, their relationship, or how an agent should obtain valid UUIDs for them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and a scoped resource ('organization-level Clarity interview'), and the 'organization-level' qualifier helps differentiate it from the sibling tools deleteClarityTeamInterview and deleteClarityLandscapeNodeInterview. However, it adds nothing beyond the title and does not explicitly name or contrast those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as deleteClarityTeamInterview or deleteClarityLandscapeNodeInterview, nor any preconditions, side-effect warnings, or when-not-to-use conditions. The 'organization-level' scope only weakly implies a selection rule, and no exclusions or sibling references are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityProcessDelete Clarity ProcessA
DestructiveIdempotent
Inspect

Delete a Clarity process. The creator or a team admin can delete it unless capture analysis is still in progress, or an automation still runs it — an automation holds the process's setup answers and Policy context notes, so it has to be removed first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process id

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to restate those. It adds valuable behavioral context: the operation is restricted by role, blocked by in-progress capture analysis, and blocked by active automations because they hold setup answers and Policy context notes. This goes beyond the annotations and helps the agent anticipate failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core action and then packs the key constraints and rationale. Every clause earns its place; there is no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool with no output schema, the description covers the essential context: who can delete, what blocks deletion, and why automation must be removed first. It doesn't describe the return value or side effects on related data, but the annotations and simple parameter schema make that a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter 'id' is already described as 'Clarity process id' with a UUID format and pattern. The description adds no additional parameter-level meaning beyond what the schema provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('a Clarity process'), and clearly distinguishes it from sibling tools like deleteClarityProcessLabel, deleteClarityProcessLink, and deleteClarityProcessInviteLink. It also adds scope by naming who can delete and under what conditions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when deletion is allowed (creator or team admin) and when it is not allowed (capture analysis in progress, or an automation still runs it). It also explains the dependency that automation must be removed first, giving the agent actionable guidance for handling a blocked deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityProcessLabelDelete Clarity Process LabelB
DestructiveIdempotent
Inspect

Delete process tags from an organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
labelIdYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, and the description's 'Delete' is consistent with them. It adds no extra behavior such as whether the tag is also removed from existing processes or whether deletion is permanent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single direct sentence with no filler, and the action is front-loaded. It is concise, though it achieves brevity at the expense of helpful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-UUID deletion, the schema and annotations cover the mechanics, but the description leaves open what happens to labels attached to processes and gives no indication of return behavior. It is minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the meaning or relationship of orgId and labelId beyond the parameter names. It relies on the self-evident names and UUID format rather than adding semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the verb ('Delete') and the resource ('process tags'), and scopes it to an organization. It does not contrast with the similar sibling unlinkClarityProcessLabels, so an agent cannot immediately tell whether this removes the label definition or just detaches it from a process.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to call this tool instead of related tools such as unlinkClarityProcessLabels or assignClarityProcessLabels. The agent must infer usage from the name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteClarityTeamInterviewDelete Clarity Team InterviewA
DestructiveIdempotent
Inspect

Delete a team-level Clarity interview

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
interviewIdYesThe team interview ID

TDQS

A3.7/5.0
Behavior3/5

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 without the description. The description adds no behavioral context beyond the operation itself — no mention of irreversibility, cascading effects on associated data, or auth requirements. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single seven-word sentence with zero filler. The core verb and scoping qualifier are front-loaded, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema, the combination is adequate but thin: annotations flag destructiveness, and the schema fully documents parameters. However, the description does not state what happens to the interview's associated data or whether deletion is reversible, which would matter to an agent weighing side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both parameters richly — especially team_id, which explains the API-key pinning vs OAuth multi-team behavior in detail. The description adds no parameter-level information, but at full schema coverage the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Delete') and a precise resource ('team-level Clarity interview'). The 'team-level' qualifier effectively distinguishes it from sibling tools like deleteClarityOrganizationInterview and deleteClarityLandscapeNodeInterview, so an agent can tell them apart 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'team-level' scope implies when the tool applies, giving a basic sense of usage context. However, no alternatives are named and no exclusions or prerequisites (e.g., required permissions, inability to delete org-level interviews) are stated, leaving the agent to infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteConnectionDelete ConnectionA
DestructiveIdempotent
Inspect

Delete a connection (disconnects the user's connection and removes any triggers bound to it).

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructive, idempotent), the description adds that it disconnects the user's connection and removes any triggers bound to it. This provides valuable side-effect information not captured 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It efficiently communicates the operation and its side effects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with no output schema, the description adequately explains what the operation does. It covers the essential behavior and side effects, making it complete for an agent to use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter connection_id has a clear description in the schema ('Connection ID'). The description does not add any additional meaning beyond what the schema already provides, so it meets the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('connection'), and clarifies that it disconnects the connection and removes triggers. This clearly distinguishes it from other connection operations like updateConnection or getConnection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you want to remove a connection entirely, but does not explicitly contrast with updateConnection or other alternatives. It lacks an explicit 'when-not' statement, but the context is strong enough to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCredentialDelete credential by idA
DestructiveIdempotent
Inspect

Delete a login by id. Deleting a team-shared login requires lead builder role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
userIdYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds that deleting a team-shared login requires the lead builder role, which is useful authorization context. It does not elaborate on side effects, but the destructive hint already covers the core safety trait and the idempotent hint signals repeatability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler: the core action comes first and the authorization caveat second. Every clause carries information that an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description plus annotations cover the key facts: what is deleted, by id, and the special role requirement. However, it leaves the required userId unexplained and does not mention whether deletion affects related revisions or integrations, so an agent may still need to infer ownership semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only the optional team_id has a schema description; the required id and userId are undocumented, and the description only says 'by id' without explaining what userId represents or how it relates to ownership. With schema description coverage at 33%, the description needed to compensate for the missing parameter context and did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and target — 'Delete a login by id' — and the verb clearly distinguishes it from get/update/list credential tools. The term 'login' identifies the credential resource, and the title reinforces the same intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is the role requirement for team-shared logins; there is no guidance on when to use deleteCredential versus deleteSecret or deleteConnection, nor any mention of how to find the id or what preconditions apply beyond role. The intended use is implied by the delete verb but not explicitly framed against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCustomIntegrationDelete Custom IntegrationA
DestructiveIdempotent
Inspect

Delete a custom integration type (team-level catalog entry) and cascade-remove related connections. Requires manager-or-above role.

ParametersJSON Schema
NameRequiredDescriptionDefault
custom_integration_idYesCustom integration type ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals an important behavioral consequence (cascade-removes related connections) and a role gate, which is beyond the annotations. However, it does not explicitly state irreversibility or idempotency, though the annotations already indicate destructive and idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no extraneous information. The action, object, scope, effect, and requirement are all presented clearly and efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key contextual elements (what is deleted, cascade effect, required role). It does not mention error scenarios or return values, but given the simplicity of the operation and lack of output schema, it is sufficiently complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description for 'custom_integration_id' fully covers the parameter meaning ('Custom integration type ID'). The tool description adds no additional context for this parameter, so it stays at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete'), the resource ('custom integration type'), and the scope ('team-level catalog entry'), along with the cascade effect on related connections. This clearly distinguishes the tool's purpose from other operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a usage precondition ('Requires manager-or-above role') and the cascade behavior, but does not explicitly contrast with alternatives (e.g., soft delete or disable). The role requirement and effect provide some guidance, though not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteEvalRubricDelete Eval RubricA
DestructiveIdempotent
Inspect

Remove a single Agent-specific evaluation rubric. Future Runs on the build are no longer scored against it.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier (Assignment ID)
rubricIdYesThe custom rubric's unique identifier
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, and the description adds the useful behavioral context that the rubric will no longer be used to score future Runs on the build. This clarifies the long-term effect of the destructive operation and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no wasted words. The primary action is front-loaded, and the consequence is stated immediately after, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward delete operation, the description adequately states the action and the lasting effect on future Runs. There is no output schema, but the annotations cover the destructive and idempotent profile, and the schema fully describes the optional revision parameter. The description is sufficient without over-explaining.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for all three parameters, so the baseline applies. The description's phrase 'Agent-specific' loosely aligns with agentId but adds no new meaning beyond what the schema already documents for agentId, rubricId, and selected_automation_revision_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and a specific resource ('a single Agent-specific evaluation rubric'), and it conveys the consequence of the action. The word 'single' helps separate it from bulk operations like replaceEvalRubrics, but it never explicitly names sibling tools, so differentiation is left partly to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a purpose (stop scoring future runs against a rubric) but provides no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as updateEvalRubric, replaceEvalRubrics, or deleteCaseQueueEvalRubric. An agent is not told how to choose this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteFileDelete FileA
DestructiveIdempotent
Inspect

Delete a file from team storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath of the file to delete relative to the team's storage root
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to repeat those. It does usefully specify that the path is relative to the team storage root, and the team_id param description adds important context about API key pinning. However, it doesn't describe post-delete behavior (e.g., whether it's permanent or reversible).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. All critical information (action, resource, context) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is simple with a clear schema, destructive/readOnly annotations, and full parameter documentation. The main missing piece is whether deletion is permanent and whether it affects shared files — but for a simple delete operation this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds minimal semantic value beyond what the schema provides — the main contribution is the 'team storage root' context in the purpose statement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('a file from team storage'), which clearly identifies the operation and distinguishes it from siblings like renameFile, getFileContent, and getFileDownloadUrl.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the operation context clear ('team storage'), but doesn't explicitly name alternatives or state when not to use it. Sibling names like renameFile and getFileDownloadUrl provide implicit contrast, though the description itself doesn't mention them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deletePulseDashboardDelete Pulse DashboardA
DestructiveIdempotent
Inspect

Delete a Duvo Pulse dashboard. Only the creator can delete it.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description transparently states that only the creator can delete, aligning with the destructiveHint annotation. It doesn't mention side effects like permanent deletion or cascading behavior, but the annotation already covers destructiveness, so no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence that conveys the essential information without any filler. It efficiently states both the action and the key constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides enough context for a delete operation, including the permission model. It doesn't mention return values, but since there is no output schema, the description could optionally note success behavior. The missing info is minor for a delete action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes artifactId as a UUID with format and pattern, giving 100% coverage. The description adds no additional meaning beyond the parameter name, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the target resource ('Duvo Pulse dashboard'), with a specific permission constraint. It unambiguously differentiates from other delete tools by naming the object type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus other delete tools (e.g., deleteCase, deleteAgent). It only mentions a permission restriction, but lacks context about prerequisites, alternatives, or when NOT to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deletePulseDashboardCommentDelete Pulse Dashboard CommentA
DestructiveIdempotent
Inspect

Delete a comment or reply on a Duvo Pulse dashboard. Allowed for the comment's author and for the dashboard's creator. Deleting a thread root keeps its replies, rendered under a deleted opening comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentIdYes
artifactIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses beyond annotations the non-obvious behavior that deleting a thread root preserves replies, and states permission restrictions. Annotations already indicate destructiveness and idempotency, but the description adds valuable edge-case information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two sentences to convey the action, permissions, and special behavior. No redundant or extraneous information, and the structure is clear and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation, the description provides sufficient context: what is deleted, who is allowed, and the outcome for thread roots. It does not explain return values or error handling, but these are less critical for a destructive tool. The main gap is the lack of parameter clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explicitly define the parameters. While commentId and artifactId can be inferred from context (comment and dashboard), the lack of explicit mapping or explanation leaves room for ambiguity, especially for artifactId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (Delete), the resource (comment or reply on a Pulse dashboard), and distinguishes from sibling tools like deletePulseDashboard. Includes permission details and the special behavior for thread roots, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides usage context by specifying the permission requirements (author or dashboard creator) and the effect on thread replies. Does not explicitly reference alternative tools or when not to use, but the description is sufficient for an agent to select this tool for comment deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteQueueDelete QueueA
DestructiveIdempotent
Inspect

Delete a queue. Interrupts all associated active runs first and returns the number of deleted cases plus the IDs of runs that were stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses two key behavioral aspects: that active runs are interrupted first and that the response includes the number of deleted cases and IDs of stopped runs. This goes beyond the annotations (which already indicate destructive and idempotent behavior) to provide concrete details about side effects and return values, giving full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the primary action and succinctly adds the important details about interruption and return values. It is concise without omitting critical information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the operation, the description provides sufficient context: it states what it does, the side effect on runs, and what it returns. There is no output schema, but the description covers the return contents. This is complete for an agent to decide and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the only parameter (queue_id as a UUID with a description), so schema coverage is 100%. The tool description does not add any additional meaning about the parameter, and per the guidelines, the baseline for high schema coverage is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a queue') with a specific verb and resource, and distinguishes it from other delete tools by explicitly mentioning the queue and its associated runs. It also provides additional context about side effects and returns, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the primary use case (deleting a queue) and highlights an important side effect (interrupting active runs) that would inform a user's decision. However, it does not explicitly compare to alternative tools or state when not to use this operation, leaving some implicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteQueueAggregationDelete Queue AggregationA
DestructiveIdempotent
Inspect

Soft-delete an aggregation definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
definition_idYesThe aggregation definition's identifier

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool to be destructive, not read-only, and idempotent. The description adds meaningful context beyond the annotations by specifying that the deletion is 'soft,' implying recoverability or non-permanent removal. This complements the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with zero wasted words. It front-loads the action ('soft-delete') and the target object ('aggregation definition') immediately, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with rich annotations and a fully documented schema, the description covers the core operation sufficiently. The only minor gap is that it does not explain the post-deletion state or whether soft-deleted definitions can be restored, but the term 'soft-delete' implies recovery and the annotations already cover destructiveness and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both queue_id and definition_id documented in the schema. The description itself adds no additional parameter meaning, but the schema fully identifies each parameter's purpose, matching the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Soft-delete') and the resource ('an aggregation definition'), which is specific and distinguishes it from other delete tools like deleteQueue, deleteQueueLabel, or deleteQueueJsonSchema. Even without comparing schemas, an agent can tell exactly what this tool operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance about when to use this tool versus alternatives such as createQueueAggregation, listQueueAggregations, refreshQueueAggregation, or a hypothetical hard delete. It relies entirely on the tool name and the word 'delete' to imply usage, with no prerequisites or contextual conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteQueueLabelDelete Queue LabelA
DestructiveIdempotent
Inspect

Delete a label from a queue. Cascade-deletes all assignments of this label on existing cases.

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idYesThe label's unique identifier
queue_idYesThe queue's unique identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the crucial behavioral detail of cascade-deleting all assignments on existing cases, which goes beyond the annotation's destructiveHint. It transparently communicates this side effect, though it doesn't mention idempotency or irreversibility explicitly (though annotations cover these).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and includes the essential cascade detail. It is efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete operation, the description provides sufficient context: what is deleted and the cascade effect. No output schema is needed, and the description covers the relevant aspects without superfluous information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters ('The label's unique identifier' and 'The queue's unique identifier') with 100% coverage. The description adds no further semantic information about the parameters, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a label from a queue') and specifies the cascade-delete effect on assignments. It effectively distinguishes this tool from siblings like deleteQueue, deleteQueueAggregation, and updateQueueLabel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need to delete a label and its assignments) but does not explicitly contrast it with alternatives like updateQueueLabel or deleteQueue. It lacks direct guidance on when to prefer this tool over similar ones.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteReadNotificationsDelete Read NotificationsA
DestructiveIdempotent
Inspect

Soft-delete all read notifications for the authenticated user's current team. Returns the count of notifications that were deleted. Destructive — only call on explicit user request. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing that the operation is a soft-delete, that it returns the count of deleted notifications, and that it returns 404 when the Notification Center feature is disabled. It reinforces the destructiveHint with an explicit 'only call on explicit user request' warning. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences carry all essential information: what the tool does, what it returns, destructive warning, and feature prerequisite. There is no filler, and the most important behavioral facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive mutation with no output schema, the description is complete: it specifies the action, scope, return value, destructive nature, and an important error condition. The schema covers team_id semantics, and annotations cover the destructive and idempotent hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% coverage for team_id, including detailed explanation of API key versus OAuth behavior. The description adds no new parameter-specific guidance beyond referring to the 'current team', which the schema already covers. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Soft-delete all read notifications for the authenticated user's current team.' It clearly distinguishes this from sibling tools like deleteAllNotifications by specifying 'read' notifications, and it also clarifies the team scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it deletes read notifications for the current team, is destructive, and should only be called on explicit user request. It also notes the Notification Center feature prerequisite and 404 behavior. It does not explicitly name alternatives like deleteAllNotifications, but the scope is clear enough for an agent to infer when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteScheduleDelete ScheduleA
DestructiveIdempotent
Inspect

Delete a schedule. Owners may delete their own schedules; team superadmins may delete any schedule on agents in the current team.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
schedule_idYesThe schedule's unique identifier

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description does not need to restate these. The description adds valuable behavioral context about authorization and scope boundaries, which is not available in annotations or schema. This goes beyond what structured fields provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundancy. The core action 'Delete a schedule' is front-loaded, and the second sentence efficiently adds the necessary permission model. Every word contributes to the agent's understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with two fully documented parameters and annotations covering destructiveness and idempotency, the description is complete. It supplies the critical ownership/superadmin authorization context that an agent cannot infer from schema or annotations. No additional behavioral or return-value detail is necessary for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both agent_id and schedule_id already described as unique identifiers. The description adds no additional meaning about the parameters themselves, but the permission context implies agent_id identifies the owning agent. Per calibration, a score of 3 is appropriate when the schema fully documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Delete a schedule.' It also differentiates from sibling tools like createSchedule, updateSchedule, and listAgentSchedules by explicitly naming the delete action. The permission scoping ('Owners may delete their own schedules; team superadmins may delete any schedule...') adds additional precision 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when the tool can be used by specifying the authorization requirements: schedule owners and team superadmins. It does not explicitly name alternatives like updateSchedule for modifications, but the context is sufficient for an agent to understand this is the deletion path. No misleading or exclusionary guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteSecretDelete SecretB
DestructiveIdempotent
Inspect

Soft-delete an env-var secret. Deleting a team-shared secret requires lead builder role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals a role requirement (lead builder) and clarifies that the operation is a soft-delete, which adds behavioral context beyond the annotations. However, it does not mention reversibility, side effects, or what happens to related data, leaving some behavior implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, containing only the essential action and a role requirement. It avoids any redundant or irrelevant information, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool (single parameter, no output schema), the description provides sufficient context to understand the primary purpose and a key constraint. It lacks alternative usage guidance but is otherwise complete for basic decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'id' has no description in the schema or in the tool description. The schema provides type and format, but the description does not clarify what the id refers to (e.g., secret id, team id, etc.), adding minimal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('soft-delete') and the resource ('env-var secret'), and adds a role requirement. It is unambiguous about the operation's nature, though it doesn't elaborate on what 'soft-delete' entails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like deleteCredential or deleteConnection. There is no mention of preferred scenarios or conditions that would select this over other delete operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteSkillDelete SkillA
DestructiveIdempotent
Inspect

Delete a skill for the current team.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds only the current-team scope; it does not disclose whether deletion is permanent, whether revisions are also removed, or what happens to dependent references.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler or redundant wording. Every word contributes to defining the action, resource, and scope, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter delete operation, the combination of description, annotations, and schema is mostly sufficient. The description adds the current-team scope, which is useful. Minor gaps include not mentioning whether the deletion cascades to skill revisions or whether system skills are protected, but these are not essential for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single skill_id parameter, so the description does not need to repeat parameter details. The description adds no additional meaning beyond the schema, keeping this at the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Delete') and a clear resource ('skill'), and scopes the operation to the current team. This cleanly distinguishes it from sibling tools like deleteSkillRevision and deleteSkill-related file operations. 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when you need to delete a skill belonging to the current team. However, it does not explicitly state when to use this tool versus alternatives, such as deleteSkillRevision, nor does it mention any conditions, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteSkillRevisionDelete Skill RevisionA
DestructiveIdempotent
Inspect

Delete a draft or historic skill revision and its files. The active revision can't be deleted — activate another revision first.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_revision_idYesSkill revision ID.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry destructiveHint=true and readOnlyHint=false; the description adds that the operation also removes the revision's files and that active revisions are protected. This is useful behavioral context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack the action, scope, side effect, and a limitation with no filler. The key constraints are front-loaded before the prerequisite guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive operation with no output schema, the description is sufficient: it states what is deleted, what files are affected, and the one condition under which deletion fails. No critical operational detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already defines skill_revision_id with uuid format and description. The description's draft/historic framing hints at valid IDs, but it does not add substantially new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (delete), resource (skill revision), scope (draft or historic), and explicitly excludes active revisions. This distinguishes it from deleteSkill and updateSkillRevision/promoteSkillRevision without needing to inspect schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly indicates when it can be used (draft/historic revisions) and when it cannot (active revision), with a prerequisite instruction to activate another revision first. It does not name the exact sibling tool for promotion, so it stops short of full explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteSlackTriggerDelete Slack Channel TriggerA
DestructiveIdempotent
Inspect

Permanently delete a Slack channel trigger you own. The agent stops starting Runs for that channel. To keep the trigger but stop it firing, update it with enabled: false instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
trigger_idYesThe Slack channel trigger's unique identifier

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds important behavioral context: the deletion is permanent, the trigger will no longer start Runs for the channel, and ownership is required. This goes beyond the structured annotations and clearly discloses the real-world effect of the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences deliver the core action, the consequence, and the alternative to deletion. Every clause earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter deletion tool with rich annotations, the description is fully complete: it names the resource, the permanent nature, the post-deletion effect, and the ownership constraint. No critical decision-making information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the parameter descriptions, including the trigger_id format and its meaning as the Slack channel trigger's unique identifier. The description does not add additional parameter-level detail, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action—'Permanently delete a Slack channel trigger you own'—with a clear resource and scope. It also distinguishes itself from the related updateSlackTrigger tool by contrasting deletion with disabling via `enabled: false`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when not to use this tool: 'To keep the trigger but stop it firing, update it with `enabled: false` instead.' It also notes the ownership prerequisite with 'you own,' so an agent can route correctly between deletion and update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteTeamInviteDelete Team InviteA
DestructiveIdempotent
Inspect

Revoke an invitation so its link and email can no longer be used. Accepts either a team invitation (requires Superadmin or above on the invitation's team) or a Clarity process invitation (requires the process creator or a team admin). Revoking one side also revokes its linked counterpart when a process invitation created both.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the invitation to revoke. Accepts either a team invitation or a Clarity process invitation.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the cascading side effect ('Revoking one side also revokes its linked counterpart when a process invitation created both') and the permission tiers for each invitation type. This is exactly the kind of non-obvious behavioral context an agent needs, and it aligns with destructiveHint/idempotentHint rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core action front-loaded, followed by acceptance criteria, permissions, and the cascade behavior. Every sentence earns its place; there is no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool (2 params, no output schema, no nested objects), the description is complete: it covers the action, both invocation paths, permission requirements, and the linked-revocation side effect. Annotations handle idempotency and destructiveness, and the schema covers parameters, leaving no practical gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both id and team_id in detail. The description reinforces that id accepts either invitation type but adds no new parameter-level meaning beyond the schema, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Revoke an invitation') plus the precise effect ('its link and email can no longer be used'). It clarifies that the tool covers two invitation types — team invitations and Clarity process invitations — which disambiguates it from siblings like deleteTeamInviteLink and updateTeamInvite 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context on when the tool applies by enumerating the two accepted invitation kinds and their matching permission prerequisites (Superadmin or above for team invites; process creator or team admin for process invites). It does not explicitly name alternatives or exclusions, 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.

detachPulseDashboardConnectionDetach Pulse Dashboard ConnectionA
DestructiveIdempotent
Inspect

Detach a connection (data source) from a Duvo Pulse dashboard (requires edit access).

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
connectionIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation destructive and idempotent, lowering the disclosure burden. The description adds the edit-access requirement and clarifies that 'connection' means 'data source', which is useful context beyond the annotations. It does not state whether the underlying connection is also deleted or remains available to other dashboards, but the annotations cover the core destructive profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and target, then adds the permission caveat. There is no redundant wording or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive operation, the description plus annotations provide a reasonable baseline: action, target, permission, destructiveness, and idempotency. It is incomplete only in not explicitly linking parameters to their roles and not clarifying the fate of the connection after detach, which matters for a destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate, but it does not explicitly map artifactId to the dashboard or connectionId to the connection. The domain terms 'dashboard' and 'connection' hint at the roles, but the mapping is left to inference, which is risky for a two-UUID parameter API.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Detach') with a specific resource ('a connection (data source)') and target ('Duvo Pulse dashboard'), clearly distinguishing it from related operations like attachPulseDashboardConnection and deleteConnection. Including the edit-access requirement adds further precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The semantics of 'detach a connection from a dashboard' imply this is the tool for removing a dashboard's link to a data source rather than deleting the connection entirely. However, it does not explicitly state when to prefer this over sibling tools such as deleteConnection or attachPulseDashboardConnection, nor does it provide when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detachQueueJsonSchemaDetach Queue Json SchemaA
DestructiveIdempotent
Inspect

Stop validating new cases on a queue. Typed cases already written keep their payload and their pinned schema version.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this destructive, and the description adds important nuance: existing typed cases keep their payload and pinned schema version even though validation stops. This clarifies exactly what is and is not affected, which goes beyond the bare destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the primary action first and the preservation caveat second. Every sentence contributes necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, low-complexity operation with annotations describing safety and idempotency, the description fully covers what the tool does and its important side effect on existing cases. No output schema is needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single queue_id parameter is fully documented in the input schema with type, format, pattern, and a description. The tool description adds no parameter-specific meaning, so schema coverage of 100% carries the weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific operation ('Stop validating new cases on a queue') with a clear resource (queue JSON schema) and explains the practical effect of detaching it. This clearly distinguishes it from siblings like attachQueueJsonSchema and replaceQueueJsonSchema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool does but gives no guidance on when to choose it over attachQueueJsonSchema, replaceQueueJsonSchema, or other schema-related tools. No alternatives, prerequisites, or exclusion cases are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detachRevisionLoginDetach Revision LoginB
DestructiveIdempotent
Inspect

Detach a login from a revision. Personal logins can only be detached by their owner; team-shared logins require builder permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes
exposedCredentialIdYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and idempotent. The description adds meaningful behavioral context beyond the annotations by detailing the permission requirements (owner vs. builder). This is useful for predicting whether the call will succeed and for setting expectations about access control.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the core operation, and the second adds a valuable permission nuance. There is no redundant or filler content; every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three required parameters, zero schema descriptions, and no output schema, the description should do more to make the tool safely invocable. It omits how the parameters map to the operation, whether detaching affects the underlying credential, and any further behavioral details. The permission note is helpful but not sufficient for a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description provides no explanation for agentId, buildId, or exposedCredentialId. While the parameter names are somewhat self-descriptive, the description does not connect 'login' to exposedCredentialId or clarify that buildId refers to the revision. The description fails to compensate for the lack of schema-level parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Detach a login from a revision.' It is more specific than the name alone, and the additional detail about personal vs. team-shared logins adds scope. It does not explicitly distinguish itself from sibling tools like detachRevisionSecret, but the resource difference is largely self-evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an authorization context: personal logins require owner permissions, team-shared require builder permissions. This helps an agent gauge whether the operation is permitted. However, it does not mention when to prefer this tool over related tools like attachRevisionLogin or detachRevisionSecret, so guidance is only partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detachRevisionSecretDetach Revision SecretA
DestructiveIdempotent
Inspect

Detach an env-var secret from a revision. Personal secrets can only be detached by their owner; team-shared secrets require builder permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes
credentialIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value by explaining ownership-based permission differences (owner vs builder), which is not present in annotations and helps the agent predict authorization failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core action is front-loaded, and the permission caveat is the only additional sentence, making the description easy to scan and process.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, mutating tool with three opaque UUID parameters and no output schema, the description is thinner than ideal. It covers the main action and permission model, but parameter semantics and what happens on failure or success are undocumented. Annotations cover destructive/idempotent behavior, so this is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description names none of the three required parameters. It only loosely implies that credentialId refers to an env-var secret, but agentId, buildId, and credentialId are left entirely to inference from their names and UUID formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Detach'), a specific resource ('env-var secret'), and a target ('from a revision'). This clearly distinguishes the tool from the sibling attachRevisionSecret and from detachRevisionLogin, which targets a different resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives relevant permission context (personal vs team-shared secrets) but never explicitly says when to prefer this tool over alternatives or when not to use it. The intended use is implied by 'Detach an env-var secret from a revision,' but no alternative routing or exclusion guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dismissClarityCaptureSuggestionDismiss Clarity Capture SuggestionAInspect

Dismiss a pending Process Landscape capture suggestion without creating a capture request (manager+).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
suggestionIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the base safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds useful context beyond them: the negative behavioral trait of not creating a capture request and the manager+ permission requirement. However, it does not disclose whether dismissal is reversible, what happens to the suggestion afterward, or the outcome of a repeat dismissal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence where every element earns its place: the action verb comes first, the resource is specific, the key non-behavior (no capture request created) is included, and the permission level is appended compactly. There is zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-UUID, no-output-schema tool, the description covers the action, the permission, and the defining negative behavior. What is missing is parameter clarification and any statement about reversibility or post-dismissal state. It is adequate but has clear gaps an agent would have to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description bears the full burden of explaining nodeId and suggestionId, but it explains neither. The parameter names are mildly self-suggestive (a node and a suggestion UUID), yet nothing clarifies that nodeId refers to the Process Landscape node or which suggestion ID is expected. The description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Dismiss), a specific resource (pending Process Landscape capture suggestion), and distinguishes this from the accept counterpart by noting it acts 'without creating a capture request.' An agent can immediately tell this tool rejects rather than accepts a suggestion, which differentiates it from acceptClarityCaptureSuggestion in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys clear context: use this when a pending Process Landscape capture suggestion should be dismissed rather than accepted, and the '(manager+)' qualifier establishes the required permission level. It does not explicitly name the alternative tool or state when not to use it, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dismissClarityTeamAssignmentSuggestionDismiss Clarity Team Assignment SuggestionAInspect

Dismiss a pending Process Landscape team-assignment suggestion without changing the node's owner (manager+).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
suggestionIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations, especially that the node's owner remains unchanged. It also indicates the suggestion must be pending, implying that non-pending or already-dismissed suggestions may not be valid inputs. It does not deeply explain all side effects, but the most important one is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every element—dismiss, pending, Process Landscape, team-assignment suggestion, node owner unchanged—earns its place and directly informs selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter dismissal tool, the description covers the core purpose, the applicable state, and the most important non-effect (owner unchanged). It could additionally state what happens after dismissal or how to obtain valid IDs, but these are not critical gaps 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions, so the description must compensate. It references 'node's owner' and 'team-assignment suggestion,' which helps map nodeId and suggestionId, but it never explicitly defines either parameter. The parameter names are self-explanatory, but the description falls short of fully compensating for 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Dismiss') and a specific resource ('pending Process Landscape team-assignment suggestion'), and adds a key qualifier ('without changing the node's owner (manager+)'). This clearly distinguishes it from acceptClarityTeamAssignmentSuggestion and other dismiss tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear when to use the tool: when there is a pending team-assignment suggestion that should be discarded, not acted upon. It does not explicitly name alternatives like acceptClarityTeamAssignmentSuggestion, but the pending qualifier and the no-owner-change clause imply the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dismissNotificationDismiss NotificationA
Idempotent
Inspect

Dismiss an important notification for the authenticated user. A row pinned to their Important section is unpinned and the card stays, because the connection is still broken; a row that is not pinned for them — one they cannot reconnect themselves — is removed from their feed instead, matching what the card's Dismiss button does. Only important notifications (currently: connection_broken) can be dismissed. Idempotent. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe notification's unique identifier

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by explaining the conditional side effect: pinned rows are unpinned and kept, while non-pinned rows are removed from the feed. It also discloses feature availability, the 404 result, and the current notification type, matching idempotentHint without contradicting destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the main purpose and then organized into behavior, constraints, and error condition. Slightly dense with nested clauses, but each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with no output schema, the description covers user scope, exact behavior, idempotency, eligibility, and a relevant 404 condition. Nothing essential to deciding whether and when to invoke it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the only parameter (id) at 100% coverage. The description does not add parameter-level detail, though it clarifies the object is the user's notification; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly names a specific action and object: dismissing an important notification for the authenticated user. It further disambiguates from generic notification mutations by explaining the Dismiss-button behavior and restricting to important (connection_broken) notifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete context: only important notifications can be dismissed, the action is scoped to the authenticated user, and it requires the Notification Center feature (404 when disabled). It does not explicitly name alternative tools such as markNotificationRead, so it stops short of full when-to-use routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

downloadSkillDownload SkillA
Read-onlyIdempotent
Inspect

Download a custom skill as a ZIP archive. Only custom (team-owned) skills can be downloaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds the output format (ZIP archive), which is useful context. It does not contradict the annotations and covers the primary behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. It states the purpose and the key constraint (custom-only) efficiently, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple download operation with a single parameter, the description is complete. It specifies the output format and the condition (custom-only), which is sufficient for an agent to decide and invoke correctly without further details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides format and pattern for skill_id. The description's mention of 'custom skill' clarifies that skill_id should reference a custom (team-owned) skill, adding meaning beyond the bare 'Skill ID.' schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (download), the resource (custom skill), and the output format (ZIP archive). It also distinguishes from listSkills and getSkillFileContent by specifying the ZIP archive format and the custom-skill restriction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states a when-not condition: only custom (team-owned) skills can be downloaded. It implies when to use this tool (when a ZIP archive of a custom skill is needed) but does not explicitly mention alternative tools like getSkillFileContent for system skills, hence a slight deduction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicateAgentDuplicate AgentAInspect

Duplicate an existing agent into a new agent named "Copy of ", carrying over its configuration. Use the include_* flags in the (optional) body to control what is copied; all default on except memory. Requires the Lead Builder team role or above.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe ID of the agent to duplicate
include_aopNoCopy the agent's operating procedure (AOP) and its handover targets. Defaults to true.
include_queueNoCopy the assigned Queue. Defaults to true.
include_memoryNoCopy what the agent has learned so far (its Memory). Defaults to false. Memory can only be copied from the Duvo app — requesting it here returns an error.
include_pluginsNoCopy installed plugins. Defaults to true.
include_connectionsNoCopy connected accounts (Connections) and their selected tools. Defaults to true.
include_skills_filesNoCopy attached Skills and Files. Defaults to true.
include_logins_secretsNoCopy saved Logins and Secrets. Defaults to true.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide generic hints (readOnlyHint false, destructiveHint false), so the description adds meaningful behavioral context: the new agent's naming convention, that configuration is carried over, that all include flags default on except memory, and the required role of Lead Builder or above. This goes beyond the structured annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct purpose: state the operation and naming, explain the include_* flags and defaults, and state the permission requirement. There is no filler or repetition of schema fields; the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description covers the core semantics, default behavior, and access control. It does not explicitly describe the return value or potential error cases, but the clear naming and include-flag guidance make it adequate for correct invocation in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already fully documents every parameter, including defaults for all include_* flags. The description's mention of include_* flags and 'all default on except memory' adds no semantic 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Duplicate'), the resource ('an existing agent'), and the exact outcome (a new agent named 'Copy of <name>'). This clearly distinguishes it from sibling tools like createAgent, updateAgent, and moveAgent without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use obvious: copy an existing agent with its configuration and control which parts are copied via the include_* flags. It does not explicitly name alternatives or state when not to use it, but the duplication semantics are clear enough to guide selection against createAgent or updateAgent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicateClarityProcessDuplicate Clarity ProcessAInspect

Duplicate a Clarity process with its analysis, captures, message history, and, for v2 processes, its live current map and automation proposal. Requires a team manager role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource Clarity process id

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false), and the description adds meaningful behavioral context: what data is included in the duplicate, a version-specific behavior for v2 processes, and the required team manager role. It does not state the outcome format or whether a new process ID is returned, but the role and content details go beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the core action and resource, immediately follows with the key included contents, and adds the role requirement at the end. Every phrase provides useful information, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple single-parameter schema and absence of an output schema, the description gives enough operational context: what is copied, the version-specific scope, and the permission requirement. It could be slightly more complete by noting what is returned or where the duplicate is created, but these are minor gaps for a straightforward duplication operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter id with a description ('Source Clarity process id'), so the description does not need to add much. The description confirms the parameter refers to the process being duplicated, but it does not add additional semantic detail beyond what the schema already provides. This aligns with the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Duplicate' with the clear resource 'Clarity process' and enumerates exactly what gets copied: analysis, captures, message history, and for v2 processes, live current map and automation proposal. This distinguishes it from sibling tools like createClarityProcess, deleteClarityProcess, and duplicateAgent 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case clearly: when you need to duplicate an existing Clarity process and preserve its associated data. It also adds the role prerequisite 'Requires a team manager role.' However, it does not explicitly state when to use this tool over createClarityProcess or how it differs from other duplication tools such as duplicateAgent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicatePulseDashboardDuplicate Pulse DashboardAInspect

Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only indicate that this is not read-only and not destructive. The description adds concrete side-effect detail by stating that conversation history, shares, and connections are not copied and that the clone is 'idle.' This goes beyond what the annotations already communicate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with the action and scope front-loaded. The second sentence adds meaningful exclusions without unnecessary detail. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema, the description adequately covers what the tool produces and what is not carried over. It does not explain return values or how the clone is named, but those are not essential for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions 'artifactId' or explicitly states that it identifies the source dashboard to duplicate. The single-parameter shape makes the role somewhat inferable, but the description does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Duplicate'), the resource ('Duvo Pulse dashboard'), and the expected result ('idle clone of the current rendered dashboard'). It also distinguishes this tool from other duplication siblings by specifying the dashboard resource and the non-copied elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when an existing Pulse dashboard needs to be cloned, but it does not explicitly say when not to use it or contrast it with related tools like createPulseDashboard or restorePulseDashboardVersion. No alternatives or exclusions are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluateQueueAggregationEvaluate Queue AggregationAInspect

Evaluate an aggregation definition against the current data without persisting it.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
definitionYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The only disclosed behavior is non-persistence of the definition; the tool does not say whether it modifies other state, whether the queue must exist, or whether evaluation has costs/limits. Annotations give readOnlyHint=false, so the description should take on more burden to clarify side effects, but it does not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence front-loads the action and immediately states the key non-persistence property. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with a nested definition schema and no output schema, but the description does not mention what the evaluation returns, how errors are surfaced, or any prerequisite such as queue existence. The non-persistence note is useful, but a significant amount of operational context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents queue_id and the definition object's structure well, and the description clarifies that 'definition' is an aggregation definition. However, the description adds no meaning for queue_id or the semantics of measures/filters/dimensions beyond their names and enums.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Evaluate'), a resource ('an aggregation definition'), and a distinguishing scope ('against the current data without persisting it'). This clearly separates it from createQueueAggregation, getQueueAggregationResult, and refreshQueueAggregation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear context: use it for a dry-run evaluation of a definition before persistence. It does not explicitly name alternatives or exclusion cases, but the non-persistence wording makes the intended scenario obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exportCasesExport CasesAInspect

Export a queue's cases, respecting the same status, severity, approval, priority, label, date-range, json_data field, and free-text filters as the list view. Set awaiting_my_approval to export only the cases holding an unanswered approval row assigned to you; like the list view it resolves to the authenticated caller, so a credential with no user behind it is rejected rather than exporting an empty file. format: "json" (default) returns a re-importable JSON payload; format: "csv" returns a text/csv file with the columns id, title, status, priority, labels, created_at, updated_at, completed_at, postponed_to, data.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
searchNo
filtersNo
sort_byNocreated_at
queue_idYesThe queue's unique identifier
sort_orderNoasc

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=false the description usefully clarifies what the operation actually produces: a re-importable JSON payload or a text/csv file with an enumerated column list. It also discloses a real behavioral edge case (a credential with no user behind it is rejected rather than returning an empty file). It does not address whether exports are idempotent or have size/rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the export scope and filters before drilling into awaiting_my_approval and format, and every sentence carries information. The third sentence is dense but the content is load-bearing; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema the description supplies the return-shape essentials (JSON payload re-importable, CSV column list) and the auth caveat. Sufficient for a 6-parameter export tool, though filter-syntax details beyond naming are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must carry the load, and it does explain format (default and payload shape) and awaiting_my_approval in detail, plus the filter families. It leaves sort_by and sort_order unexplained, though those are self-describing enums.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Export a queue's cases') and immediately scopes it against the list view's filter semantics. An agent can distinguish this from listCases/searchCases 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Repeatedly anchors the tool to 'the list view' and shares its filter set, which implicitly tells the agent when to export versus browse, and it gives a concrete condition for awaiting_my_approval. It never explicitly names listCases or states when not to export, 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.

exportPulseDashboardHtmlExport Pulse Dashboard HtmlB
Read-onlyIdempotent
Inspect

Render a Duvo Pulse dashboard to a self-contained static HTML snapshot (text/html, data baked in). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNolight
artifactIdYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by disclosing the 404 condition (no HTML produced yet) and the 409 condition (unrenderable openui dashboard), which go beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary action, followed by two important status-code caveats. It contains no filler, though the constraints could be slightly better organized for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior and important error conditions, but it leaves gaps: it does not explain what 'openui dashboard' means, does not clarify the relationship to getPulseDashboardHtml, and does not mention how theme affects the output. These gaps matter for an agent deciding whether and how to call this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate by explaining artifactId and theme meanings. It does not mention either parameter, leaving artifactId's role implicit and theme's effect on the rendered HTML undocumented. Parameter names help somewhat, but the description adds no real semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders a Duvo Pulse dashboard into a self-contained static HTML snapshot with data baked in. It identifies the resource and the output format, though it does not explicitly differentiate itself from sibling tools like getPulseDashboardHtml or getPulseDashboardPdf.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives such as getPulseDashboardHtml or getPulseDashboardVersionHtml. The 404 and 409 notes describe preconditions and failure cases, but they do not help an agent choose between sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fileSuggestedClarityProcessesFile Suggested Clarity ProcessesAInspect

File every unfiled process the viewer can see into its suggested folder

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotation contradiction: the description says a mutating action while annotations set readOnlyHint=false. It adds useful scope (bulk, only visible, only unfiled, destination is suggested folder) beyond the annotations, but doesn't disclose possible partial failures, reversibility, or the effect on already-filed processes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action, scope, and destination with no filler. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter tool with no output schema, the description gives enough to invoke correctly. It could add a note about mass execution or confirmation behavior, but nothing critical is missing for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, team_id, is fully described in the schema including fallback and OAuth behavior. With 100% schema description coverage, the description doesn't need to add parameter details; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('File'), a bounded resource ('every unfiled process the viewer can see'), and the destination ('its suggested folder'). This clearly distinguishes it from per-suggestion accept/dismiss tools and manual move operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'every unfiled process the viewer can see' gives an implicit trigger condition for using this bulk filing tool, but it does not explicitly contrast with alternatives like acceptClarityCaptureSuggestion, dismissClarityCaptureSuggestion, or moveClarityProcessesToFolder. An agent has to infer when to choose this over those siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finalizeCaseAttachmentFinalize Case AttachmentAInspect

Confirm an uploaded case attachment against storage. Answers with the attachment in its settled state — ready when the bytes are present, failed (with a reason) when the upload never completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier
attachment_idYesThe attachment's unique identifier

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses the operation's outcome semantics—ready when bytes exist, failed with a reason when the upload never completed—beyond the raw annotation flags. It does not detail side effects or authorization requirements, but no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the main action and then specify the outcome states. No filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with no output schema, the description adequately explains the return semantics and the purpose. It could add the ordering relative to createCaseAttachmentUploadUrl, but the core calling context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the three UUID parameters are already fully documented. The description adds no parameter-specific meaning, so it earns the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Confirm an uploaded case attachment against storage') and the concrete output states ('ready'/'failed'). This distinguishes it from sibling upload, download, and listing tools even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use it after an upload to verify that the bytes are present and settled, and interpret the ready/failed response. It does not explicitly name alternatives or state when not to use it, 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.

finalizeClarityOrganizationInterviewFinalize Clarity Organization InterviewAInspect

Manually mark an in-progress organization interview as complete without requiring final media uploads

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
interviewIdYesThe organization interview ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations by noting this is a manual override that does not require final media uploads. However, it does not disclose side effects, such as whether the interview becomes immutable, whether this action can be reversed, or what happens if the interview is already complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every phrase—'manually', 'in-progress', 'as complete', 'without requiring final media uploads'—adds meaningful detail that helps an agent understand the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter state-transition tool with no output schema, the description captures the core action and the key condition. Yet it omits details an agent might need, such as the success/return behavior, whether finalizing is irreversible, and any validation constraints beyond the interview being in-progress.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents 'interviewId' but leaves 'orgId' completely undescribed, and the description does not compensate by explaining the role of either parameter. The phrase 'organization interview' hints at the resource type, but the description adds no meaning beyond the property names and the one existing schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('mark as complete'), a specific resource ('organization interview'), and a distinctive condition ('without requiring final media uploads'). This clearly differentiates it from related tools like updateClarityOrganizationInterview or the upload-completion flow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for manually finalizing an in-progress interview, bypassing the usual media upload requirement. However, it does not explicitly state when not to use it or name alternatives, such as updateClarityOrganizationInterview for other edits or the normal upload-based completion path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generateClarityPortfolioIntelligenceGenerate Clarity Portfolio IntelligenceAInspect

Generate portfolio intelligence from all completed clarity processes. Returns 202 Accepted immediately and processes in background.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only and non-idempotent; the description adds the valuable behavioral detail that it returns 202 Accepted immediately and does the work asynchronously. This tells the agent not to expect a synchronous payload. It doesn't contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence with the action front-loaded and the async behavior in a short second clause. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an async one-parameter action with annotations and a fully documented schema, the description covers the key invocation behavior (accepted immediately, background processing). It could improve by pointing to getClarityPortfolioIntelligence for later retrieval, but the sibling name makes that inferable, so the gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, team_id, has a full schema description covering UUID format, the API-key vs OAuth behavior, and fallback semantics. With 100% schema coverage, the description does not need to add parameter details, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate') with a distinct resource ('portfolio intelligence') and a clear source scope ('from all completed clarity processes'). This separates it from sibling retrieval tool getClarityPortfolioIntelligence and from generateClarityProcessLandscape/Snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when it is relevant (intelligence over completed clarity processes) and sets expectations for an async fire-and-forget call (202, background processing). However, it does not explicitly contrast with getClarityPortfolioIntelligence for retrieving results or state when not to call it, so 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.

generateClarityProcessLandscapeGenerate Clarity Process LandscapeBInspect

Start a process-landscape generation run for the organization from its eligible Clarity captures (organization executives and owners)

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is not read-only, not idempotent, and not destructive; the description adds that the run draws on eligible captures from organization executives/owners, which is useful scoping. It does not disclose side effects, return value, or async behavior, but the annotation set 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the core action, and no filler. The parenthetical 'organization executives and owners' is compact but slightly ambiguous, so it is not a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not state what the tool returns, whether the generation run is asynchronous, how the agent can monitor or retrieve the result, or what prerequisites must be true before starting. For a low-complexity tool with no output schema, this leaves meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter (orgId) and 0% schema description coverage, the description only indirectly maps to it by saying 'for the organization.' This gives the agent the basic semantic link but does not explicitly explain orgId format, source, or how it affects eligibility.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Start') and a specific resource ('process-landscape generation run'), and it adds an input source ('eligible Clarity captures'), so an agent can tell this is the initiating tool for landscape generation rather than, say, getClarityProcessLandscape. It does not explicitly name or differentiate against a sibling like generateClarityProcessSnapshot, which would push it to a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: it is used to start a landscape-generation run for an organization based on eligible Clarity captures. However, it gives no explicit when-to-use vs alternatives, no preconditions beyond eligibility, and no mention of when a different generation or snapshot tool should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generateClarityProcessSnapshotGenerate Clarity Process SnapshotAInspect

Trigger a snapshot generation pipeline for a v2 clarity process, selected by kind. current_process runs the generateCurrentProcess pipeline (body fields are proposal-only and rejected); transformation_proposal runs the generate or regenerate proposal pipeline. Returns 202 immediately and finalises asynchronously via the cc-server webhook stream.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
process_idYesThe clarity process id
custom_guidanceNoAutomation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence.
regenerate_fromNoAutomation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since.
source_snapshot_idNoAutomation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process.
transformation_aggressivenessNoTransformation proposals only: the transformation appetite. `aggressive`, `conservative`, and `none` redesign around Duvo automation with decreasing freedom to change the process; `optimize` standardizes and streamlines the process while every step stays performed by people.aggressive

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses critical runtime behavior beyond annotations: 'Returns 202 immediately and finalises asynchronously via the cc-server webhook stream' and notes that body fields are proposal-only and rejected for `current_process`. Annotations (readOnlyHint=false, idempotentHint=false) give little context, so this description carries the transparency burden and largely fulfills it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core action front-loaded in the first sentence and async behavior in the second. No filler; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trigger tool with no output schema, it covers pipeline selection, async handoff, and field restrictions, which is sufficient. Minor omission: no mention of how to correlate the eventual webhook event back to this invocation, but that is not required to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The description adds a useful note about proposal-only fields being rejected, but does not restate syntax, enums, or constraints. Thus it only marginally supplements what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Trigger'), resource ('snapshot generation pipeline for a v2 clarity process'), and disambiguates two kinds with distinct pipelines (`current_process` vs `transformation_proposal`). Clearly distinguishes this generation action from sibling save/get/promote/revert snapshot tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains the two kind options and the triggers for each (generateCurrentProcess vs generate/regenerate proposal), including the fact that `current_process` rejects proposal-only fields. However, it does not explicitly contrast this tool with sibling tools like `getClarityProcessSnapshot` or `saveClarityProcessSnapshot`, so alternative selection is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generateRevisionGenerate RevisionAInspect

Generate agent instructions or code into a saved draft. Poll the returned builder run, answer questions if requested, then accept or decline the reviewed checkpoint. This never activates the revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesInstructions for generating or refining this agent or code step.
run_idNoOptional run ID for context
build_idYesSource revision to generate or refine.
process_idNoOptional process ID for context
conversationNoOptional voice conversation transcript
insight_indexNoOptional insight index for context
previous_build_idNoPrevious build ID for sandbox reuse
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are generic false flags, so the description carries the behavioral burden. It discloses important non-activated behavior, the need to poll a builder run, and the possibility of answering questions. This goes meaningfully beyond the structured annotations even though it omits explicit output/return details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver the core purpose, the follow-up workflow, and a critical safety boundary. Every sentence earns its place and the most important constraint, 'never activates the revision,' is clearly stated at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main workflow: generating into a saved draft, polling the builder run, handling questions, and accepting/declining. There is no output schema, but the phrase 'Poll the returned builder run' signals what the caller should expect. It could be more explicit about return payloads, but it is complete enough for a complex async generation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all eight parameters. The description does not add much parameter-level meaning beyond the overall workflow, but it also does not need to because the schema descriptions are adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: generating agent instructions or code into a saved draft. It also distinguishes itself from activation tools by explicitly saying 'This never activates the revision,' making its role clear among many revision-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for how and when to use the tool: generate into a saved draft, poll the returned builder run, answer questions if requested, then accept or decline the checkpoint. It does not explicitly name alternative tools or exclusion conditions, but the workflow guidance is strong enough for an agent to follow correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAgentGet AgentB
Read-onlyIdempotent
Inspect

Get an agent by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral detail beyond what annotations provide—such as what happens when the agent is not found, whether the full agent object is returned, or any permission requirements. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for a simple read operation, though it could have included a brief phrase about return value or use case without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, one required parameter, and strong annotations, the description is largely sufficient for an agent to select and invoke it. The only minor gap is the lack of explicit statement about the return value or not-found behavior, but this is not critical for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with agent_id fully documented as a UUID. The description's 'by ID' phrase aligns with the schema but adds no new semantic detail. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get an agent by ID' clearly specifies the verb (get), the resource (agent), and the scoping mechanism (by ID). It distinguishes itself from related siblings like createAgent, updateAgent, deleteAgent, and listAgents, and from other getters like getAgentCaseTrigger and getAgentMemoryFile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a single agent when its ID is already known, nor does it point to listAgents for browsing or searching. Context must be inferred entirely from the tool name and parameter schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAgentCaseTriggerGet Agent Case TriggerA
Read-onlyIdempotent
Inspect

Retrieve a single case trigger by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
trigger_idYesThe case trigger's unique identifier

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to re-state safety. The description adds no extra behavioral context beyond 'retrieve a single... by id', such as whether a missing trigger yields a 404 or whether the agent_id is scoped to the caller's organization. With no contradiction and no additional disclosure burden, a 3 reflects that the description is adequate but adds minimal behavioral value over annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that conveys the essential operation without any filler or redundant detail. It is appropriately front-loaded with the action verb, and every word earns its place. There is no reason to expand it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-id tool with two required UUID parameters, full schema coverage, and annotations covering idempotency and non-destructiveness, the description plus schema and annotations are nearly complete. The only minor gap is that the tool does not have an output schema, and the description does not state what the returned trigger object looks like or whether it includes nested fields, so an agent must infer the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both agent_id and trigger_id have UUID format and pattern constraints plus descriptive text ('The agent's unique identifier', 'The case trigger's unique identifier'). The description itself references 'by id', which aligns with the trigger_id parameter. Since the schema fully documents both parameters, the description does not need to add more; the naming and formats make the semantics unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Retrieve a single case trigger by id' clearly identifies the verb (retrieve), resource (case trigger), and lookup key (id). It stands apart from CRUD siblings like createAgentCaseTrigger, updateAgentCaseTrigger, and deleteAgentCaseTrigger, but does not explicitly distinguish itself from listAgentCaseTriggers or listAgentTriggers, so it loses a point for not naming those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a read-only lookup use case, and annotations confirm it is idempotent and non-destructive. However, it provides no explicit guidance on when to choose this tool over listAgentCaseTriggers (e.g., when you need a single trigger rather than all triggers for an agent), nor does it mention that agent_id and trigger_id are both required. The usage context is reasonable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAgentMemoryFileGet Agent Memory FileA
Read-onlyIdempotent
Inspect

Get the contents of a single memory file for an agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the memory file, e.g. notes.md or context/customer.md
agent_idYesThe agent's unique identifier

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral details beyond that, such as what happens for a missing file, authentication requirements, or whether the returned contents are raw text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word contributes to identifying the operation and its scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with two required parameters, full schema coverage, and rich annotations, this description is sufficient. The agent knows what the tool does, which agent and file path to provide, and that the operation is safe and idempotent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already well documented in the schema. The description only adds the general context of reading a memory file, which does not meaningfully extend the parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and a precise resource ('contents of a single memory file for an agent'). The phrase 'single memory file' distinguishes it from sibling listAgentMemoryFiles and related file-content tools, making the tool's scope immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over alternatives such as listAgentMemoryFiles, getFileContent, or getSkillFileContent. The description states what the tool does but provides no context, prerequisites, or exclusions to help an agent decide between related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAgentSuggestionGet Agent SuggestionA
Read-onlyIdempotent
Inspect

Fetch a single suggestion. Poll this after a 202 from consume: an AOP apply in flight reports payload.apply.state (running/failed); once consumed, applied_revision_id carries the draft revision the change was staged onto.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe suggestion's unique identifier

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnly/idempotent annotations by explaining the stateful polling behavior: an in-flight AOP apply reports payload.apply.state as running/failed, and once consumed, applied_revision_id carries the staged draft revision. This gives the agent meaningful expectations about response states without an 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core action, and packs the essential state-transition guidance into a compact form. Every phrase earns its place without fluff or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only fetch with one well-documented parameter, the description supplies the key missing context: when to poll, what states to expect, and what the consumed result means. It is slightly implicit about using the suggestion id returned by consume, but overall it is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single id parameter, describing it as 'The suggestion's unique identifier.' The tool description adds no new parameter meaning, but the schema already carries that burden, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch a single suggestion,' which immediately distinguishes it from list-oriented tools like listAgentSuggestions and from mutating tools like consumeAgentSuggestion. The additional polling context reinforces its specific role in the suggestion lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage trigger: 'Poll this after a 202 from consume,' telling an agent exactly when to call this tool. It does not explicitly name alternatives or state when-not-to-use, but the context is strong enough to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAutomationGet AutomationA
Read-onlyIdempotent
Inspect

Get a single automation with its agent and queue counts, and the tab arrangement its detail view navigates by.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear without description-level disclosure. The description adds useful payload context (counts and tab arrangement) but does not disclose error behavior, such as what happens when automation_id does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler, and the core action and scope are front-loaded before the return details. Every phrase adds either selection or invocation value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with robust annotations and no output schema, the description adequately tells the agent what will be returned. It could be slightly more complete by stating not-found behavior, but the low complexity and strong schema keep that gap minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter automation_id is fully documented in the schema with type, format, pattern, and a short description, so schema coverage is 100%. The tool description adds no extra parameter guidance, matching the baseline for fully schema-documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('a single automation') and enumerates concrete return aspects: agent counts, queue counts, and the tab arrangement for its detail view. This distinguishes it from listAutomations (plural) and from getAutomationTabs, which covers only the tab portion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided, and no sibling alternatives are named. The word 'single' implies use for one specific automation instead of listAutomations, but the choice between getAutomation and getAutomationCurrent/getAutomationTabs is left to the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAutomationCurrentGet Automation CurrentA
Read-onlyIdempotent
Inspect

Get what the automation is set up to do right now: its member agents with the builds that are live, its queues' routing, and the triggers and schedules firing for it. The revision-less counterpart of the revision detail — an automation without revisions is read here.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by emphasizing 'right now,' 'live' builds, and 'firing' triggers/schedules, making clear this returns the effective current configuration rather than a static historical record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads the verb and resource and gives a precise inventory of returned content, and the second adds the revision relationship. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one well-documented parameter, no output schema, and comprehensive safety annotations, the description is complete enough. It explains what the tool returns and the revision-less scenario where it applies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the single required parameter automation_id is already described in the schema. The description does not add meaning beyond the schema, which matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get what the automation is set up to do right now,' and enumerates the concrete contents: member agents, live builds, queue routing, triggers, and schedules. It also distinguishes itself as the 'revision-less counterpart of the revision detail,' separating it from revision-focused reads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance: this is the current-state read, particularly relevant when 'an automation without revisions is read here.' It does not explicitly name sibling alternatives like getAutomation or getAutomationCurrentFlow, but the revision relationship provides useful selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAutomationCurrentFlowGet Automation Current FlowA
Read-onlyIdempotent
Inspect

Get the automation's flow graph as it stands right now: the agents and queues it currently wires together, plus the producer, consumer, and handover edges between them. The revision-less counterpart of the revision flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond that by clarifying the response is the current live graph and describing its structural contents. No contradiction exists between description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the primary purpose and result contents; the second sentence adds a useful distinguishing qualifier. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one well-documented parameter and no output schema, the description sufficiently explains what the result will contain: a flow graph with agents, queues, and edge types. The annotations cover safety and idempotence, and the revision-flow comparison covers positioning, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the single parameter automation_id already documented by name, type, format, and pattern. The description does not need to add parameter details; baseline 3 is appropriate because the schema carries the semantic weight and no additional parameter nuance is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Get') and a specific resource ('the automation's flow graph'), then defines exactly what that includes: agents, queues, and producer/consumer/handover edges. It also distinguishes itself as 'the revision-less counterpart of the revision flow,' which helps separate it from sibling tools like getAutomation and getRevision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'as it stands right now' and 'revision-less counterpart of the revision flow' provide clear context for when to use this tool: when the current live flow graph is needed rather than a revision-specific view. It does not explicitly name alternative tools, but the revision-flow comparison gives practical routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAutomationTabsGet Automation TabsA
Read-onlyIdempotent
Inspect

Get the automation detail view's tab arrangement, plus metadata for the Pulse dashboards pinned into it. Pinned dashboards are filtered to the ones the calling identity may see.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds one useful behavioral trait beyond those: pinned dashboards are filtered by the calling identity's visibility, which is important context an agent could not infer from the schema or annotations. It does not detail return-value shape, but the most safety-relevant behavior is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the full purpose: main resource, additional returned data, and an important filtering caveat. It is front-loaded with the primary action and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool, the description covers the input (through schema), the output at a useful level (tab arrangement plus each pinned dashboard's metadata), and a visibility filter that affects the result set. No output schema exists, but the high-level return contract is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single required automation_id parameter, which already documents its type, format, and meaning. The description adds no param-specific syntax or context, so it warrants the baseline 3 rather than more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise verb-resource pair: it retrieves the automation detail view's tab arrangement plus metadata for pinned Pulse dashboards. It also adds a distinguishing scoping detail (dashboards are filtered by what the caller may see), which separates it from generic getAutomation or listPulseDashboards calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates what this tool returns, so an agent can infer it is the right choice when it needs automation detail tab layout or pinned Pulse dashboard metadata. It does not explicitly identify sibling alternatives or state when not to use it, but the content is specific enough to avoid obvious confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getBatchQueueStatsGet Batch Queue StatsA
Read-onlyIdempotent
Inspect

Get case status counts for many Queues in ONE call. Use this after listQueues whenever you need per-Queue counts — cases waiting on a human, needing review, pending, failed — instead of calling listCases or searchCases once per Queue. Results are keyed by Queue ID and include zero counts for Queues with no matching cases; Queue IDs from other teams are silently dropped. For a count on a single Queue with richer filters, listCases with count_only=true is the alternative.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
queue_idsYesComma-separated Queue IDs to aggregate. Include 1 to 100 IDs from the team in the URL.
created_at_toNoExclusive case creation upper bound. Use an ISO 8601 timestamp or a relative duration such as 7d or 12h. Omit it for no upper bound.
created_at_fromNoInclusive case creation lower bound. Use an ISO 8601 timestamp or a relative duration such as 7d or 12h. Omit it for no lower bound.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, the description discloses important behaviors: results are keyed by Queue ID, Queues with no matches get zero counts, and Queue IDs from other teams are silently dropped. This prevents an agent from assuming errors or missing results in those cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each carrying distinct value: what it does, when to use it, what the results look like, and when to use the alternative. The most important scoping fact is front-loaded, and there is no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by explaining the response shape: counts keyed by Queue ID, including zero counts. It also covers the auth/team scoping caveat implicitly via the silently-dropped-other-team-IDs note and gives a clear routing alternative, so an agent can select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents queue_ids, team_id, and the date-range parameters. The description adds context about batching and queue scoping, but it does not need to explain parameter formats, and it does not substantially extend the schema's per-parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb, resource, and scope: 'Get case status counts for many Queues in ONE call.' It clearly differentiates itself from siblings like listCases, searchCases, and listQueues by emphasizing batched per-Queue counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this 'after listQueues whenever you need per-Queue counts' instead of calling listCases or searchCases once per Queue. It also names the alternative for single-Queue counts: 'listCases with count_only=true is the alternative.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getBuilderRunGet Builder RunB
Read-onlyIdempotent
Inspect

Get the status of a builder run

ParametersJSON Schema
NameRequiredDescriptionDefault
builder_run_idYesThe builder run identifier.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds minimal behavioral context beyond 'status' retrieval. It doesn't mention what status values might be returned, whether the run must be active, or any side effects. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core action. It is appropriately sized for a simple read operation, though it could add a bit more context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one parameter and full schema coverage, the description is mostly complete. However, the lack of output schema and no mention of what status information is returned leaves some ambiguity. The tool is simple enough that an agent can likely call it correctly, but the description doesn't enrich the context beyond the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter builder_run_id fully described as 'The builder run identifier.' The description adds no additional parameter meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get the status of a builder run' clearly states the verb (get) and resource (builder run status). It distinguishes from siblings like getRun, listRuns, cancelBuilderRun, resumeBuilderRun, and startRun by focusing on status retrieval. However, it doesn't explicitly differentiate from getRun, which could be ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking builder run status but provides no explicit when-to-use guidance or alternatives. Sibling names like getRun and listRuns suggest related tools, but the description doesn't clarify when to choose getBuilderRun over getRun. No exclusions or conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCaseGet CaseA
Read-onlyIdempotent
Inspect

Get a case by ID. Returns the case, its event history, and every case-approval batch ever created on the case (newest first).

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond that by specifying that the response includes the complete event history and every approval batch, with newest-first ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first states the core operation, the second lists the return contents and ordering. Every word earns its place, with no repetition of schema or annotation details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only getter with rich annotations and full schema coverage, the description is complete. It compensates for the lack of an output schema by naming exactly what the caller receives, including ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents case_id as a UUID unique identifier with 100% coverage. The description only says 'by ID' and does not add new parameter semantics beyond the schema, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get'), a specific resource ('a case by ID'), and the unique return payload: the case, its event history, and all approval batches newest-first. This clearly distinguishes getCase from sibling list/search case tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: call this when you have a case ID and need the full case record with its history and approval batches. It does not explicitly name alternatives like searchCases or listCases, but the by-ID and return-scope wording is enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCaseAttachmentDownloadUrlGet Case Attachment Download UrlA
Read-onlyIdempotent
Inspect

Mint a short-lived signed URL for one case attachment. disposition=inline serves the file for the in-app viewer; attachment forces a download.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier
dispositionNoattachment
attachment_idYesThe attachment's unique identifier

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as a safe, read-only, idempotent operation, so the bar is lower. The description adds valuable behavioral context beyond annotations: the URL is 'short-lived' and 'signed', which implies expiration and authentication requirements. It also explains the behavioral difference between inline serving and forced download, which is not captured in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The primary action is front-loaded, and the disposition clarification is the only additional detail included. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations covering safety and a schema covering parameter semantics, the description is nearly complete. It implies the return value is a URL and discloses the short-lived signed nature. The only minor gap is not specifying the exact response shape or URL expiration duration, but there is no output schema expecting that elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description compensates for the one undocumented parameter ('disposition') by explaining the meaning and effect of both enum values. The other parameters are already well-described in the schema with UUID format and role-specific descriptions, so the marginal value added by the description is appropriately targeted at the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Mint'), a precise resource ('one case attachment'), and the output ('short-lived signed URL'), which clearly distinguishes it from sibling tools like getFileDownloadUrl or getPulseDashboardAttachmentDownloadUrl. The additional disposition explanation further clarifies the tool's two modes of behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to obtain a download URL for a single case attachment. It also explains how to choose between 'inline' and 'attachment' disposition values, which is practical usage guidance. It does not explicitly name alternative tools or exclusion criteria, but the resource-specific scoping makes the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCaseQueueEvalRubricsGet Case Queue Eval RubricsA
Read-onlyIdempotent
Inspect

List a queue's active case-level evaluation rubrics — the Pass/Fail questions a whole case is judged against at settlement. Shows the queue's current version's set (auto-generated from the connected Assignments' AOPs, plus any manually-authored rubrics).

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to re-state safety. It adds useful behavioral context by explaining the set is auto-generated from connected Assignments' AOPs plus manually-authored rubrics, and that it reflects the queue's current version.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core action and resource are front-loaded, and the second sentence adds necessary context about the composition of the rubrics without redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one parameter and no output schema, the description covers what is returned (active case-level rubrics, current version set, auto-generated plus manual). It could mention edge cases like an empty queue or missing version, but the core context needed to call the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with queue_id fully documented as 'The queue's unique identifier.' The description reinforces that the scope is queue-specific but adds no material semantics beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and a precise resource: a queue's active case-level evaluation rubrics. It further clarifies what those rubrics are (Pass/Fail questions judged at settlement) and distinguishes them from general eval rubrics by the 'case-level' and 'queue' qualifiers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when this tool is appropriate: whenever an agent needs a queue's case-level eval rubrics. It does not explicitly name alternative tools like getEvalRubrics or createCaseQueueEvalRubric, nor does it state when not to use it, but the context is clear enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityArtifactChatMessagesGet Clarity Artifact Chat MessagesA
Read-onlyIdempotent
Inspect

Load the latest artifact-chat messages for one active conversation, returned oldest-first.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idYesThe Clarity process id
conversation_idYesThe artifact-chat conversation id

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by specifying that it returns the latest messages and orders them oldest-first, and that the conversation must be active.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action and includes the key constraints: latest messages, one conversation, active state, and ordering. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read operation with full schema coverage and safety annotations, the description is sufficient. It names the resource, ordering, and active-conversation requirement; pagination limits and exact response fields are not described but are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both process_id and conversation_id already clearly documented. The description adds little parameter-level meaning beyond naming the target conversation, but the schema carries the burden adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Load') with a clear resource ('artifact-chat messages') and scope ('one active conversation'). It is easily distinguished from sibling tools like listClarityArtifactChatConversations because it targets messages within a single conversation rather than listing conversations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the context: loading messages for one active conversation. It does not explicitly name alternative tools or exclusion conditions, but the scope is specific enough that an agent can infer when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityCaptureGet Clarity CaptureA
Read-onlyIdempotent
Inspect

Get a single Clarity v2 capture including full transcript and video transcript. Use this when the process was loaded with captures=lite, or when only one capture's transcript is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
capture_idYesThe capture id
process_idYesThe clarity process id

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating the returned capture includes full transcript and video transcript, but it does not disclose other behavior such as response shape or error conditions. This is acceptable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the action and returned content, and the second sentence gives concrete usage conditions. Information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get-by-id tool with full schema documentation and safety annotations, the description is sufficiently complete. It explains what the tool returns and when to use it, which is enough for an agent to invoke it correctly. A slightly richer statement about the capture relationship to the process could help, but it is not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both capture_id and process_id documented in the input schema. The description adds no parameter-specific meaning beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get a single Clarity v2 capture with full transcript and video transcript. It also signals the scope ('single') and distinguishes this from broader capture/process retrieval tools like listClarityProcessSnapshots or getClarityProcess, even without naming them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions for use: when the process was loaded with captures=lite, or when only one capture's transcript is needed. It does not name specific alternative tools or state when not to use it, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityExportGet Clarity ExportC
Read-onlyIdempotent
Inspect

Get a Clarity export run by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds no behavioral context beyond the schema; it does not indicate what the response contains, whether a missing ID returns an error, or how this fits into the export workflow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero wasted words, and the action 'Get' plus the resource 'Clarity export run' are front-loaded. This is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool this is close, but with no output schema and no mention of what is returned or how the ID is obtained, an agent cannot fully predict the call's behavior. It should reference startClarityExport or listActiveClarityExports for context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description needed to compensate for the id parameter's meaning. Saying 'by ID' adds little beyond the schema, and it does not clarify that the ID comes from starting a export or listing active exports.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get a Clarity export run by ID'), making the lookup intent clear. However, it does not explicitly differentiate this from sibling tools like listActiveClarityExports or getRun, so it falls 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus startClarityExport or listActiveClarityExports. There is also no mention of prerequisites, such as obtaining an export run ID first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityHierarchyPeopleGet Clarity Hierarchy PeopleA
Read-onlyIdempotent
Inspect

List the people attached to every authorized linked process node in the organization's Process Landscape. Returns a flat list where each person carries nodeId and processId, plus their role, invite status, and capture count. Narrow it with rootId (one subtree), ownerTeamId (one owning team), and userId or search (one person) — an unfiltered organization roster is large enough to be refused by response-size caps. To find the processes where one person has not captured yet, filter to that person and read captureCount per row. truncated is true when the node subtree or any single process roster was capped.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
rootIdNoOnly return rosters for nodes in the subtree under this node
searchNoOnly return rows whose person name or email contains this text, case-insensitively
userIdNoOnly return rows for this platform user, matched on the same resolved identity the roster reports (an email-only row resolves through its organization profile)
ownerTeamIdNoOnly return rosters for processes owned by this team. 404s when the team has no readable Process Landscape

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive), the description explicitly discloses response-size limits and the `truncated` flag behavior, plus the flat result shape. This gives the agent actionable behavioral context about possible partial results and internal cap-causing conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences each earn their place: the purpose, the returned fields, filter guidance with a size-cap warning, a specific use case, and the truncation flag. It is front-loaded and there is no repetition or extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a read-only listing tool with no output schema, so the description carries the responsibility for the return shape. It does so completely: the fields, the filters to narrow the result, the warning about response-size refusal, and the meaning of `truncated` are all present, making it sufficient for an agent to call this tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline stays at 3. The description repeats the schema's parameter meanings (rootId -> subtree, ownerTeamId -> team, userId/search -> one person) rather than adding a substantial new layer of meaning for the parameters themselves. The captureCount use case is a usage hint more than deep parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action (list) and resource ('people attached to every authorized linked process node in the organization's Process Landscape') and details the flat output fields. It does not explicitly distinguish itself from sibling tools like listClarityLandscapeNodePeople or listClarityProcessMembers, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is provided for narrowing results via rootId, ownerTeamId, userId, and search, including a warning that an unfiltered roster may be rejected by response-size caps. It also gives a concrete use case (find processes where a person hasn't captured) but does not exclude alternatives or name when to prefer other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityOrganizationInterviewGet Clarity Organization InterviewB
Read-onlyIdempotent
Inspect

Load a single organization Clarity interview with transcript

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
interviewIdYesThe organization interview ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the behavioral detail that the loaded interview includes its transcript, but discloses nothing else (auth requirements, error behavior, or response shape). This is acceptable for a safe read tool, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the action and resource before the payload detail. Every word earns its place; nothing is redundant with the annotations or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-ID get-by-id tool with strong read-only/idempotent annotations and no output schema, the description is nearly sufficient: the required parameters are clearly constrained by the schema, and 'with transcript' hints at what the caller receives. The only modest gap is lack of guidance on listing interviews first or confirming the interview belongs to the org, but neither is critical for a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: interviewId has a schema description, but orgId has none. The tool description does not compensate — it never explains what orgId refers to, how the two identifiers relate, or any additional format/context beyond what the schema already provides. The description adds no real parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Load'), a clear resource ('a single organization Clarity interview'), and a key scope qualifier ('single') that implicitly differentiates it from listClarityOrganizationInterviews. It also adds a useful payload detail ('with transcript'). It does not explicitly name sibling alternatives, so it falls 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied — retrieve one specific interview by orgId and interviewId — and the word 'single' hints at the contrast with listing tools, but the description provides no explicit when-to-use guidance, no exclusions, and no named alternative. An agent must infer the routing from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityPortfolioIntelligenceGet Clarity Portfolio IntelligenceB
Read-onlyIdempotent
Inspect

Get portfolio intelligence for the current team

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'current team' scope but does not disclose additional behavioral details such as output freshness, relationship to generated intelligence, or what happens when no intelligence exists. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence with no wasted words. It front-loads the core operation and scope. It could be slightly more informative by clarifying what portfolio intelligence is, but as written it is concise and directly usable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description does not explain what portfolio intelligence contains or what the agent should expect as a result. It also fails to address the existence of generateClarityPortfolioIntelligence, leaving a key ambiguity about when to retrieve versus generate. The team_id auth details are covered in the schema, but the domain-level context is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the team_id parameter already has a thorough description covering omission, fallback to the API key's team, OAuth usage, and rejection of different teams. The tool description itself adds no parameter-level meaning, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Get portfolio intelligence for the current team.' It is not a tautology and identifies the operation's scope. However, it does not define what 'portfolio intelligence' means or distinguish itself from the sibling tool generateClarityPortfolioIntelligence, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. In particular, there is a sibling tool named generateClarityPortfolioIntelligence, but the description never explains whether the agent should call get versus generate or under what conditions. The team_id schema description offers useful auth context, but this is not guidance about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessGet Clarity ProcessA
Read-onlyIdempotent
Inspect

Get the v2 read model for a clarity process: the process row (with operational fields like generation_error, generation_progress, generation_started_at, generation_last_activity_at, custom_prompt), its captures, and the lightweight version arrays for both snapshot tabs. The full payload of any specific snapshot is fetched lazily via the unified per-snapshot detail endpoint (GET .../snapshots/:kind/:id); this read model deliberately doesn't carry it so the response stays small.

ParametersJSON Schema
NameRequiredDescriptionDefault
capturesNoCapture payload mode. `full` (default) embeds each capture's transcript content. `lite` omits `transcript`/`videoTranscript` (returned as null) and relies on the `hasTranscript`/`hasVideoTranscript` flags; fetch content on demand via `GET .../captures/:capture_id`.full
process_idYesThe clarity process id

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with annotations (readOnlyHint, idempotent, non-destructive) and adds transparency by explaining that the response omits full snapshot payloads to keep the response small. This goes beyond the annotations and sets correct expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, well-structured, and covers purpose, scope, and the lazy-loading caveat without redundancy. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameters and the description's detail about the response contents (process row, captures, version arrays), the agent has enough context to use the tool correctly. No output schema is present, but the description fills that gap adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description enriches the 'captures' parameter by explaining the 'full' vs 'lite' modes and their impact on transcript fields. This adds significant meaning beyond the raw enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a v2 read model for a clarity process, specifying the contained fields (process row, captures, version arrays). It distinguishes itself from snapshot-specific tools like getClarityProcessSnapshot and getClarityProcessTree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly mentions that full snapshot payloads are fetched lazily via a unified per-snapshot detail endpoint, guiding agents to use this tool for the lightweight read model rather than trying to retrieve heavy data here. This is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessJoinInfoGet Clarity Process Join InfoC
Read-onlyIdempotent
Inspect

Get information about a clarity interview invite link (public).

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a small behavioral signal with '(public)', implying the invite link is publicly accessible and likely needs no special authentication, but it does not disclose what information is returned or any failure modes. This is modest added 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. It is concise, though it is also somewhat under-specified; this keeps it from receiving a 5 because the brevity comes at the cost of useful param and output context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameter documentation in the schema, the description carries the burden of explaining what information is returned and what 'token' refers to. It does neither. For a tool that an agent must invoke with a required token, this leaves the agent guessing about both input and output expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter, 'token', with no description, and schema description coverage is 0%. The tool description does not mention the token at all—neither its meaning, format, nor how to obtain it. The description completely fails to compensate for the schema's lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Get information about a clarity interview invite link (public).' It is more than a tautology and immediately signals what the tool does, but it does not explicitly distinguish itself from closely related siblings like getClarityProcessInviteLink or acceptClarityProcessJoin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives such as getClarityProcessInviteLink, createClarityInviteLink, or acceptClarityProcessJoin. No context, prerequisites, or exclusions are provided, so the agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessLandscapeGet Clarity Process LandscapeB
Read-onlyIdempotent
Inspect

Fetch the organization's full process landscape with process summaries, team assignments, and page-level stats

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
rootIdNo
teamIdNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only what data is returned and does not disclose behavioral details such as filtering effects of rootId/teamId, pagination, rate limits, or response shape. It aligns with annotations, so no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and object, lists meaningful content components, and contains no filler. Every word contributes to communicating the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no parameter descriptions, this description is thin. It names high-level return contents but does not explain optional parameters, response structure, or when to use this instead of closely related Clarity tools. An agent could make a basic call with orgId but would lack enough context to correctly use rootId/teamId or understand the full return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 3 parameters with 0% description coverage, and the description does not compensate. It indirectly associates orgId with 'organization,' but rootId and teamId are left entirely unexplained, forcing the agent to infer their semantics solely from their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb 'Fetch' and names the resource 'organization's full process landscape' with concrete contents: process summaries, team assignments, and page-level stats. It is clear, but it does not explicitly distinguish itself from related siblings like getClarityProcessTree, listClarityProcessSummaries, or generateClarityProcessLandscape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'full process landscape' implies this is used when a broad org-wide view is needed, but no explicit when-to-use or when-not-to-use guidance is provided. The description does not mention alternatives or state exclusions, leaving the choice between this tool and similar Clarity read/list/generate tools to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessSharingGet Clarity Process SharingC
Read-onlyIdempotent
Inspect

Get the sharing status for a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process ID.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description only repeats the idea of 'Get' without adding behavioral context. It does not describe what 'sharing status' contains, whether it reflects computed or stored state, or how it relates to sharing mutations, so it adds no transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It is concise and easy to parse, though it leans slightly under-specified rather than being a model of informative brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with rich annotations and a fully documented schema, the description is minimally viable for invoking the tool. However, it leaves the meaning of 'sharing status' ambiguous and provides no return-shape or usage context, which would matter given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% parameter coverage, including a clear description for the only parameter, id. The tool description adds no additional meaning about the parameter, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb (Get) and resource (sharing status for a clarity process), so an agent can tell this is a read operation targeted at sharing information. It does not explicitly distinguish itself from getClarityProcess, getClarityProcessInviteLink, or related siblings, but the phrase 'sharing status' narrows the purpose sufficiently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool instead of alternatives such as getClarityProcess, getClarityProcessInviteLink, or updateClarityProcessSharing. There is no mention of complementary tools, exclusions, or typical selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessSnapshotGet Clarity Process SnapshotB
Read-onlyIdempotent
Inspect

Fetch the full payload for a Clarity v2 process snapshot of either kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
process_idYesThe clarity process id
snapshot_idYesSnapshot id

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Fetch' is consistent with those. The description adds that the response is the 'full payload' and that it covers either snapshot kind, but it does not add deeper behavioral context such as authorization needs, snapshot lifecycle constraints, or return format caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It clearly leads with the action and object, and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only fetch with fully documented parameters and strong annotations, the description is mostly sufficient. 'Full payload' partially compensates for the lack of an output schema, though a little more context about how the two snapshot kinds differ or when a snapshot_id is valid would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so process_id, kind, and snapshot_id are already documented with types, formats, and enums. The description only reinforces the enum via 'of either kind' and adds no new parameter-level meaning, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch') and a specific resource ('full payload for a Clarity v2 process snapshot'), and 'of either kind' maps to the two enum values. It does not explicitly differentiate from sibling tools like listClarityProcessSnapshots or generateClarityProcessSnapshot, but the focus on 'full payload' makes the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus related snapshot tools such as listClarityProcessSnapshots, generateClarityProcessSnapshot, or promoteClarityProcessSnapshot. There are no exclusions, prerequisites, or alternative routing instructions, leaving usage entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityProcessTreeGet Clarity Process TreeA
Read-onlyIdempotent
Inspect

Fetch the organization's process tree, or the subtree under rootId. Narrow a large organization with rootId (one subtree) or ownerTeamId (one team's processes) — a whole-organization tree is large enough to be refused by response-size caps

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
rootIdNo
ownerTeamIdNoOnly return process nodes owned by this team, plus the folder nodes that carry them. 404s when the team has no readable Process Landscape

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds important behavioral context about response-size caps and potential refusal for large organizations, which goes beyond the annotations. It also notes that `ownerTeamId` may 404 when the team has no readable Process Landscape, a useful edge case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core purpose, then succinctly adds usage guidance for size limits. Every clause adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tree-fetch tool with no output schema, the description covers the essential decision points (scoping parameters and response-size risk). It lacks detail on the exact structure of the returned tree, but that is likely acceptable given the simple read-only nature. The 404 behavior for `ownerTeamId` is a useful addition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with only `ownerTeamId` having a schema description. The tool description compensates by explaining the purpose of `rootId` and `ownerTeamId` in narrowing results, adding semantic meaning beyond the schema. For `orgId`, the schema provides its UUID format, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches the organization's process tree, optionally narrowed by `rootId` or `ownerTeamId`. The verb 'Fetch' and resource 'process tree' are specific, and the description distinguishes it from related siblings like `getClarityProcessLandscape` by focusing on the tree structure and scoping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use `rootId` (for one subtree) or `ownerTeamId` (for one team's processes) to avoid response-size refusals. It also warns against fetching the whole organization tree when too large, providing clear context for when to narrow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getClarityTeamSettingsGet Clarity Team SettingsB
Read-onlyIdempotent
Inspect

Get clarity team settings for financial calculations

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds only a purpose clause and no behavioral trait such as authentication requirements, response shape, or how team_id fallback works; that fallback behavior appears only in the parameter schema, not in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. The verb and resource are front-loaded, and the 'for financial calculations' clause adds useful domain context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only tool with one well-documented optional parameter and strong annotations, the description is close to adequate. However, because there is no output schema, the description leaves the return shape implicit; an agent would benefit from knowing what settings are actually returned, such as rounding rules, currency, or calculation assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional parameter team_id is fully documented in the input schema, including UUID format, API-key vs OAuth behavior, and rejection of mismatched teams. Since schema description coverage is 100%, the description does not need to add parameter details, and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a specific resource ('clarity team settings'), and a domain purpose ('for financial calculations'). This is enough to distinguish it from write tools like updateClarityTeamSettings and from other getters, though it does not explicitly contrast with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for financial calculations' gives a weak implied use context, suggesting the tool is relevant when financial calculation settings are needed. However, it does not explicitly say when to use this tool instead of updateClarityTeamSettings, getTeam, or other related getters, and no exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getConnectionGet ConnectionA
Read-onlyIdempotent
Inspect

Get one of your connections by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds ownership scoping ('your connections') but does not disclose error behavior, response shape, or distinction from getConnectionCredentials. With annotations present, this is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with zero filler. Every word earns its place, and the description is appropriately sized for such a simple read operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only, idempotent lookup tool, the description plus schema and annotations covers what an agent needs to invoke it correctly. It could add a note about not returning credentials or about using listConnections for enumeration, but those are optional refinements rather than clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already fully documents connection_id as a required UUID. The description's 'by ID' restates that intent without adding meaning beyond the structured schema, matching the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource ('connections'), and the selection mechanism ('by ID'). This clearly distinguishes it from listConnections and from create/update/delete variants, so an agent can select it confidently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' implies this is for retrieving a single known connection, and 'your' scopes it to the user's own connections. However, it does not explicitly mention alternatives like listConnections or when to prefer those, so 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.

getConnectionCredentialsGet Connection CredentialsA
Read-onlyIdempotent
Inspect

Get the header keys configured for a connection. Sensitive values (api keys, tokens, passwords) are returned as empty strings — the response only reveals which credential fields are set, never their values.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral transparency by stating that sensitive values are returned as empty strings, revealing only which fields are set. This goes beyond the readOnlyHint annotation by explaining the exact output behavior. It also implies no side effects, consistent with the idempotent and non-destructive annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that efficiently conveys the purpose and key behavior. It avoids unnecessary details and is well-structured, making it easy for an agent to parse and understand the tool's functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is fairly complete for its scope, explaining both the output (header keys) and the masking of sensitive values. However, it does not mention related tools or provide guidance on when to choose this over getConnection or getCredential, which could be beneficial context. Still, the core information needed for usage is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the parameter with a 'Connection ID' description, and the tool description does not add further semantic detail. The parameter is a straightforward identifier, and the description provides no additional context about how it is used. Since schema coverage is 100%, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to get the header keys configured for a connection. It explicitly distinguishes itself by noting that sensitive values are masked, which differentiates it from tools like getConnection that might return full details. The verb 'get' is specific and the resource 'connection' is identified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool over alternatives like getConnection or getCredential. It implies usage when only header key names are needed, but does not provide explicit guidance or exclusion criteria. The behavioral note about masking sensitive values gives some context, but no direct comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCredentialGet credential by idB
Read-onlyIdempotent
Inspect

Get a login by id. Returns the encrypted password/otp_secret blobs — only the owner or team members can access it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
userIdYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, idempotent, and non-destructive; the description adds that returned blobs are encrypted and access is restricted to owner/team members. This is useful behavioral context beyond the annotations and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the operation and includes the return payload and access restriction without filler. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only fetch with rich annotations, the description covers the return payload and access restrictions reasonably well. However, it omits what userId is for and does not describe error or not-found behavior, leaving some ambiguity for a three-parameter tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with team_id documented but userId and id left unexplained. The description adds only the generic phrase 'by id', leaving the required userId's purpose and its relationship to ownership ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), resource ('a login'/'credential'), and selection method ('by id'), and previews the sensitive payload. It is clear but does not explicitly differentiate it from siblings like getSecret or listCredentials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys an access precondition ('only the owner or team members can access it') and implies use when you already have a credential id. However, it does not say when to prefer listCredentials, getSecret, or other credential-related tools, and it offers no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getEvalRubricsGet Eval RubricsA
Read-onlyIdempotent
Inspect

List the evaluation rubrics a Run is scored against: the platform default rubrics plus the Agent-specific rubrics for a build. Defaults to the Agent's live build; pass build_id to target the revision a specific Run ran against.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier (Assignment ID)
build_idNoReturn rubrics for this specific build (the revision a Run ran against). Defaults to the agent's live build when omitted.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds value by disclosing the result composition (default plus Agent-specific rubrics) and the default build-target behavior, which are not inferable from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states the core action and result contents, the second explains the default and the optional parameter. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list operation with two fully documented parameters and no output schema, the description covers the action, the returned composition, and the only subtle selection behavior (build default vs explicit build_id). Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both UUID parameters. The description still adds meaning by explaining the conceptual role of build_id ('target the revision a specific Run ran against') and the default when it is omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb ('List') and resource ('evaluation rubrics a Run is scored against'), and clarifies the result composition ('platform default rubrics plus the Agent-specific rubrics for a build'). This distinguishes it from nearby eval/scores/queue-rubric tools and leaves no ambiguity about what is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage guidance: omit build_id for the Agent's live build, or pass build_id to target the revision a specific Run ran against. It does not explicitly name sibling alternatives or exclusions, so it falls short of a 5, 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.

getEvalScoresGet Eval ScoresA
Read-onlyIdempotent
Inspect

Aggregate evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoWhen 'custom', only counts Jobs scored against the target revision's custom rubrics, and only `custom__*` rubric flags. Defaults to 'all' (platform + custom rubrics).
sinceYesISO 8601 timestamp; only Jobs evaluated after this are counted
agentIdYesThe agent's unique identifier (Assignment ID)
revision_idNoTarget a specific Assignment revision instead of the live revision. Only honoured when scope='custom' — non-custom scopes aggregate across all revisions. Defaults to the live revision when omitted.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the primary behavioral aspects. The description adds modest context by describing the aggregation behavior and the time filter, but does not mention any side effects, error conditions, or rate limits beyond what the annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that states the primary action and key qualifiers without any extraneous text. It front-loads the main intent ('Aggregate evaluation counts and flag distribution') and is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description does not explain the return structure, which could be a gap. However, it does convey the core purpose and the important parameters, and for a read-only aggregation tool, the information provided is likely sufficient for an agent to call it correctly. Omission of return details is the main shortfall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter. The description adds little beyond the schema: it mentions 'since the given timestamp' but that is already in the 'since' parameter description. No additional parameter details are provided that are not already present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Aggregate') and a clear resource ('evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp'). It clearly differentiates from sibling getters like getEvalRubrics or listRuns by specifying an aggregation over evaluated jobs with a time filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning the timestamp filter and the aggregation nature, which suggests it is for summary metrics rather than individual records. It also hints at the 'scope' parameter's effect indirectly via the description of revision_id, but it does not explicitly state when to prefer this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getFileContentGet File ContentB
Read-onlyIdempotent
Inspect

Get the content of a text file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath of the file relative to the team's storage root
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) — a read operation — so there is no contradiction. The 'text file' qualifier adds a mild behavioral constraint (binary files aren't supported), but the description otherwise discloses nothing beyond the annotations: no return encoding, no size limits, no missing-file error behavior. With annotations carrying the safety profile, the added value is thin but present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, 'Get the content of a text file,' with zero wasted words and the verb front-loaded. It's appropriately brief for a simple read tool, though this sentence is also the entire description with no supporting structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter read tool, the schema covers all parameters and the annotations cover the safety profile, so the essentials are in place. However, with no output schema, the description doesn't specify how content is returned (raw text vs wrapped/encoded payload), and behavior for missing paths or non-text files is unstated — modest but real gaps for an agent deciding whether and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already well documented: path is explicitly 'relative to the team's storage root,' and team_id carries detailed API-key-pinning versus OAuth guidance. The tool description itself adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('the content of a text file'), making the tool's core function immediately clear. It implicitly distinguishes from siblings like getFileDownloadUrl (URL vs content) and updateFileContent (modify vs read), but it doesn't name alternatives or explicitly call out the text-file-only scope, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description never mentions getFileDownloadUrl for URL needs, updateFileContent for edits, or listFiles for file discovery, and it gives no exclusions for binary files or large files. An agent must infer usage entirely from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getFileDownloadUrlGet File Download UrlB
Read-onlyIdempotent
Inspect

Generate a signed download URL for a file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath of the file relative to the team's storage root
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is consistent with those. It adds the useful point that the result is a signed, auth-bearing URL rather than raw file content, but it does not explain signed-URL lifecycle details such as expiration. This is modest added 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, front-loading the verb and object. Every word earns its place, and it is appropriately terse for a simple URL-generation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, idempotent tool with two parameters and 100% schema coverage, the description plus schema is sufficient for correct invocation. It could explicitly mention the return value shape or URL expiration, but 'generate a signed download URL' already communicates the core output expectation. These are minor gaps, not blockers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline applies; path and team_id both have informative descriptions covering storage-root interpretation and API-key/OAuth team behavior. The description itself adds no parameter-level detail, so it neither compensates beyond the schema nor leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Generate a signed download URL') and the resource ('a file'), and 'signed' distinguishes it from generic URL or content-fetch tools. It does not, however, explicitly name sibling tools such as getFileContent or createFileUploadUrl, so differentiation relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like getFileContent, listFiles, or createFileUploadUrl, and no excluding conditions are given. The only usage hint is the generic phrase 'for a file,' which leaves selection context to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getLegacyClarityProcessGet Legacy Clarity ProcessA
Read-onlyIdempotent
Inspect

Get a legacy v1 Clarity process with process metadata, generated analysis, automation guidance, generation progress, and captures. Use this for rows from listClarityProcesses where version=1; v2 rows should use getClarityProcess and snapshot detail tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior, so the bar for added transparency is lower. The description adds context that this is a 'legacy' v1 process and lists the output categories, which gives some insight into expected behavior. However, it does not mention potential side effects or limitations beyond the legacy tag, so it's not perfectly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that efficiently communicate purpose and usage. It avoids redundancy and fluff, making it straightforward to parse. The structure is logical: first the action and content, then the usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description does provide a high-level summary of what is returned (metadata, analysis, guidance, progress, captures). It also includes essential usage context for when to apply this tool. However, it does not detail the exact structure of the output or any error conditions, leaving some gaps, but it's sufficient for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema defines only 'id' with no description, and the tool description does not explicitly explain what 'id' represents. While it can be inferred from the context ('rows from listClarityProcesses') that 'id' is the process identifier, this is implicit rather than explicit. With 0% schema description coverage, the tool description should have compensated by clearly stating the parameter's meaning, which it fails to do.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Get') and resource ('legacy v1 Clarity process'), enumerates the returned content (metadata, analysis, guidance, progress, captures), and explicitly distinguishes it from the v2 counterpart (getClarityProcess). This leaves no ambiguity about the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage criteria: 'Use this for rows from listClarityProcesses where version=1' and directs v2 rows to alternative tools. This makes the when-to-use and when-not-to-use conditions crystal clear, 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.

getNotificationGet NotificationA
Read-onlyIdempotent
Inspect

Get a single notification by id for the authenticated user. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe notification's unique identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds non-obvious runtime behavior beyond those hints: the feature requirement and the 404 when Notification Center is disabled, plus the authenticated-user scoping. This is meaningful behavioral context and does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The operation is front-loaded, and the second sentence adds only the prerequisite and one relevant error behavior. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only getter with full schema coverage and strong annotations, the description is complete: it covers purpose, auth scope, and the key 404 edge case. No output schema exists, so return-value detail is not expected, and nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to compensate for undocumented parameters. The only parameter, id, is already described in the schema with a UUID format, so the description's 'by id' adds no new semantic detail. A baseline 3 is appropriate when the schema carries the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a single notification by id for the authenticated user.' It distinguishes this from batch, feed, list, and count notification siblings even without naming them, because 'single' and 'by id' clearly signal the lookup operation. It is not a mere restatement of the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: call this when you have a notification id and need exactly one notification for the current user. It also gives a useful prerequisite and failure mode, the 404 when Notification Center is not enabled. However, it never explicitly contrasts this with alternatives like getNotificationBatch, getNotificationFeed, listNotifications, or getUnreadNotificationCount, so routing guidance 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.

getNotificationBatchGet Notification BatchA
Read-onlyIdempotent
Inspect

Get a single notification batch by id for the authenticated user, with per-type live-member counts, unread count, and worst severity. Serves cold deep links and sidebar retention for batches the caller can no longer see in the feed. Counts every live member by default; the optional type/severity/minSeverity filters narrow them to matching members only, exactly as the feed narrows a batch row it returns under the same filters. Requires the Notification Center feature; returns 404 when it is not enabled for the team, the batch does not exist, it belongs to another recipient/team, or no live member matches the given filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe notification batch's unique identifier
typeNoCount only live members of this type. Omit to count every live member.
agentsNoWhen 'mine', 404 unless the batch's agent is one the authenticated user created. Pass it alongside the feed's My agents filter so a retained batch cannot come back narrowed on type and severity but not on ownership.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
severityNoCount only live members with exactly this severity. Mutually exclusive with minSeverity. One of: info, warning, critical, success.
minSeverityNoCount only live members at or above this urgency. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, the description discloses important non-obvious behavior: it requires the Notification Center feature, and returns 404 in four distinct cases, including the subtle case where no live member matches the given filters. It also clarifies the default counting behavior versus filtered counting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three dense sentences with no filler. It leads with the core action and result, then explains filtering semantics, then error conditions. Each sentence carries meaningful behavioral or contextual information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with six parameters and no output schema, the description is thorough: it identifies the output components, explains filter behavior and defaults, states ownership/team constraints, lists all relevant 404 cases, and clarifies the feature prerequisite. Nothing an agent needs to select or invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already well documented. The description adds value by explaining that type/severity/minSeverity narrow the live-member counts rather than changing which batch is returned, and that counts include every live member by default. It does not deeply annotate agents or team_id because the schema already covers them well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get a single notification batch by id') and details the returned derived values: per-type live-member counts, unread count, and worst severity. It also positions the tool against the feed by stating it serves batches the caller can no longer see there, which distinguishes it from getNotificationFeed and getNotificationCounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when this tool is used: for cold deep links and sidebar retention of batches that are no longer visible in the feed. It does not explicitly name sibling tools or give a 'use X instead when...' rule, but the context signals and 'feed' references make the intended usage reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getNotificationCountsGet Notification CountsA
Read-onlyIdempotent
Inspect

Per-type notification counts for the authenticated user's current team. Narrow with unread, important, and with either severity (counts only that exact severity) or minSeverity (counts that urgency and above) — the two are mutually exclusive and a request carrying both is rejected with 400. Pass the same filters the feed is showing, so the counts describe the list the reader would land on. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentsNoWhen 'mine', only count notifications for agents the authenticated user created (plus connection_broken, which is always counted), so the counts match a feed filtered the same way.
unreadNoIf true, only count unread notifications.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
severityNoOnly count notifications with exactly this severity, so the counts match a feed filtered the same way. Mutually exclusive with minSeverity.
importantNoIf true, only count notifications pinned to Important for you: unresolved, undismissed connection_broken rows you can reconnect yourself. Use it to size the sidebar alert without paging the list.
minSeverityNoOnly count notifications at or above this urgency, so the counts match a feed filtered the same way. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses additional behavioral traits: it requires the Notification Center feature and returns 404 when not enabled, and it rejects requests with both severity and minSeverity with a 400. It also explains that certain filters (important) have specific counting semantics, adding transparency beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense. Every sentence contributes distinct value: purpose, filter usage, mutual exclusion, feed alignment, and error conditions. It avoids redundancy and is well-structured, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description provides a reasonable expectation of the response ('per-type notification counts'). It also covers error cases (400, 404) and parameter relationships. It does not specify the exact response structure (e.g., map vs. list), but this is a minor gap and the tool's purpose is sufficiently clear for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers 100% of parameters with descriptions, and the tool description reinforces and extends this by linking filters to feed behavior ('so the counts match a feed filtered the same way') and adding usage context for 'important' ('size the sidebar alert without paging the list'). This adds meaningful cross-parameter and real-world semantic value beyond the individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Per-type notification counts for the authenticated user's current team.' It specifies the resource (notification counts), the action (get/count), and the scope (per-type, current team). This unambiguously distinguishes it from feed/list tools and makes its purpose immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical guidance on when to use the tool, such as 'Pass the same filters the feed is showing, so the counts describe the list the reader would land on' and 'Use it to size the sidebar alert without paging the list.' It also explains mutual exclusions and error conditions. It does not explicitly name alternative tools, but the context makes appropriate usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getNotificationFeedGet Notification FeedA
Read-onlyIdempotent
Inspect

List the notification feed for the authenticated user's current team, most recent activity first. Each item is either an individual notification or a notification batch (a per-agent group of job_issue/eval_issue/job_done/schedule_issue notifications). Filter with type, unread, and either severity (exact match) or minSeverity (threshold; the two are mutually exclusive); paginate with limit/cursor. Either severity filter also narrows a surfaced batch's counts to its qualifying members, and hides a batch with no qualifying live member. The feed is eventually consistent — a batch's counts can lag a concurrent write by one page fetch. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly return individual notifications of this type and batches with at least one live member of it.
limitNo
agentsNoWhen 'mine', only return notifications for agents the authenticated user created. connection_broken notifications are always returned regardless, because they are not about an agent: a broken connection is only notified to the people who can act on it or escalate it, so filtering by agent authorship would hide it from the reader it was addressed to.
cursorNo
unreadNoIf true, only return unread individual notifications and batches with at least one unread live member.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
severityNoOnly return individual notifications with exactly this severity, and batches with at least one live member of it. A batch's counts then describe only those members. Mutually exclusive with minSeverity. One of: info, warning, critical, success.
minSeverityNoOnly return individual notifications at or above this urgency, and batches with at least one live member at or above it. A batch's counts and worst severity then describe only its members at or above the threshold. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the call read-only, idempotent, and non-destructive, and the description adds substantial runtime behavior beyond that: batch grouping semantics, severity filters narrowing batch counts and hiding empty batches, eventual consistency with counts lagging by one page fetch, and a 404 when the feature is disabled. This is excellent 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well organized: it starts with what the tool returns, then covers item composition, filtering and pagination, batch-count effects, and operational caveats. Every sentence earns its place, and there is no redundant restatement of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and a complex batch/feed model, the description covers all operationally important aspects: scope, ordering, item types, filters, pagination, batch behavior, eventual consistency, and feature availability. An agent has enough context to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents most parameters well (75% coverage). The description adds value by summarizing the filter model, making the exact-match vs threshold distinction and mutual exclusivity of severity and minSeverity explicit, and identifying limit/cursor as the pagination mechanism, which the schema leaves undescribed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a concrete action and resource: list the authenticated user's current-team notification feed, most recent activity first, and it explains that items are individual notifications or batches. However, it does not explicitly differentiate itself from closely related siblings like listNotifications, getNotificationBatch, or getNotificationCounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong contextual guidance: it targets the current team's feed, supports filters and pagination, and warns that the Notification Center feature must be enabled or the call returns 404. It does not explicitly say when to use this tool instead of the sibling notification tools, so it lacks explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrgInsightsHeadlineGet Org Insights HeadlineA
Read-onlyIdempotent
Inspect

Get org-wide headline insight KPIs (run totals, success rate, distinct active agents and users) aggregated across every team in the organization. Requires an organization Admin, Executive, or Owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization's unique identifier
endDateNoEnd of the aggregation window (ISO 8601 datetime, exclusive). Defaults to now; clamped to now.
startDateNoStart of the aggregation window (ISO 8601 datetime). Defaults to 30 days ago; clamped to at most 365 days ago.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and destructiveHint=false annotations already covering safety, the description adds useful behavioral context: aggregation across every team in the organization and the role gate. It does not contradict the annotations and provides value beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler: the first sentence states the action, scope, and output KPIs, and the second states the access requirement. Important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only KPI retrieval tool with no output schema, the description covers what is returned, the aggregation scope, and role requirements, while parameters are fully documented in the schema. It is complete enough for an agent to call correctly, though it could add a pointer to related getOrgInsights* tools for fuller context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents orgId, startDate, and endDate including defaults and clamping behavior. The description does not add parameter-level 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get org-wide headline insight KPIs' and enumerates the exact metrics returned (run totals, success rate, distinct active agents and users), making the core purpose unmistakable. However, it does not explicitly differentiate from sibling tools like getOrgInsightsMetrics or getOrgInsightsUsageChart, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The role requirement (Admin, Executive, or Owner) gives a clear prerequisite, and the org-wide scope implies when this tool is appropriate. It does not name alternatives or state when to prefer getOrgInsightsMetrics or getOrgInsightsUsageChart, so usage guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrgInsightsMetricsGet Org Insights MetricsA
Read-onlyIdempotent
Inspect

Get org-level insights metrics (runs, assignments, schedules) broken down per team across the organization. Requires an organization Admin, Executive, or Owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization's unique identifier
endDateNoEnd of the aggregation window (ISO 8601 datetime). Defaults to now; clamped to now.
startDateNoStart of the aggregation window (ISO 8601 datetime). Defaults to 7 days ago; clamped to at most 365 days ago.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior, lowering the burden on the description. The description adds meaningful context by specifying the role requirement and the per-team breakdown behavior, which is not fully captured by annotations. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core purpose and metric categories, then adds the role requirement. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent tool with three well-documented parameters and no output schema, the description provides sufficient context: what data is included, how it is grouped, and who is allowed to call it. It does not explain the return format, but the annotations and schema already cover safety and parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents orgId, startDate, and endDate with descriptions. The tool description does not add much about parameter semantics beyond reinforcing that these are org-level metrics aggregated per team. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: get org-level insights metrics covering runs, assignments, and schedules, broken down per team. It conveys what the tool does without ambiguity, though it does not explicitly differentiate itself from closely related siblings like getOrgInsightsHeadline or getOrgInsightsUsageChart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when this tool is appropriate: org-level insights metrics aggregated per team across the organization. It also includes an important usage restriction by requiring an Admin, Executive, or Owner role. It does not explicitly discuss alternatives, but the context is strong enough for an agent to select this tool for org-wide metrics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrgInsightsUsageChartGet Org Insights Usage ChartA
Read-onlyIdempotent
Inspect

Get org-level run-volume buckets (scheduled vs on-demand) at day/week/month granularity across the organization. Requires an organization Admin, Executive, or Owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization's unique identifier
endDateYesEnd of the chart window (ISO 8601 datetime). Clamped to now.
timezoneNoIANA timezone for bucket boundaries (e.g. America/New_York). Defaults to UTC.
startDateYesStart of the chart window (ISO 8601 datetime). Clamped to at most 365 days ago.
granularityYesBucket size: day, week, or month

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds role requirements and clarifies the data scope, but does not mention any side effects (none exist) or return format, which is acceptable given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that immediately conveys the tool's purpose without unnecessary fluff, effectively front-loading the key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool without an output schema, the description provides the essential context (role, data type, granularity). It does not elaborate on return formatting, but that is not critical for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all parameters (100% coverage) with clear explanations for orgId, startDate, endDate, timezone, and granularity. The description does not add extra parameter-specific details beyond the schema, but the baseline is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves run-level usage buckets (scheduled vs on-demand) with granularity options, and distinguishes it from sibling insights tools by specifying the exact data returned and required role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While it does not explicitly mention alternatives, the description implies this is the go-to for org-wide usage charts and notes the role requirement, providing sufficient guidance for typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getProfileGet ProfileA
Read-onlyIdempotent
Inspect

Get the profile of the authenticated user (the owner of the API key).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about authentication scope ('the owner of the API key') but does not describe the return shape or any additional behavior, though none is strictly necessary.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no wasted words. The key information—what is returned and whose profile—is front-loaded and immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only getter, the description sufficiently explains the target resource and authentication context. It does not describe the profile fields returned, but since there is no output schema and invocation requires no inputs, the description is adequate for correct tool use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema leaves nothing undocumented. The description adds no parameter details, but none are needed; the baseline of 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get') and resource ('profile of the authenticated user'), and clarifies that the subject is the API key owner. This clearly distinguishes it from other getters like getTeam or getAgent, which target different entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this tool is for the authenticated user's own profile, not any other user or team. It does not explicitly name alternatives, but no closely competing sibling exists for fetching one's own profile, so the usage context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPulseDashboardGet Pulse DashboardA
Read-onlyIdempotent
Inspect

Get a Duvo Pulse dashboard's metadata and generation status. When status is completed and html_code_present is true, fetch the rendered HTML from GET /artifacts/{artifactId}/render; the conversation is served by GET /artifacts/{artifactId}/messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive safety profile. The description adds useful behavioral context by revealing that the tool only returns metadata/status, not the rendered HTML, and by specifying the two follow-up endpoints. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences front-load the core purpose and then provide the conditional follow-up actions. There is no filler or redundant repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with no output schema, the description names the key result fields (status, html_code_present) and tells the agent what to do next, which is enough to invoke it correctly and handle the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to help with artifactId, but it never explicitly defines it. The path template /artifacts/{artifactId}/... and the phrase 'a Duvo Pulse dashboard' imply artifactId identifies the dashboard, which is sufficient for this single simple UUID parameter but leaves the documentation gap to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving a Duvo Pulse dashboard's metadata and generation status. This clearly separates it from siblings like getPulseDashboardHtml and getPulseDashboardPdf, which fetch rendered artifacts rather than metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable context by explaining that once status is completed and html_code_present is true, the agent should move to the render endpoint, and that messages come from a separate endpoint. It does not explicitly name sibling tools as alternatives, but the workflow is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPulseDashboardAttachmentDownloadUrlGet Pulse Dashboard Attachment Download UrlA
Read-onlyIdempotent
Inspect

Mint a short-lived presigned URL to download or preview a file attached to a Duvo Pulse dashboard message. Returns 404 once the dashboard's sandbox has expired and the file is gone (about 12 hours).

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
attachmentIdYesThe attachment to mint a download URL for

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and idempotent, and the description adds meaningful behavioral detail beyond that: the URL is short-lived, and the tool returns 404 after the dashboard sandbox expires in about 12 hours. This gives an agent clear expectations about failure modes and URL lifetime.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the expiration/404 behavior as useful secondary detail. There is no filler, repetition, or unnecessary restating of what the schema and annotations already provide.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter URL-minting tool with read-only and idempotent annotations, the description covers purpose, expiry, and the key failure mode. It does not specify how to obtain artifactId/attachmentId or describe the success response, but the return value is strongly implied and no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: attachmentId has a description, artifactId does not. The description provides useful domain context ('dashboard', 'attachment') that helps infer the roles of both parameters, but it does not explicitly explain artifactId or how the two IDs relate, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise operation ('Mint a short-lived presigned URL') and a specific resource ('a file attached to a Duvo Pulse dashboard message'), which clearly distinguishes it from generic file download tools. It doesn't explicitly name sibling tools, but the domain scoping is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to download or preview a file attached to a Duvo Pulse dashboard message' establishes a clear use case, and the context is enough to differentiate from upload, export, or dashboard-level download tools. It does not mention alternatives or exclusions, 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.

getPulseDashboardHtmlGet Pulse Dashboard HtmlA
Read-onlyIdempotent
Inspect

Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds meaningful non-obvious behavior beyond annotations: the 404-until-generation constraint and the explicit text/html response type. This is valuable context for an agent deciding whether and when to call 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the 404 caveat is a concise, high-value behavioral detail that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only HTML fetch, the description covers the essential non-obvious details: response content type and the 404-before-generation behavior. It is mostly complete, though explicit sibling routing and a direct explanation of artifactId would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes artifactId as a required UUID with a pattern but provides no description. The tool description never names or explains the parameter, so with 0% schema description coverage it does not compensate. The phrase 'a Duvo Pulse dashboard's rendered HTML' implies artifactId identifies the dashboard, but this is left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Serve' and the resource: a Duvo Pulse dashboard's rendered HTML document, with the content type 'text/html, not JSON'. This distinguishes it from JSON-returning getters, but it does not explicitly differentiate it from close siblings like getPulseDashboardVersionHtml or exportPulseDashboardHtml.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a useful temporal usage condition: it will 404 until the first generation turn has produced HTML, implying it should be called after generation. However, it provides no explicit guidance about when to choose this tool over version-specific or export-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPulseDashboardPdfGet Pulse Dashboard PdfA
Read-onlyIdempotent
Inspect

Render a Duvo Pulse dashboard to a PDF document (application/pdf, not JSON). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNolight
artifactIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: it documents the PDF MIME type, the state-dependent 404, and the 409 for unsupported openui dashboards. This is valuable because it warns the agent about preconditions and limitations 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary purpose is front-loaded, and the second sentence efficiently delivers the only two error conditions an agent needs to know.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only rendering tool with annotations covering safety, the description is complete: it specifies the output format, important error states, and the prerequisite generation condition. The schema handles parameter constraints, so no critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description needed to explain the parameters but does not mention artifactId or theme. The purpose makes artifactId inferable as the dashboard identifier, and the schema provides format constraints, but the description adds no direct parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource ('Render a Duvo Pulse dashboard to a PDF document') and explicitly distinguishes the output type ('application/pdf, not JSON'), which differentiates it from sibling tools like getPulseDashboardHtml. The purpose is immediately clear and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contextual conditions: the tool returns 404 until HTML has been produced and 409 for openui dashboards. This gives useful when/not-when guidance, though it does not explicitly name alternative tools for HTML or other output formats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPulseDashboardVersionHtmlGet Pulse Dashboard Version HtmlA
Read-onlyIdempotent
Inspect

Serve a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access).

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
revisionIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only/idempotent/non-destructive behavior. The description adds two useful facts beyond that: the response is text/html and the caller needs edit access. It doesn't discuss not-found or permission-error behavior, but those are secondary 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the resource and scope, and no filler. The format and access requirement are packed into parentheticals without bloating.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool, the description covers the resource, MIME type, and access requirement, and annotations cover safety. But the absence of any parameter-level guidance and explicit relationship to sibling HTML/PDF tools leaves minor selection ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description needed to explicitly map artifactId and revisionId to the dashboard and version. It gives only the general 'specific version's rendered HTML document for a Duvo Pulse dashboard' context, leaving the agent to infer which UUID is which.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Describes a specific action — serving the rendered HTML of a particular Duvo Pulse dashboard version — and adds format/scope ('specific version's', 'text/html'). The qualifier 'specific version's' implicitly separates it from current-version HTML retrieval, though it doesn't name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a prerequisite ('requires edit access') and implies the use case of retrieving one revision's HTML, but it doesn't state when to prefer this over getPulseDashboardHtml, getPulseDashboardPdf, or exportPulseDashboardHtml. There is no explicit exclusion or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getQueueGet QueueC
Read-onlyIdempotent
Inspect

Get a queue by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral detail beyond the annotation coverage, such as return format, not-found behavior, or whether the result includes nested queue configuration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words, matching the simplicity of the operation. It is arguably a restatement of the tool name, but it is appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read operation with safety annotations, this is nearly sufficient for correct invocation. However, with no output schema, the description does not convey what the response contains or what happens if the queue ID is not found, and it does not route between sibling queue tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the single queue_id parameter at 100% and already describes it as the queue's unique identifier. The description adds nothing about the parameter, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and identifies the resource ('queue') with lookup by ID, so the operation is immediately clear. It does not name sibling tools like listQueues or getQueueAggregationResult, but the basic purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to call this versus listQueues, createQueue, updateQueue, or other queue-related tools. The intended use is implied by the name, but the description provides no explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getQueueAggregationResultGet Queue Aggregation ResultA
Read-onlyIdempotent
Inspect

Read an aggregation definition's cached result.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
definition_idYesThe aggregation definition's identifier

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's burden is reduced. The description adds one useful behavioral fact beyond annotations: the result is 'cached,' meaning it may be stale relative to a freshly evaluated aggregation. It does not disclose what happens when no cached result exists or whether the result is returned in the same shape as an evaluation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single eight-word sentence with zero filler. The verb is front-loaded, and every word earns its place — 'cached' carries the key semantic weight that separates this from evaluation tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read operation with rich annotations (read-only, idempotent, non-destructive) and no output schema, the description is mostly sufficient. The notable gap is the unresolved relationship to the sibling cluster listingQueueAggregations, evaluateQueueAggregation, and refreshQueueAggregation — an agent must infer when the cached result is the right choice versus those alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both queue_id and definition_id have type, format, pattern, and descriptive text in the schema. The description adds no new parameter information, so the baseline of 3 applies — the schema carries the full load and does so adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Read') and resource ('an aggregation definition's cached result'), which is clear and unambiguous. The qualifier 'cached' hints at a distinction from the sibling tools evaluateQueueAggregation and refreshQueueAggregation, but it does not explicitly name them, so differentiation is implied 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'cached' implies this tool is for retrieving a precomputed result rather than computing or refreshing one, giving an implied usage context. However, there is no explicit when-to-use guidance, no mention of alternatives like evaluateQueueAggregation for fresh results or refreshQueueAggregation to recompute, and no exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getQueueJsonSchemaGet Queue Json SchemaA
Read-onlyIdempotent
Inspect

Get a queue's Case schema settings: whether it requires typed cases, and the schema it validates them against.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description is consistent with them. The description adds the useful context of exactly what payload the read exposes, but it does not disclose edge behaviors such as what is returned when no schema is attached. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. The verb and resource lead, and the colon-delimited specifics ('whether it requires typed cases, and the schema it validates them against') earn their place by clarifying the return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read with strong annotations and no output schema, the description adequately covers what the tool does and what it returns. Minor gaps remain, such as behavior when no schema is attached, but nothing essential blocks correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with queue_id documented as 'The queue's unique identifier' plus uuid format and pattern constraints. The description adds no parameter detail beyond the schema, which is acceptable given the baseline of 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description has a specific verb (Get), a specific resource (a queue's Case schema settings), and precise return semantics (typed-case requirement and validation schema). It is clearly distinguishable from mutation siblings like attachQueueJsonSchema, replaceQueueJsonSchema, and updateQueueJsonSchemaSettings, though it does not explicitly name any sibling for contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: an agent can infer this tool is for retrieving a queue's case-schema configuration. However, there is no explicit guidance about when to prefer this over closely related tools such as getQueue, listQueues, or the queue-schema mutation tools, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRevisionGet RevisionC
Read-onlyIdempotent
Inspect

Get a revision by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
build_idYesThe build's unique identifier

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover the safety profile. The description adds no behavioral context beyond the basic read operation—it does not mention return behavior, error cases, or the composite nature of the identifier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no filler and the core action is front-loaded. It earns its place without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should clarify what the returned revision looks like and how agent_id plus build_id map to a revision. The description leaves this ambiguous, and the 'by ID' wording is not helpful given the two required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents agent_id and build_id clearly. The tool description adds no parameter meaning and its phrase 'by ID' could even mislead an agent into expecting a single revision_id parameter that does not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Get') and the resource ('a revision'). However, it does not differentiate revision from related concepts like skill revisions or agent revisions, and 'by ID' is imprecise because the schema requires both agent_id and build_id rather than a single revision ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus sibling tools such as listAgentRevisions, getRun, or getSkillRevision. There is no mention of intended context, prerequisites, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRevisionCaseQueueSetupGet Revision Case Queue SetupA
Read-onlyIdempotent
Inspect

Check that this build's case-queue integration slots are wired up correctly. Returns, per case-queue-producer/consumer slot, how many queues are linked, plus whether any queue is available to bind (scoped to the agent's automation on a migrated team, team-wide otherwise). A slot with linked_queue_count of 0 is attached but points at no queue and will fail at runtime — link a queue with replaceRevisionIntegrationQueues before starting work.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive safety profile. The description adds substantial behavioral detail beyond that: per-slot queue counts, queue availability scoping based on team migration state, and the runtime failure implication of zero linked queues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose first, return semantics second, actionable failure scenario third. The description is front-loaded and contains no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description communicates the return contents and even names a field (linked_queue_count). For a read-only diagnostic tool with only two required parameters, an agent has enough context to call it correctly and understand the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents agent_id and build_id with 100% coverage, though the field descriptions are only 'Agent ID' and 'Build ID'. The tool description references 'this build's' and 'agent's automation' but does not add meaningful parameter-level semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: checking whether a build's case-queue integration slots are wired correctly. It is specific about the resource (case-queue producer/consumer slots), the verb (Check), and the return shape, which distinguishes it from siblings like listRevisionIntegrationQueues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to check before starting work and tells the agent what to do if a slot has linked_queue_count of 0: use replaceRevisionIntegrationQueues to link a queue. This gives both a clear when-to-use condition and a concrete alternative action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRunGet RunA
Read-onlyIdempotent
Inspect

Get information about an agent run. Can be polled to check status.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run's unique identifier

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool readOnly, idempotent, and non-destructive. The description adds value by explaining that repeated polling for status is expected, which is a behavioral trait not fully captured by those annotations. It does not describe output fields, but the annotations cover the safety profile well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler: the first states the tool's purpose, and the second states the polling use case. The key information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only, idempotent tool, the description is adequate: an agent knows what the tool does and that it can be polled for status. It does not specify return fields or error behavior, but the low complexity and strong annotations make those omissions acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, run_id, is fully documented in the schema with format, pattern, and description ('The run's unique identifier'), so schema coverage is 100%. The description does not add parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get information about an agent run.' It also adds a distinguishing behavior, 'Can be polled to check status,' which separates it from listRuns (plural listing) and getRunEvaluation (evaluation-specific). This is clear enough to identify the tool among a very large sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Can be polled to check status' gives a clear usage context: call this repeatedly to monitor a run's progress. It does not explicitly name alternatives or exclusions, but the intended polling pattern is evident from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRunEvaluationGet Run EvaluationA
Read-onlyIdempotent
Inspect

Get the latest evaluation analysis for a specific agent run (Run).

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe run's unique identifier (Run ID)
agentIdYesThe agent's unique identifier (Agent ID)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'latest' recency behavior and run scoping, but does not disclose output shape or absence behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. The main action and resource are front-loaded, and every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with complete parameter documentation and safety annotations, the description is adequately complete. It identifies the object type, the required scope, and the recency of the result; the absence of an output schema is partially mitigated by the clear resource description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully described in the schema with unique identifiers and UUID formats, so schema coverage is 100%. The description does not add parameter-level meaning beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and a specific resource ('latest evaluation analysis') scoped to a particular agent run. This clearly distinguishes it from related tools like getRun (run metadata) and getEvalScores (evaluation scores).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when the latest evaluation analysis for a specific run is needed, but it provides no explicit guidance about alternatives or when not to use this tool. There are no exclusions or comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSecretGet SecretB
Read-onlyIdempotent
Inspect

Get an env-var secret by id. Returns metadata and env var keys; secret values are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Beyond that, the description adds valuable context: the tool returns metadata and env var keys, and that values are never exposed — a security guarantee an agent needs before trusting the tool's output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The verb+resource is front-loaded, and the second sentence earns its place by disclosing both return contents and a critical security property.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter get-by-id tool with no output schema, the description covers the return shape but omits error/not-found behavior, id provenance, and any differentiation from similarly named read tools like getCredential. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It confirms lookup is 'by id,' but adds nothing about what an env-var secret id is, how to obtain it (e.g., via listSecrets), or what the uuid parameter semantically refers to beyond the schema's format constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get an env-var secret by id.' The qualifier 'env-var secret' distinguishes it from sibling tools like getCredential and getConnection, though it doesn't name them explicitly. The second sentence sharpens scope by defining exactly what is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need secret metadata or env var keys) but gives no explicit selection criteria, no exclusions, and names no alternatives. The 'secret values are never exposed' line is more a behavioral constraint than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSkillFileContentGet Skill File ContentB
Read-onlyIdempotent
Inspect

Get the content of a file in a skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the file inside the skill, e.g. SKILL.md.
skill_idYesSkill ID.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, idempotent, non-destructive operation, so the safety profile is well covered. The description is consistent with those annotations and adds the 'inside a skill' scope, but it does not disclose encoding, error behavior, or how paths are resolved beyond the parameter schema. This is acceptable given the strong annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler and the action is stated up front. It is slightly redundant with the title, but it is efficient and appropriately sized for a simple read operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only tool with complete schema documentation, the description is mostly sufficient. However, the lack of any guidance distinguishing it from getSkillRevisionFileContent and other skill-file tools leaves a meaningful gap for an agent selecting among many similar operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both skill_id and path documented, including an example for path. The tool description itself adds no parameter semantics beyond the schema, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a resource ('file content'), and a domain ('a skill'), so the core operation is clear. It stops short of a 5 because it does not explicitly differentiate the tool from closely related siblings like getFileContent or getSkillRevisionFileContent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to choose this tool over alternatives such as getSkillRevisionFileContent, getFileContent, or listSkillFiles. There is no mention of which skill version is being read or when revision-specific access would be more appropriate, so the agent is left to infer usage from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSkillRevisionFileContentGet Skill Revision File ContentB
Read-onlyIdempotent
Inspect

Get the content of a text file in a skill revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the file inside the revision, e.g. SKILL.md.
skill_revision_idYesSkill revision ID.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a safe, idempotent, read-only operation, and the description is consistent with them. It adds modest context by specifying that only text file content is returned, but it does not disclose any other behavior such as path constraints, size limits, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. It names the action, resource, and scope efficiently, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with only two required parameters and a clear schema, the description is largely sufficient. It could be more complete by explicitly routing the agent away from the similar getSkillFileContent tool, but the core calling context is adequately covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description reinforces that the file must be a text file but does not add meaningful per-parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get the content') and the resource ('a text file in a skill revision'), which is specific enough to convey the tool's core function. It distinguishes itself from generic file tools by scoping to a skill revision, though it does not explicitly contrast with the closely named sibling getSkillFileContent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for reading files within a specific skill revision, but it gives no explicit guidance on when to choose this tool over alternatives like getSkillFileContent or getFileContent. There is no mention of when not to use it or which sibling handles current-version versus revision-specific files.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getTeamGet TeamA
Read-onlyIdempotent
Inspect

Get a team by ID. The caller must be scoped to the requested team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds authorization context about team scoping, which is useful behavioral information beyond the annotations. It does not mention error cases like 404 or invalid team access, but the auth constraint is the key extra detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the core action front-loaded and no unnecessary words. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and rich schema annotations, the description is nearly complete. It could explicitly mention the return value shape or not-found behavior, but 'Get a team by ID' sufficiently implies the successful result for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the team_id parameter has a detailed explanation of API-key vs OAuth behavior, fallback semantics, and rejection conditions. The tool description itself adds little parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Get a team by ID.' It is distinct from list-style siblings like listMyTeams and listOrgTeams because it specifies fetching a single team by ID, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful scoping context: 'The caller must be scoped to the requested team.' The parameter description further clarifies when to omit or pass team_id based on API-key vs OAuth authentication. It does not explicitly mention alternative tools or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getUnreadNotificationCountGet Unread Notification CountA
Read-onlyIdempotent
Inspect

Get the unread notification count for the authenticated user's current team. Each notification batch with unread members counts as 1, regardless of its member count. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: the feature dependency, the 404 error condition, and the non-obvious counting semantics for notification batches. This gives the agent useful expectations about the operation's behavior and edge cases without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core purpose, then adds the essential counting rule, and finally the feature prerequisite and error behavior. Every sentence contributes meaningful information that an agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple tool with one optional parameter and no output schema. The description fully covers what count is returned, how it is calculated, the scope (current team), and a key failure mode (404 when Notification Center is not enabled). No critical information for correct invocation is missing, and the absence of an output schema does not create ambiguity because the return value is a count implied by the tool's name and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the only parameter (team_id) with a detailed description including UUID format, fallback behavior, and OAuth guidance, so schema description coverage is 100%. The tool description adds context about 'current team' and counting semantics, but it does not add new parameter-level details beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get'), a specific resource ('unread notification count'), and a clear scope ('for the authenticated user's current team'). It also clarifies the counting unit ('Each notification batch with unread members counts as 1'), which distinguishes this count from a raw member-level or item-level count. This is more specific than the tool name alone and gives an agent a precise understanding of what is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear functional context: it targets the authenticated user's current team, and requires the Notification Center feature or it returns 404. This helps an agent decide when the tool is applicable. It does not explicitly name alternatives such as getNotificationCounts or listNotifications, but the usage context is clear enough that an agent can infer when this tool is the intended one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inviteClarityMeetingNotetakerInvite Clarity Meeting NotetakerAInspect

Invite the in-meeting notetaker bot (Recall.ai) to a live meeting; the recording lands as a 'meeting' capture on the process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
meetingUrlYes
extraCaptureRequestIdNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a mutating, non-destructive, non-idempotent operation. The description adds a concrete behavioral outcome—the recording becomes a 'meeting' capture on the process—and identifies the external bot vendor (Recall.ai). This goes beyond annotation defaults without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler. The verb, resource, target, and postcondition are front-loaded, making the definition easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core action is understandable and no output schema exists, but context is incomplete: the optional parameter is unexplained, meeting URL requirements are vague, and there is no mention of what the caller receives after a successful invite. It is minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate. It adds 'live meeting' context for meetingUrl and relates the action to a process, but it does not explain meetingUrl's accepted formats, how extraCaptureRequestId is used, or what values are valid for each parameter. Most parameter semantics are left unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Invite') with a precise resource ('in-meeting notetaker bot (Recall.ai)') and states the outcome ('recording lands as a 'meeting' capture'). It is clear enough to identify the action, though it does not explicitly contrast with the similarly named inviteClarityOrganizationNotetaker sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the context for use: inviting the notetaker to a live meeting. However, it gives no explicit alternative conditions, exclusions, or guidance for choosing between this and inviteClarityOrganizationNotetaker, so the when/not-when distinction 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.

inviteClarityOrganizationNotetakerInvite Clarity Organization NotetakerAInspect

Invite the in-meeting notetaker bot (Recall.ai) to a live meeting; the recording lands as an organization Clarity interview

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
titleNo
meetingUrlYes
extraCaptureRequestIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the tool invokes an external Recall.ai bot and that the resulting artifact is stored as an organization Clarity interview. This adds useful behavioral context. It does not mention side effects like the bot visibly joining the meeting or duplication risk, but the annotations already address idempotency and destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence communicates the action, the external system, and the resulting artifact with no wasted words. The core outcome is front-loaded and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple invitation action, but it omits optional-parameter semantics, gives no clue about the return value, and does not differentiate this tool from inviteClarityMeetingNotetaker. An agent could still invoke it correctly, but only by relying on parameter names and the sibling list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It only hints at the meaning of orgId ('organization') and meetingUrl ('live meeting'), while the optional title and extraCaptureRequestId parameters are left unexplained. An agent would have to infer their purpose from parameter names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Invite the in-meeting notetaker bot (Recall.ai) to a live meeting') and a precise result ('the recording lands as an organization Clarity interview'). The word 'organization' helps distinguish this from the sibling inviteClarityMeetingNotetaker even though that alternative is not explicitly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: use this when a live meeting should be recorded into an organization-level Clarity interview. However, it does not explicitly state when not to use it, mention prerequisites, or point to the near-identical sibling inviteClarityMeetingNotetaker, leaving the agent to infer the selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inviteOrgMemberInvite Org MemberAInspect

Invite a person to an organization you administer, optionally assigning them to a team in that organization. Requires an organization Admin, Executive, or Owner role. You cannot grant a role higher than your own.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
emailYes
orgIdYesOrganization ID
teamIdNo
sendEmailNoEmail the invitation to the recipient. `false` always suppresses the email. When omitted, the legacy opt-in applies instead: the email is sent only if the deprecated `frontendUrl` is present. Omit both to create the invitation without notifying anyone.
frontendUrlNoDeprecated. Use `sendEmail` instead. Kept because its presence is the legacy opt-in for sending the invitation email; the value never sets the link host, which is always the server's configured frontend URL.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-readonly, non-idempotent, non-destructive operation. The description adds useful behavioral constraints about required roles and role hierarchy, but it does not disclose other side effects such as whether an invitation email is sent or whether the invite creates a pending state. The sendEmail/frontendUrl schema descriptions cover email behavior partially.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no fluff. The core purpose is front-loaded, and the permission constraints follow naturally without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential decision factors: what the tool does, who can use it, and a key role constraint. With no output schema, it could have mentioned the result or side effects more explicitly, but the combination of description and schema provides enough context for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, but the tool description adds meaning by clarifying that teamId is optional and by explaining role hierarchy constraints ('You cannot grant a role higher than your own'). The sendEmail and frontendUrl parameters already have detailed schema descriptions, so the description compensates reasonably for the params that lack schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Invite a person') and the resource (an organization you administer), plus the optional team assignment. It is specific enough to identify the tool's purpose, though it does not explicitly differentiate from sibling invite tools like createTeamInvite or bulkCreateTeamInvites.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: inviting someone to an organization the caller administers. It also provides crucial permission guidance by stating the required roles and the restriction that you cannot grant a role higher than your own, though it does not discuss alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listActiveClarityExportsList Active Clarity ExportsA
Read-onlyIdempotent
Inspect

List active (queued or running) Clarity export jobs for the current user

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds non-obvious behavioral context by scoping results to the current user and filtering to queued or running jobs, which is not captured by the annotations or input schema. It does not mention pagination or response details, but for a read-only list this 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly written sentence that front-loads the verb and resource and adds only the necessary status and scope qualifiers. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one optional, fully documented parameter and safety annotations already provided, the description and schema are sufficient for an agent to invoke the tool correctly. No output schema exists, but the return concept is clear from the name and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the team_id parameter is already thoroughly documented, including API key team pinning, omission behavior, and OAuth usage. The tool description adds no parameter-level detail, so it does not need to compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb ('List'), a specific resource ('Clarity export jobs'), and a clear scope ('for the current user'), while defining 'active' as 'queued or running'. This clearly distinguishes it from sibling tools like startClarityExport and getClarityExport.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you want to enumerate a user's active export jobs rather than starting a new export or fetching a single export. It does not explicitly name alternative tools or exclusion conditions, but the scope and status qualifier make the intended usage evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentCaseTriggersList Agent Case TriggersA
Read-onlyIdempotent
Inspect

List the case triggers configured for an agent. Each trigger automatically dispatches the agent to run cases added to a queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered without contradiction. The description adds domain context about triggers dispatching the agent to run queued cases, but does not disclose tool-specific behavior such as result shape, ordering, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the main action front-loaded; the second sentence explains the trigger mechanism without redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only list tool with annotations covering side effects, the description is nearly complete: it names the resource, the scope per agent, and the trigger semantics. It could mention the returned list shape or absence of pagination, but nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the only parameter agent_id is already described as the agent's unique identifier. The description adds no parameter-level semantics, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and a specific resource ('case triggers configured for an agent'), and differentiates from sibling list tools via the 'case' qualifier (e.g., listAgentTriggers, listAgentTriggerTypes). The added behavior, auto-dispatch on queue addition, clarifies what these triggers are.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: the tool is for viewing all case triggers belonging to an agent, and explains their queue-dispatch role. It does not explicitly name alternatives like listAgentTriggers or getAgentCaseTrigger or state when not to use them, 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.

listAgentFoldersList Agent FoldersB
Read-onlyIdempotent
Inspect

List all agent folders for the authenticated team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds minimal new behavioral context. It clarifies the scope ('all', 'authenticated team'), but does not disclose output shape, ordering, or pagination. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It conveys the action, resource, and scope in nine words, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one optional, well-documented parameter and annotations covering safety, the description and schema together provide enough to call it correctly. A small gap is the lack of any statement about the return value or whether the list is paginated, but this is minor for a list-all tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the team_id parameter already thoroughly documented including auth fallback behavior. The tool description adds no parameter-level detail beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific action 'List', the resource 'agent folders', and the scope 'for the authenticated team'. This clearly identifies the tool's function and distinguishes it from create/update/delete folder siblings, though it does not explicitly name an alternative tool for comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus related listing tools such as listAgents or listClarityFolders, or when to omit vs pass team_id. The only context is 'for the authenticated team', which implies a default team but offers no explicit selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentMemoryFilesList Agent Memory FilesB
Read-onlyIdempotent
Inspect

List the memory files stored for an agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description does not contradict these annotations, but it also adds no additional behavioral context such as whether file contents are included, whether results are paginated, or what metadata is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words or restatement of the tool name. Every word contributes to explaining what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only listing tool with strong annotations, the description is nearly sufficient. It does not describe the return shape or pagination, and there is no output schema, but an agent can reasonably infer that the tool returns a list of memory file references for the given agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the only parameter, agent_id, is documented as 'The agent's unique identifier.' The description adds no further meaning beyond the schema, so it meets the baseline but does not enrich parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'List the memory files stored for an agent.' It clearly conveys what the tool does and is specific enough to distinguish it from sibling tools like getAgentMemoryFile or listAgentFolders, though it does not explicitly differentiate itself by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as getAgentMemoryFile or other listAgent* tools. It implies the tool lists all memory files for one agent, but it does not state exclusions, prerequisites, or when a sibling would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentRevisionsList Agent RevisionsB
Read-onlyIdempotent
Inspect

List revisions for an agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of revisions per page (1-100, default 20)
offsetNoNumber of revisions to skip
agent_idYesThe agent's unique identifier

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the action itself, such as ordering of revisions, pagination behavior, or what data is included 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It communicates the core operation clearly and efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only list operation, the schema and annotations cover most invocation needs: the required agent_id and optional limit/offset are fully documented. The only minor gap is the lack of detail about revision ordering or return shape, which is not critical given the simple nature of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters documented including defaults and bounds. The description does not add additional semantic meaning beyond what the schema already provides, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List revisions for an agent.' It is not a bare tautology and is distinguishable from related tools like getRevision, createRevision, and promoteRevision. However, it does not explicitly differentiate itself from alternatives or add scope details beyond the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as getRevision, listSkillRevisions, or promoteRevision. There is no mention of when this is the appropriate call or any exclusions, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentsList AgentsB
Read-onlyIdempotent
Inspect

List agents for your team.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of agents per page (1-100, default 20)
offsetNoNumber of agents to skip
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
automation_idNoOnly return agents belonging to this automation.
include_schedulesNoInclude the authenticated user's schedules for each agent in the response. Schedules are per-user, so this only returns schedules the current user owns.false

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only the 'for your team' scope and does not discuss pagination, team fallback behavior, or the per-user nature of included schedules; with annotations covering safety, this is a minor gap rather than a serious one.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler or redundancy. It front-loads the core operation and remains appropriately concise for a straightforward list endpoint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with rich parameter descriptions and strong safety annotations, the description is mostly sufficient. It does not state that the result is paginated or that team_id is optional for API keys, but those details are already present in the schema, so the missing context is moderate rather than critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: all five parameters have descriptions, defaults, and constraints, including team_id's fallback behavior and include_schedules' per-user semantics. The tool description adds no parameter details, but because the schema carries the full burden, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'List' with the resource 'agents' and the scope 'for your team', making it clear this is a read-only collection operation. It is not a tautology and is distinguishable from create/update/delete agent tools, though it does not explicitly differentiate from sibling list tools such as listQueueAgents or getAgent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention that getAgent is for a single agent, that listQueueAgents is queue-scoped, or when team_id should be supplied. The statement only restates the purpose, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentSchedulesList Agent SchedulesA
Read-onlyIdempotent
Inspect

List the schedules you own on an agent. Returns only your own schedules, whoever you are. Callers with an elevated team role can read every member's schedules on the agent, including who created each one, via GET /agents/{agent_id}/schedules/all.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: results are scoped to the caller regardless of identity, and visibility widens with an elevated team role.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the ownership scoping rule front-loaded ahead of the elevated-role exception. Efficient, though the final sentence is dense with the raw endpoint path, which is slightly less readable than naming the sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter list tool with no output schema, the description covers who sees what and what fields the elevated variant adds (creator). It omits return shape and pagination details, but those gaps are minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (agent_id) and schema description coverage is 100%, so the schema fully documents it. The description adds no extra meaning 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List the schedules you own on an agent') and immediately bounds the scope to the caller's own schedules. It also implicitly distinguishes itself from listAllAgentSchedules by describing the elevated-role variant that returns every member's schedules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when this tool applies (you own the schedules, or you lack an elevated team role) and points to the broader alternative endpoint for elevated roles. It falls short of naming the sibling tool listAllAgentSchedules explicitly, requiring the agent to map the REST path to the MCP tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentSlackBoundWorkspacesList Slack Workspaces Bound To An AgentA
Read-onlyIdempotent
Inspect

List the Slack workspaces bound to an agent build that you can create channel triggers for. Creating a Slack channel trigger for any other workspace is rejected, so start here to pick a valid slack_team_id and integration_instance_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
build_idYesThe agent build (revision) whose bound connections to list

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond annotations: only workspaces bound to the agent build are valid, other workspaces are rejected, and the returned data includes slack_team_id and integration_instance_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary action is front-loaded, and the second sentence provides the critical usage constraint and the IDs to extract. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with two well-documented UUID parameters and comprehensive annotations, the description is largely complete. It explains purpose, validity constraints, and the key output fields needed for downstream trigger creation, though it does not describe the full response shape or pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that build_id selects the relevant agent revision, and it names the identifiers the caller needs to extract from the results, but it does not add substantial parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing Slack workspaces bound to an agent build, and ties it to a concrete downstream purpose (creating channel triggers). This clearly distinguishes it from related tools like listAgentSlackTriggers or createAgentSlackTrigger.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'start here' before creating a Slack channel trigger, because other workspaces are rejected. It clearly defines the selection condition, though it does not explicitly name sibling alternatives for adjacent operations like listing existing triggers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentSlackTriggersList Slack Channel TriggersA
Read-onlyIdempotent
Inspect

List the Slack channel triggers you own on an agent (Agent in the Duvo UI), oldest first. Each trigger's filter_config carries the watched channelId, channelName, Slack workspaceId, and matchRule. Capped at 100 triggers per agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral context beyond annotations: ordering ('oldest first'), the 100-trigger cap, and the specific filter_config fields returned (channelId, channelName, workspaceId, matchRule). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each contributing useful information: what is listed, what fields are returned, and the limit. The core action is front-loaded, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool, this description is complete. It covers scope, ordering, return-relevant fields, and the hard limit. With annotations covering safety/idempotency and the schema covering the parameter, nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents agent_id with a description and format, so baseline is 3. The description adds minor context by stating the list is per agent and owned by the caller, but it does not need to elaborate further given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List the Slack channel triggers you own on an agent.' It clearly distinguishes this from generic trigger listings by specifying Slack channel triggers and the ownership scope. The title reinforces the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool—when you need to list Slack channel triggers for an agent—through its clear resource scoping. However, it does not explicitly contrast it with related siblings like listAgentTriggers, listAgentTriggerTypes, or createAgentSlackTrigger, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentSuggestionsList Agent SuggestionsA
Read-onlyIdempotent
Inspect

List an Agent's suggestions. status=pending is the inbox; status=history is consumed/dismissed/auto-cleared. Reads lazily auto-clear stale pending items.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
statusNopending
agent_idYesThe Agent's unique identifier

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context beyond annotations by disclosing that the read 'lazily auto-clear[s] stale pending items,' which is a non-obvious behavioral trait. It does not contradict the annotations, though the auto-clear wording introduces slight ambiguity about whether actual mutation occurs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The core purpose is front-loaded, followed by the status semantics, and then the behavioral note about lazy auto-clearing. Each sentence contributes distinct information needed for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key domain semantics (status meanings), the lazy auto-clear behavior, and the annotations cover safety. With no output schema, the return format is not described, but list tools with sibling getAgentSuggestion provide enough context. Minor gap: pagination behavior of limit/offset is not explicitly connected to the list semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (agent_id documented), but the description compensates for the most semantically important parameter by explaining what the status enum values mean in domain terms ('inbox' vs 'consumed/dismissed/auto-cleared'). limit and offset are conventional pagination parameters that are self-explanatory, and agent_id is covered in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair, 'List an Agent's suggestions,' which clearly distinguishes this from sibling tools like getAgentSuggestion (single retrieval) and listAgents (different entity). It further disambiguates purpose by explaining the two status filter values, making the tool's intent unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance on when to use each status value: 'pending is the inbox; history is consumed/dismissed/auto-cleared.' This is actionable context for choosing the right filter. It does not explicitly name alternatives or exclusion conditions, but the status guidance provides sufficient usage direction for a list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentTriggersList Agent TriggersA
Read-onlyIdempotent
Inspect

List the trigger definitions the authenticated user owns on an agent (Agent in the Duvo UI). Triggers start a Run automatically when an external event fires (e.g. an email arrives or a Linear issue is created).

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context: only triggers the authenticated user owns are returned, and triggers start Runs on external events such as email arrivals or Linear issue creation. This goes beyond the structured fields without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the purpose front-loaded; the trigger definition and examples earn their place. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only list with rich annotations, the description is nearly complete: it names the resource, ownership scoping, and event semantics. It omits an explicit return-shape or pagination note and sibling differentiation, but these are minor for a simple list tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only agentId with a clear description and 100% coverage, so the schema carries the parameter meaning. The description's 'on an agent' loosely maps to agentId but adds no format or nuance beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the verb 'List' and the resource 'trigger definitions the authenticated user owns on an agent,' with a parenthetical clarifying 'Agent' as the Duvo UI entity. It does not explicitly distinguish itself from sibling tools listAgentCaseTriggers or listAgentSlackTriggers, leaving a small ambiguity about whether it returns all trigger types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus listAgentCaseTriggers, listAgentSlackTriggers, or listAgentTriggerTypes. The description explains what a trigger is but not when this generic listing is preferred, so the agent is left to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAgentTriggerTypesList Agent Trigger TypesA
Read-onlyIdempotent
Inspect

List the trigger types available for an agent, grouped by integration. Use the returned integration_slug and trigger_type values when creating a trigger.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value beyond those annotations by disclosing that results are scoped per agent ('available for an agent') and organized by integration, revealing return-structure traits not present in the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The primary action is front-loaded in the first sentence, and the second delivers actionable downstream guidance (`integration_slug`, `trigger_type`) that directly supports trigger creation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only, idempotent tool with complete schema coverage and safety annotations, the description is nearly sufficient: it names the key returned fields and their downstream use. The only gap is not explicitly disambiguating this from the crowded sibling set of trigger-related list tools, though 'trigger types' vs. configured triggers makes the distinction inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — agentId is fully documented with type, format, pattern, and description, so the schema carries the parameter-documentation burden. The description only marginally reinforces that results are scoped by agentId ('available for an agent') and adds no new parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('trigger types available for an agent'), and result shape ('grouped by integration'). It conveys that this is a reference catalog of available types rather than a list of configured triggers, which differentiates it semantically from siblings like listAgentTriggers and listAgentSlackTriggers, though it does not name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence tells the agent what to do with the output ('Use the returned `integration_slug` and `trigger_type` values when creating a trigger'), establishing this as a prerequisite lookup before createAgentCaseTrigger, createAgentSlackTrigger, or upsertAgentTrigger. It implies the usage context clearly but provides no explicit when-not-to-use guidance or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAllAgentSchedulesList All Agent SchedulesA
Read-onlyIdempotent
Inspect

List every team member's schedules on an agent, including who created each one. Requires an elevated team role; callers without one receive 403 and should use GET /agents/{agent_id}/schedules, which returns only the schedules they own.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context around authorization requirements, the 403 outcome, and that the response includes creator information. It could have provided more detail about response shape or pagination, but the read-only annotation lowers that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, both information-dense and front-loaded with the core behavior before the fallback guidance. There is no filler or repeated schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read-only tool, the description covers the operation, authorization requirement, error behavior, and the correct alternative for unauthorized callers. Nothing an agent needs to choose and invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, agent_id, is fully described in the schema with type, format, pattern, and a one-line description, giving 100% schema coverage. The tool description does not need to restate the parameter and adds little semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and scope: 'List every team member's schedules on an agent, including who created each one.' It also distinguishes itself from the sibling listAgentSchedules by explicitly covering all schedules rather than only owned ones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance, requiring an elevated team role, and names the alternative: callers without the role should use `GET /agents/{agent_id}/schedules`, which returns only schedules they own. This fully routes an agent to the correct tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAutomationsList AutomationsA
Read-onlyIdempotent
Inspect

List the team's automations, each with its live agent and queue counts. An automation is the workspace container an agent or queue belongs to on a team that has moved to Automations — its id is what POST /queues and POST /agents need as automation_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of automations per page (1-250, default 250)
offsetNoNumber of automations to skip
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context beyond that by stating that results include live agent and queue counts and by explaining the semantic role of an automation id. It does not disclose pagination behavior, but the schema covers the pagination parameters, so the added context is sufficient for a safe read-only 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first states the action and result shape, the second explains the domain concept and why the returned id matters. There is no filler, and the most actionable information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no output schema and three fully documented parameters, the description covers the return content (automations with agent and queue counts) and the key domain context (automation_id). It stops slightly short of explicitly stating the full response shape, such as id/name fields, but nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (limit, offset, team_id) are already fully documented in the schema. The description does not repeat parameter-specific details, and the automation_id explanation applies to the tool's output rather than to any parameter. Baseline 3 is appropriate because the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('the team's automations') and adds concrete detail: each automation comes with its live agent and queue counts. It also defines what an automation is and distinguishes it from agents/queues as a containing workspace, which differentiates it from sibling tools like listAgents and listQueues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool is useful: it identifies the workspace-container role of an automation and tells the caller that the automation id is required by POST /queues and POST /agents as automation_id. It does not explicitly name alternatives like getAutomation or state when not to use this tool, but the use case is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listAvailableClarityProcessLabelsList Available Clarity Process LabelsC
Read-onlyIdempotent
Inspect

List process tags available for a process.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNo
offsetNo
searchNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds only the scoping notion 'for a process' but does not explain what 'available' means, whether it includes already-assigned labels, what the response contains, or how pagination and search behave.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler or redundancy. It is front-loaded with the action and resource, though its brevity borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four parameters, zero schema descriptions, no output schema, and a close sibling tool, the description is too thin to be complete. The meaning of 'available', the role of the process id, and the optional parameters are all left undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate. It never explains the required 'id', the optional 'limit', 'offset', or 'search' parameters, leaving the agent without semantic guidance for any of the four inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('process tags available for a process'), which is enough to convey the core action. It does not explicitly distinguish itself from the sibling 'listClarityProcessLabels', so an agent could confuse the two without deeper inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus the closely named sibling 'listClarityProcessLabels' or related label tools like 'assignClarityProcessLabels'. No context or exclusions are provided, leaving the selection entirely to the agent's interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listCaseAttachmentsList Case AttachmentsA
Read-onlyIdempotent
Inspect

List the files attached to a case, oldest first. Includes attachments whose upload failed, so a missing source document is visible rather than silent.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds valuable non-obvious behavior beyond annotations: results are ordered oldest-first, and failed uploads are included so missing documents are visible. This is meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core purpose and ordering, then add a single high-value behavioral caveat about failed uploads. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the read-only annotations, 100% parameter schema coverage, and straightforward list operation, the description is complete enough. It covers ordering, the unusual inclusion of failed uploads, and aligns with the tool's obvious use case; no output schema exists, so return-shape documentation is not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both case_id and queue_id, so the baseline of 3 applies. The description adds no extra meaning about the parameters, neither queue_id's role nor any format details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a precise resource ('files attached to a case'), and adds ordering ('oldest first'). It also distinguishes itself from generic case tools and related attachment operations by calling out failed uploads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is clear: call this when you need the files attached to a case, including checking for missing or failed source documents. It does not explicitly name alternatives or when-not-to-use, but the scope statement is specific enough to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listCaseLabelsList Case LabelsA
Read-onlyIdempotent
Inspect

List all labels assigned to a case.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of labels per page (1-1000, default 1000).
offsetNoZero-based offset for pagination.
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the case-scoping behavior but does not mention pagination behavior despite the limit and offset parameters and the word "all" implying a complete result set. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler, clearly front-loading the core purpose. Every word contributes to understanding the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple and the schema covers parameters thoroughly, but the description lacks any mention of pagination or that the result may be limited by the default limit of 1000. With no output schema, "List all labels" could be slightly misleading without explicit note that pagination is controlled by limit/offset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds minimal value here; it implies case_id identifies the case but does not elaborate on queue_id's role or the pagination semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a specific verb+resource statement: "List all labels assigned to a case." It clearly identifies the operation (list), the resource (labels), and the scope (a specific case). This distinguishes it from sibling label-related tools like assignCaseLabels and unlinkCaseLabels, which denote mutations, and listQueueLabels, which targets a different scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need to retrieve labels for a given case, but it provides no explicit when-to-use guidance or exclusions. It does not name alternatives such as assignCaseLabels, unlinkCaseLabels, or listQueueLabels, leaving the agent to infer selection based solely on the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listCaseRunRecentMessagesList Case Run Recent MessagesA
Read-onlyIdempotent
Inspect

Return the latest qualifying messages (assistant text + tool calls) for a Run on a case, newest last. Used to populate the live body of an active Run card in the case Activity timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of qualifying messages to return. Defaults to 3, must be between 1 and 10.
run_idYesThe agent run's unique identifier
case_idYesThe case's unique identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only and idempotent behavior, and the description adds filtering and ordering details but does not disclose any side effects, auth requirements, or rate limits. It adds some behavioral context beyond annotations, but not substantial new transparency about 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, efficiently stating the operation's purpose and its intended use case. There is no redundant or filler content, and the essential information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides enough context for an agent to invoke the tool correctly: it specifies the resource, scope, ordering, and even the content type ('assistant text + tool calls'). However, it does not define the exact meaning of 'qualifying' messages, which could lead to ambiguous expectations, and no output schema is provided, leaving return format partially unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptive text (case_id, run_id, limit), so the description does not need to add parameter meaning. The baseline score of 3 applies because schema coverage is high and no additional parameter context is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation returns the latest qualifying messages for a run on a case, with a specific ordering (newest last). It also names the resource and scope, but does not explicitly differentiate from the similar sibling listRunMessages, leaving slight ambiguity about 'qualifying' criteria.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('Used to populate the live body of an active Run card in the case Activity timeline') but does not explicitly state when not to use it or contrast with alternative tools like listRunMessages. The context implies a specific scenario but lacks direct exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listCaseRunsList Case RunsA
Read-onlyIdempotent
Inspect

List Runs (agent runs) that have claimed or received handover of a case, newest first. Capped at 50 ownership events.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description correctly adds value beyond them: it discloses ordering ('newest first') and the hard limit ('Capped at 50 ownership events'). These are genuinely useful behavioral traits that the annotations do not express. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero wasted tokens. The core purpose is front-loaded, the parenthetical '(agent runs)' disambiguates terminology against sibling listRuns, and the second sentence adds two concrete behavioral facts (ordering, cap). Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool with rich annotations, this is nearly complete: purpose, scope, ordering, and limit are all stated. The only minor gap is that no output schema exists, so the return shape (what fields each run object contains) is left unspecified — but that is a modest omission for a straightforward list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents case_id ('The case's unique identifier'). The description adds no parameter-level meaning beyond what the schema provides, which matches the baseline-3 expectation 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a resource ('Runs (agent runs) that have claimed or received handover of a case'), and scoping criteria. The 'claimed or received handover' phrasing clearly distinguishes this tool from generic siblings like listRuns and listCaseRunRecentMessages, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context — this is the tool to use when you want runs that own or inherited a specific case, versus generic run listings. However, it never explicitly names alternatives (e.g., listRuns for all runs, getRun for a single run) or states when-not-to-use, leaving dispatch partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listCasesList CasesA
Read-onlyIdempotent
Inspect

List cases in a queue. Supports status, date-range, free-text, and json_data field filters via query params. Set count_only=true to skip Case row selection and transformation. The normal response shape is returned with cases: [] and the matching total. For label filters, use POST /v2/queues/:queue_id/cases/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNoFilter on a field of a typed queue's json_data, as <path>:<operator>[:<value>] (e.g. $.invoice.amount:gte:5000). Repeat the param to require several; all must match, so two comparisons on one path express a range. Operators: equals, notEquals, in, notIn, gt, gte, lt, lte, contains, isSet, isNotSet. in/notIn take a comma-separated list; isSet/isNotSet take no value. A value is typed by shape (5000 is a number, true a boolean, 00123 a string so a leading zero survives). A path the queue's Case schema does not declare is rejected rather than ignored.
limitNoNumber of cases per page (1-100, default 20).
offsetNoZero-based offset for pagination.
searchNoFull-text search across case title and data.
statusNoFilter by one or more status buckets (comma-separated). Values: all, pending, processing, needs_input, postponed, needs_review, resolved, canceled. `processing` covers both a case actively being worked and one waiting on its evaluation.
sort_byNoField to sort by. Default: created_at.created_at
priorityNoFilter by one or more priority levels (comma-separated). Values: none, medium, high.
queue_idYesThe queue's unique identifier
count_onlyNoSkip row selection and enrichment. The normal list response shape is returned with an empty row array and the matching total.false
sort_orderNoSort direction. Default: desc.desc
created_at_toNoReturn only cases created before this ISO-8601 timestamp. The upper bound is exclusive.
updated_at_toNoReturn only cases updated before this ISO-8601 timestamp. The upper bound is exclusive.
issue_severityNoFilter by highest failing rubric severity (comma-separated). Values: critical, medium. Severity is a facet within the issues outcome, so it returns nothing when combined with a status bucket that excludes issues. `low` is not selectable: an all-low verdict is stored as success, so no case carries it.
created_at_fromNoReturn only cases created at or after an ISO-8601 timestamp or a lookback such as 24h or 7d.
updated_at_fromNoReturn only cases updated at or after an ISO-8601 timestamp or a lookback such as 24h or 7d.
awaiting_my_approvalNoReturn only cases holding an unanswered approval row assigned to you, on the case's own run. Resolved from the authenticated caller, so it names no user: an API key filters as the user who owns it, and a credential with no user behind it is rejected rather than served an empty list. Narrows within needs_input, so it returns nothing alongside a terminal status bucket.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: count_only skips row selection and transformation, and the response shape still returns with an empty cases array plus the matching total.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core purpose front-loaded and the count_only behavior immediately after. Slight overlap with the schema's own wording, but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description carries the return-shape burden and does so by describing the count_only response (empty cases array plus total). Combined with the fully documented 16-param schema, an agent has enough to invoke it correctly, though general pagination/return guidance is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself is unusually detailed, so the baseline is 3. The description only summarizes the filter families generically (status, date-range, free-text, json_data) without adding operator or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List cases in a queue") plus the supported filter families. It never names a sibling like searchCases or exportCases directly, though it names the search endpoint as an alternative for label filters, which helps an agent distinguish the two paths.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one concrete routing rule (use POST /v2/queues/:queue_id/cases/search for label filters) and explains the count_only switch, but says nothing about when to prefer listCases over searchCases or exportCases in general, or about pagination strategy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityArtifactChatConversationsList Clarity Artifact Chat ConversationsA
Read-onlyIdempotent
Inspect

List the current user's recent non-deleted artifact-chat conversations for a Clarity v2 process and snapshot kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idYesThe Clarity process id
snapshot_kindYesArtifact kind to list conversations for

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds meaningful behavioral context beyond annotations by specifying 'current user's', 'recent', and 'non-deleted', which tell the agent this is a filtered read operation rather than a full dump of all conversations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no filler, and the core action and resource are front-loaded. The scoping qualifiers ('current user's recent non-deleted', 'Clarity v2 process and snapshot kind') earn their place because they materially narrow what the tool returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with two well-documented parameters and safety annotations, the description is largely sufficient. It does not describe the response shape or pagination, but output schema is absent and list-tool return values are generally predictable from the resource name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and both process_id and snapshot_kind already have clear descriptions plus an enum for snapshot_kind. The description reinforces that these parameters identify the process and snapshot kind but adds no new semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), a precise resource ('artifact-chat conversations'), and clear scoping ('current user's recent non-deleted', 'for a Clarity v2 process and snapshot kind'). This clearly distinguishes it from siblings like getClarityArtifactChatMessages (messages, not conversations) and deleteClarityArtifactChatConversation (deletion, not listing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving conversation summaries for a given process and snapshot kind, but it does not explicitly say when to prefer this over alternatives like getClarityArtifactChatMessages or listClarityProcessSnapshots. It provides clear context about scope (current user, non-deleted, recent) but no exclusions or routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityExtraCaptureRequestsList Clarity Extra Capture RequestsA
Read-onlyIdempotent
Inspect

List active extra-capture requests for a given automation proposal of a Clarity v2 process. The caller is expected to know the proposal id from the V2 read model and skip the call when no proposal exists yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results per page (1-100, default 20)
offsetNoNumber of results to skip (default 0)
process_idYesThe clarity process id
transformation_proposal_idYesThe automation proposal id

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description does not need to restate safety. It adds useful behavioral context beyond annotations: the tool returns only 'active' requests, and the caller must already have a proposal id and should avoid calling when no proposal exists. This helps prevent misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences with clear front-loading: the first sentence states what the tool does, and the second gives a crucial precondition for correct usage. No filler or redundant restatement of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with well-documented parameters and safety annotations, the description is nearly complete. It covers the main precondition and clarifies the 'active' filter. The only minor gap is that 'extra-capture requests' and the 'V2 read model' are treated as known domain concepts, but this is acceptable given the surrounding tool context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents process_id, transformation_proposal_id, limit, and offset. The description adds domain context by explaining the transformation_proposal_id is for an automation proposal, but it does not provide additional semantic value beyond what the parameter descriptions already convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List active extra-capture requests') and a specific resource scope ('for a given automation proposal of a Clarity v2 process'). It clearly differentiates this from siblings like assignClarityExtraCaptureRequest and listClarityLandscapeCaptures by focusing on extra-capture requests tied to an automation proposal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical when-to-call guidance by telling the caller they need to know the proposal id from the V2 read model and should skip the call when no proposal exists yet. It does not name alternatives, but this is a fairly narrow list operation where the main usage risk is calling it prematurely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityFoldersList Clarity FoldersB
Read-onlyIdempotent
Inspect

List the team's process folders with process and suggestion counts

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is read-only, idempotent, and non-destructive, so the description only needs to add extra behavioral context. It adds that results include process and suggestion counts, but does not mention pagination, ordering, or access limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It names the verb, resource, scope, and output in one efficient statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one optional parameter and strong annotations, the description is mostly sufficient. It identifies scope and output counts, though the absence of an output schema means return-shape details like pagination or response structure are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter team_id is already fully described in the schema with UUID format, fallback behavior, and API key versus OAuth semantics. The description itself adds no parameter-level meaning, but 100% schema coverage makes that acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('List') and resource ('the team's process folders'), and adds the output detail of process and suggestion counts. It is distinguishable from related tools like listClarityProcesses, though it does not explicitly name or contrast a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives, or when not to use it. The team_id parameter description covers authentication behavior but not selection criteria, so the agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityLandscapeCapturesList Clarity Landscape CapturesA
Read-onlyIdempotent
Inspect

List the organization's Process Landscape captures. By default, only captures eligible to seed new process proposals are returned; excluded captures can be included for inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of captures to return (1-200, default 100)
orgIdYes
include_excludedNoInclude captures excluded from Process Landscape analysisfalse
includeTranscriptsNoInclude full capture transcripts (large); off by default. Pass the literal string 'true' or 'false' (z.coerce.boolean treats any non-empty value, including 'false', as true).false

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is read-only, idempotent, and non-destructive, so the description does not need to restate those. It adds valuable behavioral context beyond the annotations by explaining the default eligibility filtering and that excluded captures can be included for inspection. This helps the agent predict the tool's default behavior without needing to infer it from 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the action and resource, and the second sentence adds the most important behavioral nuance about default filtering and excluded captures. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation, the description plus schema and annotations cover the core invocation needs: required orgId, optional pagination, excluded-capture inclusion, and transcript inclusion. It does not describe return shape, ordering, or pagination behavior, but those are not essential for a simple list call, especially given the strong schema documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, and the schema already documents limit, include_excluded, and includeTranscripts, including the important string 'true'/'false' coercion warning. The tool description does not add parameter-level meaning, but the one less-documented parameter, orgId, is a required UUID that is self-explanatory. This is adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a specific resource ('the organization's Process Landscape captures'), which clearly identifies the entity being retrieved. It also adds a distinguishing behavioral detail—default filtering to captures eligible to seed new process proposals—that separates it from generic capture or process listing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool is appropriate: listing Process Landscape captures, with the default returning only eligible captures and excluded captures available for inspection. It does not explicitly name sibling alternatives or state when not to use the tool, so it falls short of the top score, but the context is clear enough for an agent to understand the intended use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityLandscapeNodeInterviewsList Clarity Landscape Node InterviewsB
Read-onlyIdempotent
Inspect

List Clarity interviews linked to a process folder

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of interviews per page (1-100, default 50)
orgIdYesThe organization ID
nodeIdYesThe clarity process folder node ID
offsetNoNumber of interviews to skip

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the scoping behavior that interviews are linked to a process folder, but it does not disclose return format, pagination behavior, or any other operational details beyond what the schema already provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence: it starts with the verb and object, then states the scope. There is no redundant wording or filler; every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with well-documented parameters and strong annotations, the description covers the essential purpose and scope. It lacks output-shape details and explicit sibling differentiation, but the tool is simple enough that an agent can invoke it correctly with the required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage: orgId, nodeId, limit, and offset all have descriptive text. The tool description adds no additional parameter-level meaning, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a resource ('Clarity interviews'), and a scope ('linked to a process folder'), which conveys the basic operation. It does not explicitly name sibling alternatives or define what a 'process folder' is in relation to a landscape node, but the purpose is reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus related siblings such as listClarityOrganizationInterviews, listClarityTeamInterviews, or listClarityLandscapeCaptures. The phrase 'linked to a process folder' implies a use case, but there are no explicit selection criteria, exclusions, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityLandscapeNodePeopleList Clarity Landscape Node PeopleA
Read-onlyIdempotent
Inspect

List the people involved in the process behind one process landscape node. To read the people across the whole landscape in one request, use getClarityHierarchyPeople instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYesA process landscape node that is linked to a real process.
teamIdNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so safety is well established. The description adds useful scoping context (single node vs whole landscape) but does not describe return shape, pagination, or whether the result includes only directly assigned people or also inherited roles. It adds some context but not rich behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The core purpose is front-loaded in the first sentence, and the alternative tool is presented concisely in the second. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with strong annotations, the description covers the essential scope and sibling differentiation. It does not describe return fields, but there is no output schema and the operation is simple enough that the absence of return-value detail is not a critical gap. Minor param ambiguity holds it back from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with orgId and teamId undocumented. The description only loosely clarifies nodeId's role as 'one process landscape node' but does not explain what orgId or teamId mean, how they constrain results, or why teamId is optional. With low schema coverage, the description needed to compensate more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('people involved in the process behind one process landscape node'), clearly identifying the scope as a single node. It also distinguishes itself from getClarityHierarchyPeople by explicitly naming the sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (for one process landscape node) and when to use the alternative (getClarityHierarchyPeople for people across the whole landscape). This is direct, actionable routing guidance with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityOrganizationInterviewsList Clarity Organization InterviewsB
Read-onlyIdempotent
Inspect

List Clarity interviews across an organization

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orgIdYes
scopeNo
offsetNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to restate safety. It adds only the organization-wide scope and gives no detail about pagination, filtering, or response shape, but that is acceptable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. It is concise, though it sacrifices useful detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a schema that defines defaults and enums, this is minimally adequate. However, it omits the existence of team-scoped listing, pagination behavior, and any indication of what the response contains, so it is not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain limit, offset, scope, or orgId. The phrase 'across an organization' hints at orgId, but the description fails to compensate for the undocumented parameters or clarify the team/organization scope enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('List') and names the resource ('Clarity interviews') plus an organization scope. It does not explicitly differentiate from the sibling listClarityTeamInterviews or the singular getClarityOrganizationInterview, so it misses the top tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to call this tool instead of listClarityTeamInterviews, getClarityOrganizationInterview, or other interview-related tools. The agent must infer from the name and schema that organization-level listing is intended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityProcessAssignedLabelsList Clarity Process Assigned LabelsA
Read-onlyIdempotent
Inspect

List process tags on a process.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds process scoping but does not disclose return shape, pagination, or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence with no filler words. The verb and object are front-loaded, and every word adds meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool, the description is minimally adequate, but it is sparse within a large family of similar label-related tools. With no output schema and no sibling differentiation, an agent has limited guidance on expected results or selection among alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for the id parameter (0% coverage), and the description only vaguely clarifies that the operation happens 'on a process.' This is enough to infer id is the process identifier, but it does not go further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a resource ('process tags/labels'), and a scope ('on a process'). It is clear and not a tautology, though it could better differentiate itself from sibling tools like listClarityProcessLabels and listAvailableClarityProcessLabels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to list labels assigned to a particular process, but it does not explicitly state when to choose this tool over related siblings such as listAvailableClarityProcessLabels or listClarityProcessLabels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityProcessesList Clarity ProcessesA
Read-onlyIdempotent
Inspect

List Clarity processes for the current team, most recently updated first. Returns lightweight metadata (capture counts, contributors, status) suitable for building a picker; the per-process read model is available via GET /v2/teams/:team_id/clarity-v2/processes/:process_id for v2 rows and GET /v2/teams/:team_id/clarity/processes/:id for legacy v1 rows. Both v1 (legacy) and v2 processes are returned by default; use search, status, and version to narrow discovery. Capped at 100 per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of processes per page (1-100, default 50)
offsetNoNumber of processes to skip (default 0)
searchNoCase-insensitive search across process names
statusNoFilter by process lifecycle status
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
versionNoFilter by Clarity process schema version: 1 legacy, 2 v2

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/safe, and the description adds meaningful behavioral information: default inclusion of both v1 and v2 processes, ordering, return shape ('capture counts, contributors, status'), and the 100-per-page cap. No contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the action and ordering, and each sentence adds a distinct useful fact: output shape, drill-down alternative, filtering behavior, and pagination cap. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description discloses the nature of the returned metadata, ordering, default version behavior, filtering options, pagination cap, and how to get the full per-process model. This is enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has a clear description, including team_id's OAuth nuance and status enum values. The description adds only light extra guidance by grouping search/status/version as discovery filters and mentioning the page cap; the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List Clarity processes for the current team') plus a concrete ordering ('most recently updated first'). It also distinguishes itself from per-process reads by explicitly saying it returns lightweight picker metadata rather than the full read model.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to use it: 'suitable for building a picker', and routes the agent to GET endpoints for the full per-process read model. It also explains that search/status/version narrow discovery and that results are capped at 100 per page. It does not explicitly contrast with the sibling listClarityProcessSummaries tool, so it stops just 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.

listClarityProcessLabelsList Clarity Process LabelsB
Read-onlyIdempotent
Inspect

List process tags available in an organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orgIdYes
offsetNo
searchNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is established by structured data. The description adds only the organizational scope ('available in an organization'), which is mildly useful but does not disclose pagination, filtering, or what 'available' means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and every word carries purpose. It is concise, though the 'tags' versus 'labels' wording creates minor ambiguity and the terseness contributes to incomplete guidance elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters, no output schema, and no parameter descriptions, this minimal description is not complete. It fails to clarify the search and pagination parameters, what 'available' means, or how this tool relates to similarly named sibling tools, leaving an agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the four parameters, but it only hints at orgId via 'in an organization.' It provides no meaning for limit, offset, or search, leaving the agent without guidance on how pagination and filtering work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('process tags'), and scope ('in an organization'), making the basic purpose clear. However, it uses 'tags' instead of 'labels' and does nothing to distinguish this tool from the near-identical sibling listAvailableClarityProcessLabels, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'available in an organization' implies this is the tool to use when retrieving org-scoped process labels, so there is some implicit usage guidance. But there are no explicit when-to-use conditions, no exclusions, and no mention of alternatives such as listClarityProcessAssignedLabels or listAvailableClarityProcessLabels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityProcessMembersList Clarity Process MembersA
Read-onlyIdempotent
Inspect

List users with accepted access to a clarity process, and the people invited who have not accepted yet

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process ID.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, covering safety. The description adds the behavioral distinction of listing both accepted and invited members, which is meaningful context beyond the annotations. It does not mention return format or pagination, but the added scope is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately states the action and scope. It is concise with no wasted words, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one well-documented parameter and no output schema, the description is fairly complete. It explains what it lists and the two membership statuses. It does not specify the return format, but given the tool's simplicity and the annotations covering safety, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single 'id' parameter, with a description 'Clarity process ID.' The tool description does not add any additional meaning or constraints beyond what the schema already provides. The baseline of 3 is appropriate since the schema fully documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists users with accepted access and those invited but not yet accepted for a clarity process. It is specific about the resource and the two categories, making it distinct from generic list tools. However, it does not explicitly contrast with similar siblings like getClarityProcessSharing or listClarityProcessLinks, so it falls short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or prerequisites, and does not refer to any sibling tools. An agent is left without context for selecting it over other member-related or process-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityProcessSnapshotsList Clarity Process SnapshotsB
Read-onlyIdempotent
Inspect

List lightweight Clarity v2 process snapshots for one kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
limitNo
offsetNo
process_idYesThe clarity process id

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already disclose read-only, idempotent, non-destructive behavior. The description adds the qualifier 'lightweight', which hints at a reduced payload but does not elaborate on response structure or any side effects. No contradiction exists, but the description contributes minimal behavioral insight beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that avoids redundancy and directly states the action and object. It is well-structured and easy to parse, with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, and the description does not mention the return format, pagination behavior, or error conditions. It also fails to clarify what 'lightweight' means in terms of data omitted. Given the lack of an output schema, this missing information is critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for 'process_id' and 'kind', but 'limit' and 'offset' lack descriptions despite having defaults and constraints. The tool description does not augment these parameters or explain their role (e.g., pagination). The enum for 'kind' is clear, but the overall parameter semantics are incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('Clarity v2 process snapshots') with a scoping qualifier ('for one kind'). It distinguishes this from other list tools by specifying the snapshot type, and the resource is not ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. There are many list-related sibling tools (e.g., listClarityProcesses, listClarityProcessSummaries) and a getClarityProcessSnapshot for retrieving a single snapshot, but no comparison or condition is mentioned. Users must infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityProcessSummariesList Clarity Process SummariesA
Read-onlyIdempotent
Inspect

Cross-process portfolio digest for every completed Clarity process on the team: per-process summary, SWOT, projected impact, and a step skeleton (role, system, and flow edges) — without step prose or source excerpts. Paginated (default 5, max 10). Use this to answer portfolio-wide questions in one pass; fetch a single process's full detail via getClarityProcessSnapshot only for the few that matter.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoProcesses per page (1-10, default 5). Keeps the response under the MCP output cap.
detailNoskeleton = + per-step role/system/flow edges (default); summary = summary+SWOT+impact only (cheaper, for pure ranking).skeleton
offsetNoProcesses to skip (default 0).
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
include_current_stepsNoInclude the as-is (current) step skeleton too. Default false = proposed (to-be) steps only. Pass the literal string 'true' or 'false' (z.coerce.boolean treats any non-empty value, including 'false', as true).false

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond that: the tool only covers completed processes, it is paginated with defaults, and it excludes certain content types. This is meaningful added context without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and front-loaded: it leads with the tool's core purpose and return contents, then quickly explains pagination and gives the key routing guidance. No sentences are wasted and the most important discriminator is stated early.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-required-param, paginated list tool, the description is complete: it names the return contents, scoping, pagination behavior, and the correct alternative for single-process detail. The absence of an output schema is compensated by the explicit enumeration of the response fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters well. The description restates pagination defaults that appear in the schema and does not add substantial new meaning to any specific parameter. Baseline 3 is appropriate because the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('cross-process portfolio digest') and enumerates exactly what it returns: per-process summary, SWOT, projected impact, and a step skeleton. It also distinguishes this tool from getClarityProcessSnapshot, which covers single-process detail, so an agent can select among siblings 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: use this tool to answer portfolio-wide questions in one pass, and use getClarityProcessSnapshot only for the few processes that need full detail. It also states what this tool intentionally omits (step prose and source excerpts), which tells agents when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityStepFramesList Clarity Step FramesA
Read-onlyIdempotent
Inspect

Return one representative screenshare frame for each current-process step. Explicit frame evidence wins. Otherwise, a timestamped screenshare transcript source selects the closest persisted frame at or after that timestamp, with the closest earlier frame as fallback. Pass window (1-5) to also receive that many neighbouring frames on each side as candidates, for recovering when the selected frame does not show the step. Pass size=thumb for 768px copies that are cheaper to download and inspect. Signed URLs are short-lived and can be null when signing is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNofull: the persisted screenshot (1920px wide). thumb: a 768px-wide copy, cheaper to download and to inspect visually; use it to check whether a frame shows the step, then fetch full for the document.full
windowNoNumber of neighbouring persisted frames to return on each side of the selected frame as `candidates` (0-5, default 0). Use to recover when the selected frame does not show the step.
step_idsNoOptional comma-separated step ids to resolve, for example `task-a,task-b` (maximum 100). Omit to resolve every step.
process_idYesThe clarity process id
snapshot_idYesThe current-process snapshot id

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the frame selection algorithm (explicit evidence, closest at/after timestamp with earlier fallback), the behavior of `window` (neighbouring candidates), and that signed URLs are short-lived and may be null. This is consistent with the read-only and idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed but each sentence contributes essential information about selection, fallback, and parameter effects. It is slightly longer than necessary but remains focused and free of extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While there is no output schema, the description explains the return format (representative frames per step, candidates, signed URLs) and the conditions under which URLs may be null. This is sufficient for an agent to understand the result, though a formal output schema would add more precision.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters are covered in the schema and the description adds meaningful semantics: `window` explains neighbouring frames and candidates, `size` explains full vs thumbnail, `step_ids` explains comma-separated resolution, and `process_id`/`snapshot_id` are clearly identified. The description enhances the schema rather than merely repeating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns one representative screenshare frame per current-process step, with explicit selection logic. It distinguishes itself from other list tools by focusing on step frames and their resolution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete guidance on when to use the `window` and `size` parameters, and explains the fallback behavior when the selected frame does not show the step. While it does not explicitly compare to sibling tools, the context and parameter instructions are sufficient for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listClarityTeamInterviewsList Clarity Team InterviewsB
Read-onlyIdempotent
Inspect

List team-level Clarity interviews

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of interviews per page (1-100, default 50)
offsetNoNumber of interviews to skip
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond that, but it also does not contradict the annotations. The interesting behavioral nuance about team_id fallback and rejection lives in the schema, not the description, so no extra credit is warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero wasted words. It is appropriately terse for a simple list operation, though it is lean enough that some semantic context (what a Clarity interview is) is left to inference.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated list tool with fully-documented optional parameters and annotations covering safety, the definition is largely sufficient. The main gaps are the absence of an output schema and a lack of clarification about the relationship between team-, organization-, and landscape-node interview listings, but these are minor for a straightforward read-only list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters. The description itself adds nothing about parameters, which matches the baseline of 3 when the schema does the heavy lifting. The team_id description is notably rich but counts as structured data, not description value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List team-level Clarity interviews'. The 'team-level' qualifier distinguishes it from closely named siblings like listClarityOrganizationInterviews and listClarityLandscapeNodeInterviews, though it never explicitly names or contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus its alternatives. It does not mention the related organization-level or landscape-node interview listing tools, nor any condition that would select one over another. The 'team-level' phrasing implies a scope but provides no actionable routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listConfigFieldsList Config FieldsA
Read-onlyIdempotent
Inspect

Read an automation's module config fields (its Policy), grouped by section in catalog order, with each field's current value, default, and fill provenance.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesThe automation's unique identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Read' is consistent with them. The description adds useful context about output organization and field attributes, but it does not disclose operational behavior such as auth requirements, failure modes, or what happens if the automation_id does not exist. With annotations covering the safety profile, this is adequate but not especially rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded with the primary action and resource, then adds precisely the details that matter for selecting and using the tool: grouping, ordering, and returned field attributes. There is no filler or redundant repetition of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of explaining what the response contains: config fields grouped by section, with current value, default, and fill provenance. It is nearly complete for a simple one-parameter read-only tool, though 'fill provenance' is left as domain jargon and error/not-found behavior is not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents automation_id with type, format, pattern, and a description, so schema description coverage is 100%. The tool description adds no parameter-level meaning beyond referring to 'an automation,' but the schema already carries the full burden, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and a specific resource ('an automation's module config fields (its Policy)'), and it clarifies the response contents: grouped by section, with current value, default, and fill provenance. It is clear, though it does not explicitly differentiate itself from sibling getAutomation/listAutomations tools beyond naming the config-fields resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you need an automation's module config fields or Policy, but it provides no explicit when-to-use guidance, alternatives, or exclusions. Among many getAutomation/getAutomationCurrent/listAutomations siblings, an agent must infer the right choice from the resource term alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listConnectionsList ConnectionsA
Read-onlyIdempotent
Inspect

List the authenticated user's connections (connected integration instances) for the current team. Includes team-shared instances visible to the caller when the org-level Connections sharing setting is on. Filter by integration type with the type query parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
offsetNo
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnly, idempotent, and non-destructive, which align with the description. The description adds a behavioral note about visibility depending on the sharing setting, but it does not disclose potential errors (e.g., invalid team rejection) or response behavior in edge cases, leaving some transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that conveys the core function and the filter option without unnecessary verbosity. It is easy to read and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description does not mention the response format, pagination behavior, or error conditions. While limit/offset parameters imply pagination, the absence of any output information leaves the tool's full context incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only team_id has a description). The tool description explains the 'type' parameter's purpose but leaves 'limit' and 'offset' unexplained. Since the schema does not cover these parameters and the description does not compensate, parameter semantics are inadequately defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: listing the authenticated user's connections for the current team, with an explicit filter option. It uses a specific verb ('List') and resource ('connections'), distinguishing it from similar tools like listIntegrations or listRevisionIntegrationConnections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use the tool, such as clarifying that it lists connections for the current team and respects the org-level sharing setting. It also mentions the type filter. However, it does not explicitly contrast with alternative listing tools, 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.

listCredentialsList credentials for user and teamA
Read-onlyIdempotent
Inspect

List browser-login credentials visible to the caller for the current team — team-shared (user_id IS NULL) plus the caller's own personal logins. Optionally filter by domain. Passwords and OTP secrets are never returned; only metadata flags indicating whether they are set.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNo
userIdYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly and idempotent, so the description is free to add behavioral value. It does: passwords and OTP secrets are never returned, only metadata flags indicating whether they are set. It also clarifies the visibility boundary. It omits pagination or ordering details, but the annotation coverage lowers the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core scope and behavior, with no filler. The sensitive-data caveat is stated efficiently and the optional domain filter is mentioned without extra prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the result scope, the optional filter, and the important return-value constraint (no passwords/OTP). However, a required `userId` parameter is left essentially unexplained, which is a real gap for an agent trying to invoke the tool correctly. Without an output schema, more guidance on pagination or returned metadata fields would also be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate. It adds meaning for the optional `domain` parameter, but the required `userId` parameter is neither described in the schema nor explained in the description. The relationship between `userId`, the caller, and the current team remains ambiguous, and `team_id` semantics are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (browser-login credentials), the verb (list), and precisely scopes the result: team-shared credentials with user_id NULL plus the caller's personal logins. This clearly distinguishes it from credential or secret management siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context of when this tool is appropriate: listing credentials visible to the caller in the current team, with an optional domain filter. It does not explicitly name alternative tools or state when not to use it, 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.

listFilesList FilesB
Read-onlyIdempotent
Inspect

List files for the current team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the 'current team' scoping, but does not disclose pagination, result format, or any access-related behavior. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, and the verb and object are front-loaded. It is appropriately brief for a simple list operation, though the first two words largely mirror the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is low complexity, and the annotations plus schema cover safety and team_id semantics. However, with no output schema, the description does not explain what the returned file list contains (e.g., file names, metadata, pagination), leaving some ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the team_id parameter is thoroughly documented, including fallback behavior for API keys and OAuth. The description adds little beyond 'current team', which aligns with the schema but does not need to repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List') and resource ('files') with a specific scope ('current team'). It is instantly distinguishable from unrelated sibling tools, though it does not explicitly differentiate itself from similarly named tools like listSandboxFiles or listSkillFiles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as listSandboxFiles or getFileContent. The parameter schema explains team_id semantics, but the description itself provides no usage context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listIntegrationsList IntegrationsA
Read-onlyIdempotent
Inspect

List the team's integration catalog: built-in integration types plus any custom connection types defined for the team. OAuth authorization flows are browser-based and cannot be performed via this API; use the Duvo dashboard to complete OAuth-based connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
offsetNo
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to repeat those. It adds the meaningful caveat that OAuth authorization cannot be performed here. However, it does not disclose pagination behavior, ordering, or response structure, which would be useful given 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with no filler. The purpose is front-loaded, and the OAuth caveat is placed second where it naturally supports invocation decisions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool returns conceptually and warns about the OAuth limitation. But with no output schema and poor parameter documentation for 'type', an agent cannot fully understand filtering behavior. Since all parameters are optional, a valid call is still possible, but the ambiguity leaves a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, and the tool description does not compensate. The 'type' parameter is completely undocumented in both the schema and description, leaving its allowed values ambiguous. Limit and offset are self-explanatory, and team_id is well-described in the schema, but the low coverage and missing 'type' semantics hurt agent confidence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb-resource pair ('List the team's integration catalog') and enumerates what is included: built-in integration types and custom connection types. It is specific enough to distinguish from more generic list tools, though it does not explicitly contrast with siblings like listConnections or listRevisionIntegrations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit when-not-to-use directive: OAuth flows cannot be performed via this API and the Duvo dashboard should be used instead. This is concrete usage guidance, though it does not address when to prefer this tool over other integration-related list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listMyOrganizationsList My OrganizationsA
Read-onlyIdempotent
Inspect

List the organizations the current user belongs to, with their role (organization:member, organization:admin, organization:owner, or organization:executive) and member count in each. Use this to check whether the user has an admin-or-above role before calling organization-scoped endpoints, which reject lower roles with 403.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate readOnly and idempotent behavior. The description adds that it returns roles and member counts, and scopes to the current user. It does not contradict annotations and provides useful output detail, though it could mention potential errors or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, consisting of a clear listing statement and a usage note. No unnecessary verbosity or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description explains the return content (role and member count) and the practical context. It is complete for the tool's intended use, including the error condition it helps avoid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema is fully covered (100%). The description does not need to explain parameter semantics, and the baseline for high coverage is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the organizations the current user belongs to, including role and member count. It also specifies a concrete use case (checking admin-or-above role) which distinguishes it from related tools like listMyTeams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool: to check if the user has an admin-or-above role before calling organization-scoped endpoints that reject lower roles with 403. This provides clear guidance on the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listMyTeamsList My TeamsA
Read-onlyIdempotent
Inspect

List teams the authenticated caller can act on. Team-scoped API keys see only the key's team; managed Ask Duvo keys stay within their origin boundary; human user-scoped API keys and OAuth callers see every team they're a member of.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds valuable behavioral detail beyond annotations by explaining auth-dependent visibility boundaries, which is important for setting caller expectations about 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly written sentence that leads with the core purpose and then provides the essential scoping nuance. Every clause adds meaningful information without unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only list tool with strong annotations, the description is complete. It covers what the tool returns, which teams are visible under each auth context, and the operation's safety profile is already established by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter semantics burden on the description. The baseline of 4 applies because the description is not required to compensate for undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List teams') and the specific resource scope ('teams the authenticated caller can act on'). It further differentiates behavior across credential types, which distinguishes it from sibling list tools like listOrgTeams and listMyOrganizations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about which teams will be returned for different authentication modes, making it evident this is the correct tool for listing personally accessible teams. It does not explicitly name alternatives or exclusion conditions, but the scoping rules effectively imply when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listNotificationsList NotificationsA
Read-onlyIdempotent
Inspect

List notifications for the authenticated user's current team, most recent first. Filter with type, unread, severity or minSeverity (mutually exclusive), important, agentRunId, or processId; paginate with limit/cursor. Pass batchId to list only the live members of a notification batch, optionally ordered by sort=importance (only valid together with batchId). Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoimportance orders by type importance then severity (only valid together with batchId); default recency.recency
typeNoOnly return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue, config_proposal.
limitNoNumber of notifications per page (1-100, default 30).
cursorNoOpaque cursor from the previous page's nextCursor. Omit for the first page.
unreadNoIf true, only return unread notifications.
batchIdNoOnly return live members of this notification batch.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
severityNoOnly return notifications with this severity. One of: info, warning, critical, success.
importantNoIf true, only return important notifications: unresolved connection_broken rows pinned until reconnected, removed, or dismissed.
processIdNoOnly return notifications about this Clarity process.
agentRunIdNoOnly return notifications about this agent run.
minSeverityNoOnly return notifications at or above this urgency. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent, and the description adds non-trivial behavior: a 404 when Notification Center is disabled, cursor pagination, 'live members' batch semantics, and ordering guarantees. It goes well beyond the structured fields and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences pack purpose, filter options, pagination, batch mode, and error behavior with no filler. The core scoping detail is front-loaded before the filter enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, all-optional, no-output-schema read tool, the description plus rich schema and annotations covers what an agent needs to call it correctly: ordering, filters, pagination, batch restrictions, and failure mode. The explicit list-and-paginate semantics compensate for the absent output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces key constraints such as mutual exclusivity and the batchId/sort coupling, but it does not add substantial new meaning beyond the schema, such as team_id fallback semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb, resource, and scope ('List notifications for the authenticated user's current team, most recent first'), making the core operation unambiguous. It does not explicitly name sibling notification tools such as getNotificationFeed or getNotification, so differentiation is by implication rather than direct exclusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear in-tool guidance: severity and minSeverity are mutually exclusive, sort=importance is only valid with batchId, and the Notification Center prerequisite yields a 404. However, it never states when to prefer this over sibling notification tools, so usage-vs-alternatives 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.

listOrgAgentsList Org AgentsA
Read-onlyIdempotent
Inspect

List every agent across all teams in an organization, with the team it belongs to, the state of its most recent run and the state of its schedules. Intended for external monitoring: it answers 'which agents have gone silent' and 'which agents were switched off' without a request per team or per agent. Requires an organization Admin, Executive, or Owner role, and an API key scoped to all teams you can access — a key pinned to a single team is rejected, because this endpoint spans every team in the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of agents per page (1-100, default 20)
orgIdYesThe organization's unique identifier
offsetNoNumber of agents to skip
team_idNoFilter to agents on this team
auto_disabledNoIf true, only agents whose schedule was switched off automatically (e.g. after repeated missing-connection failures); if false, only agents with no auto-disabled schedule
schedule_enabledNoIf true, only agents with at least one enabled schedule; if false, only agents with none (including agents that are never scheduled)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds substantial behavior beyond annotations: organization-wide scope, required Admin/Executive/Owner role, and rejection of single-team API keys with a clear rationale. This is exactly the kind of contextual disclosure that helps an agent avoid auth failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, then use case, then auth. Each sentence earns its place and there is no filler or redundant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter listing tool with no output schema, the description covers purpose, use case, returned fields, and auth prerequisites, while the schema covers all parameters. The only notable gap is that it does not explicitly mention pagination or the response envelope, which would be useful given the limit/offset parameters and absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already fully documented with types, defaults, ranges, and enums. 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'List every agent across all teams in an organization,' and enumerates the returned fields (team, most recent run state, schedule states). This scope clearly differentiates it from sibling per-team/per-agent list tools such as listAgents and listQueueAgents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the intended use case ('external monitoring'), the questions it answers, and the required role and API-key scope. It does not name sibling alternatives or give explicit when-not-to-use conditions, but the 'without a request per team or per agent' contrast provides strong routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listOrgRunsList Org RunsA
Read-onlyIdempotent
Inspect

List runs across every team in an organization, filtered by status, agent, team, source, evaluation issues and time. Intended for external monitoring: one call covers the whole org instead of one per team. Requires an organization Admin, Executive, or Owner role, and an API key scoped to all teams you can access — a key pinned to a single team is rejected, because this endpoint spans every team in the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of runs per page (1-500, default 20). The cap is higher than the team runs endpoint's because this route serves bulk export: at 100 requests a minute per key, page size is what bounds how fast a month of runs can be pulled.
orgIdYesThe organization's unique identifier
sinceNoAlias of `completed_after`, kept because it is the name the public team runs endpoint ships. Prefer `completed_after`: this endpoint carries a creation and a start window too, and only the column-named pair says which one this is.
untilNoAlias of `completed_before`, kept because it is the name the public team runs endpoint ships. Prefer `completed_before`.
cursorNoResume after the run a previous page ended on: pass the `next_cursor` that page returned, with the same filters and sort_order. Runs created or resolved in between cannot shift a boundary you have already passed, so a sweep sees every run exactly once, and a sweep that started under the default 7-day window keeps that window on every page. This list has no offset parameter: skipping rows costs the database every skipped row, and a run created between two requests shifts every later offset by one, so an offset sweep can repeat or miss a run. 400 when the value is not a cursor this endpoint issued.
sourceNoFilter to runs created from this source (e.g. api, scheduling)
statusNoFilter to runs with this status. `needs_attention` is the monitoring status: runs that are waiting on a human or failed, plus runs whose latest evaluation flagged a critical issue — a run can finish as `completed` and still have accomplished nothing.
team_idNoFilter to runs on this team
agent_idNoFilter to runs for this agent
count_onlyNoSkip row selection and enrichment. The normal list response shape is returned with an empty row array and the matching total.false
has_issuesNoFilter on the run's latest successful evaluation: true returns only runs it flagged, false only runs it did not. Only the latest evaluation counts — an older flag does not match — and a run whose latest evaluation errored, or that has none, counts as unflagged. Omit to return both.
sort_orderNoSort direction on created_at (default desc)desc
created_afterNoReturn runs created at or after this ISO-8601 timestamp. Every run has a creation time, so this is the window that returns all runs in a period whatever state they reached — unlike the started and completed windows below, which exclude runs that never started and runs still in flight respectively. When the request carries no lower time bound (`created_after`, `started_after`, `completed_after` or `since`), this defaults to 7 days ago and `default_window_applied` is true in the response: an organization's run history is unbounded, and a monitor wants what is recent. An upper bound alone keeps the default floor. Pass any lower bound to replace it.
include_totalNoReturn `total`, the count of every matching run ignoring pagination. Off by default: counting walks every match where the page stops at `limit`, so on a large organization it costs orders of magnitude more than the rows themselves. Ask for it when you are driving a pager, not when you are polling. Implied by `count_only`.false
started_afterNoReturn runs that started at or after this ISO-8601 timestamp. Runs that never started are excluded. Pair with `started_before` to bound a stuck-run query to a window — without a lower bound, `status=running` also counts every run left running months ago.
created_beforeNoReturn runs created before this ISO-8601 timestamp (exclusive). Pair with `created_after` for a period. A closed creation window is also the stable one to paginate: results are ordered by creation time, so runs arriving mid-sweep cannot shift a closed window's pages.
issue_severityNoOnly runs whose latest successful evaluation has at least one failing rubric at this severity (critical | medium | low). Implies has_issues.
started_beforeNoReturn runs that started before this ISO-8601 timestamp. Combine with status=running to find stuck runs — `since`/`until` filter on completion, so they never match a run that is still going.
completed_afterNoReturn runs completed at or after this ISO-8601 timestamp. Runs that have not completed are excluded, including every stuck one — reach for `started_after`/`started_before` to bound those. Alias of `since`; pass one or the other, not both.
completed_beforeNoReturn runs completed before this ISO-8601 timestamp (exclusive). Runs that have not completed are excluded. Alias of `until`; pass one or the other, not both.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the exact kind of behavioral context the annotations don't carry: authorization and credential-scoping requirements. It explicitly states the required roles, the requirement that the API key be scoped to all teams, and the rejection of a single-team key, plus the reason this endpoint spans the entire organization. This is non-structured context valuable to an agent, and it aligns with the readOnly/idempotent/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first asserts the verb, scope, and filters; the second gives the intended use; the third adds the authorization constraint. There is no filler, no restatement of annotations, no procedural padding, and the most decision-relevant fact (whole-org scope and credit) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a large, information-dense tool (20 parameters, 6 enums) and the description covers the essential context the 100%-valorized schema cannot: the organization-wide scope, the it's use case for external monitoring, and the realistic. The schema's parameter descriptions and fully-documented type/format/defaults carry the rest; with everything added the agent needs to choose and invoke the tool correctly is present, and the missing output shape is compensated for by the 'same list runs' sibling pattern.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter descriptions are exceptionally detailed, so the baseline is 3. The tool description adds a bit more value by abstracting—over 20 parameters into conceptual filter dimensions (status, agent, team, source, evaluation issues, time) and surfacing 'evaluation issues' as an axis that maps to the non-obvious has_issues/issue_severity parameters. That is a genuine at-a-glance assist, not merely a surface repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair ('List runs') with an explicit scope modifier ('across every team in an organization') and enumerates the filter dimensions. It also differentiates the tool from its siblings by noting the whole-org coverage versus one-per-team, so an agent can distinguish 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear intended use case ('Intended for external monitoring: one call covers the whole org instead of one per team') and the authorization gate (org Admin/Executive/Owner; a team-pinned key is rejected), which implicitly tells an agent when the tool is unavailable. It stops short of naming the sibling it replaces ('one per team' implies listRuns) or explicitly stating the when-not-to-use condition path, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listOrgTeamsList Org TeamsA
Read-onlyIdempotent
Inspect

List teams belonging to an organization you are a member of, including your membership and role in each.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of teams per page (1-100, default 50)
orgIdYesOrganization ID
offsetNoNumber of teams to skip
searchNoFilter teams by name (case-insensitive substring match)
sortByNoSort order: createdAt (newest first, default) or name (alphabetical)createdAt

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns the caller's membership and role per team and restricts listing to organizations the caller belongs to. It does not go into pagination or response structure, but that is a minor gap given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every clause contributes meaning: listing teams, org membership scope, and the inclusion of membership/role in the response.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only list operation with a fully documented schema and safety annotations, the description is nearly complete. The only minor gap is that it does not explicitly state whether teams in the org where the caller lacks a team membership are still returned or how the role field behaves in that case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the input schema. The description does not need to restate them and adds little beyond hinting at the orgId scope; the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List), a resource (teams), an owning scope (an organization you are a member of), and the additional data returned (your membership and role in each). This makes it clearly distinguishable from related siblings like getTeam, listTeamMembers, and listMyTeams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case by defining the org membership scope and the membership/role information returned. However, it does not explicitly contrast it with close siblings such as listMyTeams or getTeam, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listPluginCatalogList Plugin CatalogA
Read-onlyIdempotent
Inspect

List plugins that can be referenced by name in a build's plugins array. Builds may also reference any public GitHub repository URL (https://github.com/owner/repo) as a plugin; those are not enumerated here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the catalog is scoped to name-referenced plugins only, and URL-referenced plugins are intentionally absent. This sets accurate expectations about 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences deliver the core purpose and the key exclusion without any filler. The main scoping statement comes first, and the GitHub URL exclusion is a necessary second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with rich annotations, the description is complete: it states what the catalog contains, how plugins are referenced, and what is not included. There is no output schema, but the return concept—a list of pluginnames—is simple enough that no further detail is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there are no parameter semantics to explain. The description correctly focuses on result scope rather than arguments. This is the appropriate baseline for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: listing plugins that can be referenced by name in a build's plugins array. It also differentiates itself from the broader category by explicitly noting that public GitHub repository URL plugins are not enumerated, making its scope clear relative to potential alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool when you need plugins that can be referenced by name in a build. It also provides an explicit exclusion—GitHub repository URL plugins are not included—which helps an agent avoid misusing it. It does not name a specific sibling tool as an alternative, but the usage boundary is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listPulseDashboardCommentsList Pulse Dashboard CommentsA
Read-onlyIdempotent
Inspect

List the comment threads on a Duvo Pulse dashboard (requires view access). Each thread carries its author, the dashboard element it is pinned to, its replies oldest-first, and whether it has been marked complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of comment threads to return (1-200, default 50).
offsetNoNumber of comment threads to skip, for paging.
statusNoReturn only threads in this state: `open` for threads not yet marked complete, `complete` for those that are. Omit for both. `total` and `open_total` always count the whole set, so a filtered page still reports how many threads exist.
artifactIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description adds useful behavioral details: it requires view access, and the status parameter description notes that total and open_total counts reflect the whole set regardless of filtering. These details help the agent understand side effects and response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and well-structured, consisting of two clear sentences. It avoids unnecessary detail while conveying the essential purpose and a brief overview of the returned data, making it easy for the agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description partially compensates by mentioning what each thread carries (author, pinned element, replies order, completion status). It also covers permission requirements and pagination parameters. This is adequate for a list operation, though a more explicit return type would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for limit, offset, and status (75% coverage). The tool description adds little to parameter understanding—only that the dashboard is identified by artifactId, which is implicit. Since coverage is moderate and the description doesn't enrich the parameter meanings significantly, a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists comment threads on a Duvo Pulse dashboard, specifying the resource (dashboard) and action (list comment threads). It also mentions the required view access, making the purpose unambiguous and distinct from sibling tools like listPulseDashboards or listPulseDashboardMessages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates when to use this tool (when comment threads are needed) but does not explicitly contrast it with alternatives such as listPulseDashboardMessages. The context of sibling tools provides enough differentiation, but explicit guidance would be stronger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listPulseDashboardConnectionsList Pulse Dashboard ConnectionsA
Read-onlyIdempotent
Inspect

List the connections (data sources) attached to a Duvo Pulse dashboard (requires edit access).

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, idempotent, non-destructive operation. The description adds an important behavioral detail beyond the annotations: it requires edit access to the dashboard. It does not describe return format or pagination, but for a simple read-only list operation the annotations carry the safety profile and the access requirement adds meaningful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence. Every element earns its place: the resource, the scope ('attached to a dashboard'), the clarification that connections are data sources, and the edit-access requirement. No filler or redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only tool with clarifying annotations, the description is largely complete: it states the purpose, scope, and access requirement. The lack of an output schema means the return value is not formally documented, but the likely result—a list of connections/data sources—is strongly implied by the tool name and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. The phrase 'attached to a Duvo Pulse dashboard' implicitly identifies artifactId as the dashboard ID, and the parameter name plus format constraint help further. However, the description never explicitly maps artifactId to the dashboard, so the semantic link is inferred rather than stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('connections (data sources) attached to a Duvo Pulse dashboard'), clearly clarifying that 'connections' means data sources. This also distinguishes it from broader tools like listConnections and from other dashboard-specific listers such as listPulseDashboards or listPulseDashboardVersions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context by noting that listing requires edit access, which sets an implicit prerequisite. However, it does not explicitly state when to prefer this tool over alternatives such as the generic listConnections or the related getPulseDashboard, leaving the usage guidance mostly 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.

listPulseDashboardMessagesList Pulse Dashboard MessagesA
Read-onlyIdempotent
Inspect

List the chat transcript of a Duvo Pulse dashboard's live version (requires edit access). Returns the most recent page by default, oldest first within the page; pass before (a message id from a previous page) to walk back through older messages. Messages from other version branches are not included.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of messages to return (1-500, default 50).
beforeNoMessage id cursor: return the page of messages immediately older than this message. Omit for the most recent page.
artifactIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds substantial behavioral context beyond that: pagination direction ('oldest first within the page'), default page behavior, cursor semantics for 'before', the edit-access prerequisite, and exclusion of other version branches. This is rich, useful 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. Key facts are front-loaded: purpose, permission requirement, then pagination and scope exclusions. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with annotations covering safety, the description covers purpose, access, ordering, pagination, and branch filtering. There is no output schema, so a bit more about return shape would help, and the artifactId parameter is never explained. These are minor gaps given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds little beyond the schema: it restates the 'before' cursor concept and mentions the live version, but it does not explain the required artifactId parameter, which has no schema description. With schema coverage at 67% and the missing param being the only required one, the description should have compensated but did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List the chat transcript of a Duvo Pulse dashboard's live version'. It also clarifies scope by stating that messages from other version branches are not included, which distinguishes it from related version and dashboard tools. The tool is clearly differentiated from siblings like sendPulseDashboardMessage and getPulseDashboard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to read the live version's chat transcript, and it notes the edit-access requirement. It also explains pagination behavior, which is a usage condition. However, it does not explicitly name alternative tools or state when to use them instead, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listPulseDashboardsList Pulse DashboardsA
Read-onlyIdempotent
Inspect

List your Duvo Pulse dashboards (live, agent-generated visualizations of your Duvo data). Ordered most recently updated first, except scope=automation, which is ordered by creation time (then id) so the whole scope can be read with the after_id cursor without a concurrent change shifting a page boundary.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results per page (1-100, default 20)
scopeNoWhich dashboards to return: 'created' (yours, the default), 'team' (published to your whole team by a teammate), 'shared' (shared with you individually by a teammate), or 'automation' (owned by one of your team's automations, each carrying its automation's name).created
offsetNoNumber of results to skip
after_idNoKeyset cursor for reading the whole 'automation' scope: the id of the last dashboard you received; returns the page after it in (created_at, id) order. Use this instead of 'offset' when reading every page, so a dashboard created, updated or deleted between requests cannot shift a page boundary you have already passed. 400 when the id no longer names a dashboard (restart from the first page). Only valid with scope=automation.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral detail beyond annotations: the ordering rule (most recently updated first, except automation which uses creation time then id) and the rationale for using after_id to avoid page-boundary shifts under concurrency. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The purpose is front-loaded, and the second sentence packs the complex ordering/cursor behavior into a compact, technically precise explanation. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, and the description does not describe the response shape or pagination metadata, which is a minor gap for a list operation. However, given the fully documented parameters, read-only annotations, and the description's coverage of ordering and cursor behavior, the 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with rich descriptions for all four parameters. The tool description mostly reinforces the after_id ordering rationale already detailed in the schema, so it adds little semantic value beyond what the input schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('Duvo Pulse dashboards'), and the parenthetical defines exactly what those are. It is clearly distinct from sibling tools like listPulseDashboardConnections, listPulseDashboardMessages, listPulseDashboardVersions, and getPulseDashboard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool — when you want to list Pulse dashboards — and explains the special ordering/cursor behavior for scope=automation. However, it does not explicitly name alternatives or state when not to use this 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.

listPulseDashboardVersionsList Pulse Dashboard VersionsA
Read-onlyIdempotent
Inspect

List the version history of a Duvo Pulse dashboard, newest first (requires edit access). Use the version id with the restore and version-render endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds helpful behavioral context beyond annotations: the edit-access requirement, newest-first ordering, and downstream consumption of the version id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action and ordering are front-loaded, and the second sentence provides practical downstream guidance without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list operation with strong annotations, the description covers the resource, access requirements, ordering, and how the result should be used. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries some burden, but with only a single required artifactId, the phrase 'of a Duvo Pulse dashboard' clarifies the parameter's role. It doesn't explicitly name or explain the parameter format, making this adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the version history of a Duvo Pulse dashboard' with ordering 'newest first.' It also distinguishes itself from related Pulse tools by noting the version id is meant for the restore and version-render endpoints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context by noting that edit access is required and that the returned version id should be used with the restore and version-render endpoints. It doesn't explicitly enumerate when not to use this tool versus siblings, but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listQueueAgentsList Queue AgentsA
Read-onlyIdempotent
Inspect

List agents bound to a queue as producers (agents that push cases into the queue) or consumers (agents triggered by cases in the queue).

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful domain context about producer/consumer semantics, but does not disclose behavioral details such as pagination, ordering, or permission requirements. This is acceptable given the annotations, but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence front-loads the core action and resource, then uses parenthetical clarification for the two roles. No filler or redundance; every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one required, well-documented parameter and annotations covering idempotency and non-destructiveness, the description is complete. An agent has enough information to invoke it correctly without needing an output schema or additional behavioral notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents queue_id with format, pattern, and a clear description ('The queue's unique identifier'), so schema coverage is 100%. The description reinforces that the queue is the binding context but does not add parameter-level meaning beyond the schema, matching the baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List agents bound to a queue'. It also clarifies two distinct roles — producers (push cases into the queue) and consumers (triggered by cases in the queue) — which distinguishes this from generic agent-listing tools like listAgents or listQueues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear it is about queue-agent bindings rather than all agents or all queues, giving an agent enough context to select it over generic sibling tools. It does not explicitly name alternatives or state when not to use it, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listQueueAggregationsList Queue AggregationsB
Read-onlyIdempotent
Inspect

List a queue's aggregation definitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
queue_idYesThe queue's unique identifier

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior, and the description adds that the result is the queue's 'aggregation definitions' rather than computed results. It does not disclose pagination behavior, ordering, or the response when a queue has no aggregations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. Every word contributes to identifying the verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and annotations cover its safety profile, so the core one-liner is close to adequate. However, with no output schema, it would be stronger with a note about pagination and a distinction from result/evaluate/refresh aggregation siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%; queue_id is documented, but limit and offset are not described in the schema or the tool description. The description adds no meaning for the pagination parameters, which is a notable gap at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and a scoped resource ('a queue's aggregation definitions'), making the operation identifiable. It is distinguishable from siblings like getQueueAggregationResult or refreshQueueAggregation by the word 'definitions', 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided for when to use this tool versus alternatives such as getQueueAggregationResult, evaluateQueueAggregation, or createQueueAggregation. The only usage signal is the verb 'List', leaving the agent to infer context from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listQueueLabelsList Queue LabelsA
Read-onlyIdempotent
Inspect

List every label defined on a queue along with the count of cases each label is assigned to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of labels per page (1-1000, default 1000).
offsetNoZero-based offset for pagination.
queue_idYesThe queue's unique identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the result shape (label and case count) but does not disclose pagination behavior, ordering, or whether counts include only active cases. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, focused sentence that states scope, resource, and returned information without any filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one required parameter and three documented parameters, the description is adequately complete. It explains the list scope and the per-item count. It could mention pagination explicitly, but the limit/offset parameters already signal this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the input schema with type and meaning. The description does not add parameter-level detail, but the schema carries the burden, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List'), a clear resource ('every label defined on a queue'), and a distinctive result ('count of cases each label is assigned to'). This clearly distinguishes it from sibling tools like listCaseLabels or listClarityProcessLabels by scoping labels to a queue with case counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any explicit guidance on when to use this tool versus alternatives such as listCaseLabels. It implies queue-level label enumeration through the queue_id parameter, but there is no stated exclusion, prerequisite, or comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listQueuesList QueuesB
Read-onlyIdempotent
Inspect

List queues for your team.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of queues per page (1-250, default 250)
offsetNoNumber of queues to skip
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
automation_idNoOnly return queues belonging to this automation.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds the team-scoping context, but it does not disclose pagination behavior, response shape, or any additional behavioral traits beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence conveys the tool's purpose without unnecessary words. For such a simple listing operation, this is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, rich parameter descriptions, and annotations covering safety, the description is largely sufficient. It could be slightly stronger by mentioning pagination or return shape, but nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (limit, offset, team_id, automation_id) clearly documented. The description itself adds no parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('queues'), with a team scope. It does not explicitly differentiate itself from sibling tools like getQueue, listQueueAgents, or listQueueLabels, but the primary purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for paginated/bulk queue listing, nor does it distinguish from getQueue or other queue-related list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRevisionIntegrationConnectionsList Revision Integration ConnectionsA
Read-onlyIdempotent
Inspect

List the connections you have pinned to this build's integration slot. Multi-pin is supported: you can pin multiple connections to the same slot.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
integration_idYesIntegration ID (catalog integration ID or slot ID from the list response)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds a useful behavioral detail beyond annotations: multi-pin is supported, so multiple connections may appear for the same slot. It does not cover return format or pagination, but for a simple read-only list this is a reasonable level of disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the primary action and target are front-loaded. The second sentence adds only the non-obvious multi-pin behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation, the description, schema, and annotations give an agent enough to call it correctly. It does not describe the return shape, but no output schema exists and the purpose makes the response type predictable. Slight ambiguity around what exactly an 'integration slot' is remains, but the schema's integration_id note mitigates it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with descriptions, including the note that integration_id can be a slot ID. The description itself adds no parameter-level meaning. With full schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource: it lists connections pinned to a build's integration slot, not all connections. The 'pinned' and 'slot' wording distinguishes it from broader tools like listConnections and listRevisionIntegrations. The multi-pin note further clarifies the scope of what is being listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case – inspecting pinned connections for a build's integration slot – but does not explicitly say when to prefer it over alternatives like listRevisionIntegrations or listConnections. It provides no exclusions or prerequisites. The context is inferable, but explicit routing guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRevisionIntegrationQueuesList Revision Integration QueuesA
Read-onlyIdempotent
Inspect

List the queues linked to this build's case-queue integration slot. Only meaningful for case-queue-producer and case-queue-consumer integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
integration_idYesIntegration ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety and mutation profile is covered. The description adds an applicability qualifier but does not disclose return shape, pagination, or what 'linked queues' means. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: the first states the action and resource, the second adds a necessary scope qualifier. There is no filler, repetition of schema details, or unnecessary domain explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with fully schema-covered UUID parameters and safety annotations, the description supplies the essential selection context. The only minor gap is that it assumes familiarity with the 'case-queue integration slot' concept and does not describe the response shape, but no output schema exists and the operation is straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the schema with UUID formats and 'Agent ID', 'Build ID', and 'Integration ID' labels. The description adds domain context about case-queue integrations but does not meaningfully elaborate on the individual parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies a precise resource: queues linked to a build's case-queue integration slot. It also narrows applicability to case-queue-producer and case-queue-consumer integrations. It does not explicitly contrast itself with siblings like listRevisionIntegrationConnections or listRevisionIntegrations, so it falls 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Only meaningful for case-queue-producer and case-queue-consumer integrations' provides clear context for when the tool applies and implicitly warns against using it for other integration types. It does not name specific alternative tools or give an explicit 'when not to use' beyond that applicability condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRevisionIntegrationsList Revision IntegrationsB
Read-onlyIdempotent
Inspect

List integrations attached to an agent revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only the scope 'attached to an agent revision,' which is useful but not rich behavioral context such as ordering, pagination, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded and free of fluff. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with two clearly-specified UUID parameters, the description is largely complete. However, with no output schema and no mention of what fields or entities the returned integrations contain, there is a minor gap, and sibling confusion is not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both agent_id and build_id are documented in the schema with format and pattern constraints. The description adds no additional parameter meaning beyond what the schema already provides, which matches the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list integrations attached to an agent revision. It is clear and distinct from the generic listIntegrations sibling, but it does not explicitly differentiate itself from closely related siblings like listRevisionIntegrationConnections or listRevisionIntegrationQueues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternative integration-related list tools. An agent might confuse it with listIntegrations, listRevisionIntegrationConnections, or listRevisionIntegrationQueues without additional context about what distinguishes 'integrations' from these related resources.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRevisionLoginsList Revision LoginsA
Read-onlyIdempotent
Inspect

List logins attached to a specific revision (build) of an assignment. Returns metadata only — passwords and OTP secrets are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable context beyond annotations by stating the return is metadata only and that passwords and OTP secrets are never exposed, which is critical for an agent handling sensitive login data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler. The core operation, scope, and important security constraint are front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with strong annotations, the description covers the essential operation and safety expectations. It lacks detail on the exact fields returned or pagination, but this is minor given the tool's simplicity and the secrecy guarantee.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden of explaining parameters. It clarifies that 'build' means a revision and ties the tool to an assignment, which helps infer that agentId identifies the assignment and buildId identifies the revision. However, it never explicitly names or maps the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (List), resource (logins attached to a specific revision/build of an assignment), and scope. It is easy to distinguish from sibling tools like attachRevisionLogin, detachRevisionLogin, and listRevisionSecrets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by defining what the tool lists, but it does not explicitly state when to use this tool versus alternatives like listRevisionSecrets or listRevisionIntegrations. No exclusions or routing guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRevisionSecretsList Revision SecretsA
Read-onlyIdempotent
Inspect

List env-var secrets attached to a specific revision (build) of an assignment. Returns metadata and env-var keys only — secret values are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes
buildIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context by stating that secret values are never exposed and that only metadata and env-var keys are returned — privacy-relevant behavior not inferable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action and target are front-loaded, and the return-behavior caveat about secret values is included in a compact, high-value clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list-only tool with two required parameters and no output schema, the description gives a clear scope and a basic return contract: metadata and env-var keys. It could be more complete by listing what metadata is included, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It maps buildId to 'revision (build)' and agentId to 'assignment', which gives useful semantic context. However, it does not explicitly name which parameter is which, or explain how to obtain these IDs, leaving some semantic work undone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('env-var secrets attached to a specific revision (build) of an assignment'). It clearly differentiates from siblings like attachRevisionSecret, detachRevisionSecret, and listSecrets by targeting revision-scoped secrets, and adds that only metadata and keys are returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need the env-var secret keys and metadata for a particular revision/build. However, it does not explicitly mention alternatives, such as listSecrets for org-level secrets or getSecret for retrieving a secret value, so the agent is left to infer the intended context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRunMessagesList Run MessagesA
Read-onlyIdempotent
Inspect

Get paginated messages for an agent run. Messages are returned in chronological order.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of messages per page (1-50, default 20)
offsetNoNumber of messages to skip
run_idYesThe run's unique identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral details about pagination and chronological ordering, but it does not disclose response shape or behavior for invalid or missing run IDs. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. It front-loads the core purpose and adds ordering behavior in the second sentence, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only listing tool with fully documented parameters and strong annotations, the description is nearly complete. It could be more complete by distinguishing itself from listCaseRunRecentMessages or noting the absence of a response schema, but those are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all three parameters, including limit, offset, and run_id. The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get), resource (messages), and scope (an agent run), and adds that results are paginated and chronological. It does not explicitly differentiate from sibling tools like listCaseRunRecentMessages, so it stops short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving messages belonging to a specific run, which provides basic usage context. However, it offers no explicit guidance on when to prefer this over related tools such as listCaseRunRecentMessages or listRuns, and no when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRunsList RunsA
Read-onlyIdempotent
Inspect

List runs for the current team. Supports filtering by agent, user, queue, status, etc. Messages, evaluation data, and queue metadata are included where available. Set count_only=true to skip Run row selection and enrichment. The normal response shape is returned with data: [] and the matching total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of runs per page (1-100, default 20)
sinceNoReturn runs completed at or after this ISO-8601 timestamp. Runs that have not completed are excluded.
untilNoReturn runs completed before this ISO-8601 timestamp. The upper bound is exclusive. Runs that have not completed are excluded.
offsetNoNumber of runs to skip
searchNoFull-text search across run titles and case titles
sourceNoFilter to runs created from this source (e.g. api, schedule)
statusNoFilter to runs with this status
sort_byNoField to sort by (default created_at)created_at
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
user_idNoFilter to runs owned by this user; non-superadmin callers are scoped to themselves regardless of this value
agent_idNoFilter to runs for this agent
digest_idNo
count_onlyNoSkip row selection and enrichment. The normal list response shape is returned with an empty row array and the matching total.false
has_issuesNoFilter on the run's latest successful evaluation: true returns only runs it flagged, false only runs it did not. Only the latest evaluation counts — an older flag does not match — and a run whose latest evaluation errored, or that has none, counts as unflagged. Omit to return both.
sort_orderNoSort direction (default desc)desc
automation_idNoFilter to runs whose agent belongs to this automation
case_queue_idNoFilter to runs associated with this queue
issue_severityNoIf set, only return runs whose latest successful evaluation has at least one failing rubric with this severity (critical | medium | low). Implies has_issues; legacy evaluations without severity companion fields do not match this filter.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond the annotations: it discloses that messages, evaluation data, and queue metadata are included where available, and that count_only=true skips row selection and enrichment while still returning the normal response shape with data: [] and the matching total. This is meaningful behavioral disclosure about response shape and enrichment behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by the filter summary and the count_only special case. Every sentence earns its place; the only minor inefficiency is the slight redundancy between 'count_only=true' in the description and the parameter's own schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 18 parameters but 0 required, high schema coverage, and no output schema, the description covers the essential context: scope, filters, included data, and the count_only behavior. It does not describe pagination details or the exact response shape beyond the count_only case, but the schema covers parameters and the annotations cover safety, so the description is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 94%, so the schema already documents nearly all parameters thoroughly. The description adds a little value by summarizing the filter dimensions and explaining the count_only behavior, but it does not add meaning beyond the schema for most parameters. Baseline 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List runs for the current team') and enumerates the main filter dimensions (agent, user, queue, status, etc.), which distinguishes it from sibling list tools like listCaseRuns and listOrgRuns. It does not explicitly name a sibling to differentiate from, but the scope ('current team') and the mention of included data (messages, evaluation data, queue metadata) make the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use the tool: to list runs for the current team with filtering, and it explains the count_only mode as an alternative for skipping enrichment. It does not explicitly state when not to use it or name alternatives like listOrgRuns or listCaseRuns, but the 'current team' scoping and the filter list imply the intended use case well.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSandboxFilesList Sandbox FilesB
Read-onlyIdempotent
Inspect

List files in a sandbox directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory to list files from (defaults to /workspace)/workspace
sandbox_idYesThe sandbox's unique identifier

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered elsewhere. The description adds no behavioral detail beyond the title, such as whether the listing is recursive, whether hidden files are included, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler: it names the verb and the resource immediately. It is as concise as a simple list operation needs to be, even though other dimensions lack depth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with complete parameter documentation and safety annotations, the description is nearly sufficient: an agent knows it needs a sandbox_id and can optionally pass a path. The absence of an output schema and the close sibling listFiles leave minor ambiguity, but the core call is fully determined by the schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with sandbox_id documented as the sandbox's unique identifier and path documented as the directory to list with a default of /workspace. The description's phrase 'sandbox directory' only restates that context and adds no new parameter meaning, so the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('List') and a specific resource ('files in a sandbox directory'), so an agent can understand the basic function. However, it does not explicitly distinguish this tool from the sibling listFiles, which likely has overlapping behavior, so it falls 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use listSandboxFiles versus listFiles, getFileContent, or uploadSandboxFile. The only hint is the word 'sandbox', which implies the tool is for sandbox-scoped file listing, but the intended selection criteria are not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSecretsList SecretsA
Read-onlyIdempotent
Inspect

List env-var secrets visible to the caller — team-shared (user_id IS NULL) plus the caller's own personal entries. Returns metadata and env-var keys only; secret values are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: the exact visibility scope (team-shared with user_id IS NULL plus the caller's own entries) and the security-relevant guarantee that secret values are never returned. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences: the action and scope come first, followed by the key return-value constraint. There is no filler, no repetition of schema details, and no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-optional-param, read-only list tool with strong schema coverage and annotations, the description adequately covers what is returned, what is excluded, and who can see what. It stops short of listing exact metadata fields or pagination behavior, but nothing essential for selecting and invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional team_id parameter is fully described in the schema, including fallback behavior for API keys and the requirement for OAuth callers to pass the target team. The description itself adds no additional parameter-level meaning, so the schema-covered baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List env-var secrets') with a precise scope: team-shared entries plus the caller's own personal entries. It also distinguishes itself from value-returning secret tools by explicitly noting that secret values are never exposed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an implicit usage context: use this to enumerate visible secrets and obtain metadata/keys only, not values. However, it does not explicitly name alternatives like getSecret or state when to prefer them, so alternative routing 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.

listSkillAssignmentsList Skill AssignmentsA
Read-onlyIdempotent
Inspect

List the agents in the current team whose live build references the given skill. Used to warn users that editing a skill will affect every agent that uses it.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond these: the scope is the 'current team' (complementing openWorldHint=false by defining the closed-world boundary), and only 'live build' references count — an important nuance distinguishing current usage from draft or historical revisions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The core function is front-loaded in the first sentence, and the second sentence earns its place by explaining the tool's purpose in an agent's decision workflow. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with comprehensive annotations and 100% schema coverage, the description is nearly complete. It specifies scope, the meaning of the result, and when to use it. The only minor gap is the return format, which is not documented since there is no output schema — but 'List the agents…' makes the return shape reasonably inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies — the schema already documents skill_id as a UUID. The description reinforces the semantic ('the given skill' maps to skill_id) but adds no format or syntax details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a specific resource ('agents in the current team'), and a precise qualifier ('whose live build references the given skill'). It defines what an 'assignment' means in this context, distinguishing it from sibling tools like listAgents, listTeamMembers, listSkillRevisions, and listSkills without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence provides a clear use case: 'Used to warn users that editing a skill will affect every agent that uses it.' This tells an agent when to call the tool (before editing/deleting a skill to assess impact). It doesn't explicitly name alternatives or exclusions, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSkillFilesList Skill FilesA
Read-onlyIdempotent
Inspect

List all files in a skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the result is the complete file set ('all files'), but does not disclose return shape, whether directories are traversed, or error behavior, which is a moderate gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single six-word sentence with no repetition or filler. Every word carries meaning 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.

Completeness3/5

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 operation with rich annotations, the description is mostly sufficient. However, with no output schema and a sibling named listSkillRevisionFiles, it would be stronger if it clarified whether it returns the current skill's files, metadata fields, or nesting details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters and already documents skill_id as a UUID. The description adds no parameter-level meaning, so it stays at the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and object: 'List all files in a skill.' It is unambiguous about the resource being listed, but it does not differentiate this tool from nearby siblings like listSkillRevisionFiles or listFiles, so it falls short of full separation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you need the file set for a skill. It does not explicitly state when to prefer it over listSkillRevisionFiles or how it differs from listFiles, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSkillRevisionFilesList Skill Revision FilesA
Read-onlyIdempotent
Inspect

List the files in a skill revision, one page at a time. When has_more is true, pass next_cursor back as cursor to fetch the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of files to return per page (1-1000, default 100)
cursorNoOpaque continuation token from a previous response's `next_cursor`. Omit for the first page.
skill_revision_idYesSkill revision ID.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation as read-only, idempotent, and non-destructive, lowering the burden on the description. The description adds meaningful behavioral context about the pagination contract, explaining how to use `has_more` and `next_cursor` to continue fetching pages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core operation is stated first, and the pagination detail that is essential to correct invocation is placed right after.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only paginated list tool, the description covers the essential return-related behavior by naming `has_more` and `next_cursor`. It doesn't describe the file object shape, but the lack of an output schema is partially mitigated by the simplicity of the operation and the clear resource being listed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage, documenting all three parameters with descriptions, defaults, and constraints. The description mostly reiterates the cursor behavior already captured in the schema ('Opaque continuation token from a previous response's `next_cursor`'), so it adds little new semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a specific resource ('files in a skill revision'), and adds pagination context ('one page at a time'). This clearly distinguishes it from siblings like listSkillRevisions (lists revisions) and listSkillFiles (lists files at the skill level).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys when to use this tool: when you need the files belonging to a specific skill revision. It doesn't explicitly name alternatives or exclusions, but the resource scoping ('in a skill revision') provides clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSkillRevisionsList Skill RevisionsA
Read-onlyIdempotent
Inspect

List a skill's version history. Each revision is a snapshot of the skill's files; at most one is active (live) at a time, plus at most one open draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of revisions per page (1-100, default 20)
offsetNoNumber of revisions to skip
skill_idYesSkill ID.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable non-obvious context about revision semantics: each revision is a file snapshot, and there is at most one active/live revision and one open draft. This goes meaningfully beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The primary action is front-loaded, and the second sentence earns its place by explaining the revision/live/draft model that is essential to understanding the result.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with strong annotations and complete parameter documentation, the description conveys the essential output concept: a version history of file snapshots with at most one live revision and one open draft. It leaves minor details implicit, such as sort order and whether the draft appears in the paginated list, but these are not significant enough to make the tool hard to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with skill_id, limit, and offset all documented in the schema. The description does not add parameter-level detail, but it does not need to because the schema fully explains the parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and the resource ('a skill's version history'), then explains what a revision is: a snapshot of the skill's files with at most one live revision and one open draft. This uniquely distinguishes it from sibling tools like listSkillRevisionFiles, which list files inside a revision, and getRevision, which retrieves a specific revision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. There is no mention of alternatives such as getRevision or listSkillRevisionFiles, nor any conditions under which this tool should be chosen over them. The domain context implies a listing use case, but an agent must infer the routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSkillsList SkillsA
Read-onlyIdempotent
Inspect

List all skills for the current team, including system skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the 'current team' scope and inclusion of system skills, which is useful context beyond annotations, but it does not address output format 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, focused sentence that front-loads the action and scope. Every word earns its place; there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter, read-only list tool with complete schema documentation and safety annotations, this description is sufficient. It tells the agent what will be listed and the special inclusion of system skills, and no output schema is needed for a simple list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the team_id parameter is already thoroughly documented with fallback and restriction behavior. The tool description adds no extra parameter semantics beyond mentioning 'current team,' 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('List') and resource ('all skills for the current team'), and the phrase 'including system skills' sharpens scope against sibling tools such as listSystemSkills. An agent can tell what this tool 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to prefer this tool over alternatives; sibling listSystemSkills exists and is not referenced. The description only implies a generic listing use case, and the team_id parameter description covers team selection rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSystemSkillsList System SkillsA
Read-onlyIdempotent
Inspect

List all system skills (skills available to all teams).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, which cover the safety profile. The description adds the scoping context that the tool returns system-wide skills consistent with openWorldHint=false, but it discloses no additional behavioral traits such as pagination, ordering, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, followed by a compact parenthetical that adds disambiguating scope. Every word earns its place with negligible waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameter-less, read-only list operation, the description plus annotations are nearly sufficient. The only gap is unspecified return properties or pagination, but the trivial complexity makes this a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty with zero parameters, so there is nothing for the description to clarify. Baseline 4 applies for parameter-less tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('list') and resource ('system skills'), and the parenthetical defines system skills as 'skills available to all teams,' which disambiguates it from close siblings such as listSkills, listSkillAssignments, and listSkillRevisions. An agent can distinguish this tool 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical gives implicit usage context — use this when you want skills available to all teams. However, no alternative tool is named and no explicit when-not-to-use guidance is given, so routing among the many skill-related 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.

listTeamInvitesList Team InvitesA
Read-onlyIdempotent
Inspect

List a team's pending invitations — everyone invited who has not yet accepted or declined. Pass processId to list the pending invitations for a single Clarity process instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
processIdNoList the pending invitations for this Clarity process instead of the team's own invitations. Requires the process creator or a team admin.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful scoping semantics (pending-only, processId override), but does not disclose pagination, response shape, or permission nuances beyond what the schema already provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with the main action front-loaded and the alternative invocation clearly stated. Every word earns its place, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with zero required parameters and rich parameter schemas, the description is mostly complete. It does not describe return fields or pagination, which would be useful given there is no output schema, but an agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already well documented in the schema. The description adds a helpful 'instead' framing for processId but does not materially go beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: list a team's pending invitations, and defines 'pending' as not yet accepted or declined. It also distinguishes the processId-scoped variant. However, it does not explicitly differentiate this tool from sibling tools like listTeamMembers or getTeamInviteLink.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: list pending team invitations, or pass processId to list pending invitations for a single Clarity process. It does not explicitly state when not to use this tool or name alternative list tools, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listTeamMembersList Team MembersA
Read-onlyIdempotent
Inspect

List members of a team. The authenticated session or API key must be scoped to the requested team.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of members per page (1-100, default 50)
offsetNoNumber of members to skip
searchNoOptional case-insensitive name or email search
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by requiring the authenticated session or API key to be scoped to the team, which is a real constraint beyond what annotations express. It does not describe return values or error behavior, but the annotations carry most of the safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no wasted words. It states the core action first and the auth precondition second, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity list operation, the description combined with the fully documented schema and safety annotations is sufficient for correct invocation. There is no output schema, but 'list members of a team' adequately signals that the result is a member list. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself already provides detailed parameter semantics, including the nuanced team_id guidance for API keys versus OAuth callers. The description only adds a general auth-scoping requirement and does not elaborate on limit, offset, or search beyond what the schema already documents. Baseline 3 is appropriate when the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('members of a team'), making the tool's purpose immediately understandable. It is distinguishable from mutation siblings like removeTeamMember and updateTeamMemberRole by being a read operation, but it does not explicitly name or contrast any sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this tool lists team members. It also provides a practical precondition — the session or API key must be scoped to the requested team — which helps an agent decide whether the call can succeed. It does not mention alternative tools, but the operation is simple enough that no exclusions are necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markAllNotificationsReadMark All Notifications ReadA
Idempotent
Inspect

Mark all notifications as read for the authenticated user's current team. Returns the count of notifications that were updated. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=false and idempotentHint=true, which the description does not contradict. The description adds value beyond annotations by disclosing the return value (count of updated notifications), the 404 failure mode when the feature is disabled, and the team-scoping constraint. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler. The action is front-loaded, followed by the return value, then the feature prerequisite. Each sentence earns its place; the description is compact and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool with 100% schema coverage and safety annotations, the description covers action, scope, return value, and error condition. The only minor gap is a slight ambiguity about whether 'all notifications' means all of the user's notifications within the team or all team notifications, and it does not mention related read-state tools. Otherwise, nothing needed 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the team_id parameter already carries a rich description (API key pinning, OAuth multi-team behavior, fallback and rejection rules). The tool description adds mild framing by referencing 'the authenticated user's current team,' but the schema does the heavy lifting for parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('mark') and resource ('all notifications') with an explicit scope ('the authenticated user's current team'). The word 'all' inherently distinguishes it from siblings markNotificationRead and markNotificationBatchRead, and 'mark as read' distinguishes it from deleteAllNotifications/deleteReadNotifications. Purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear precondition ('Requires the Notification Center feature; returns 404 when not enabled') that tells an agent when the tool is available, and the scope ('current team') frames when it applies. However, it does not explicitly name alternatives or give when-not-to-use guidance (e.g., when a batch subset is preferred over all notifications). Usage context is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markNotificationBatchReadMark Notification Batch ReadA
Idempotent
Inspect

Mark every unread live member of a notification batch as read for the authenticated user. Pass types to narrow the mark-read to those member types, and severity (exact) or minSeverity (threshold, mutually exclusive with severity) to narrow it by urgency — e.g. the page's active filters; omit them to mark every live member. Narrowing matters when the batch card was rendered under a filter: the rows marked read should be the rows the card counted. Pass openedFrom to record which channel the reader came through, on every member this call marks read. Returns the count of members that were updated. Requires the Notification Center feature; returns 404 when it is not enabled for the team or the batch does not exist or belongs to another recipient/team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe notification batch's unique identifier
typesNo
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
severityNo
openedFromNo
minSeverityNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations give idempotentHint=true and destructiveHint=false, so safety/idempotency is covered. The description adds real value beyond that: it discloses the return value ('count of members that were updated'), the feature dependency (requires Notification Center), and the 404 conditions (feature disabled, batch missing, or belongs to another recipient/team). It does not restate the annotation hints, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then filter semantics, then channel recording, then return/auth behavior. Every sentence carries information, though the sentence on filtering rationale ('Narrowing matters when...') is somewhat verbose and could be tighter. Overall efficient for the amount of conditional behavior it must convey.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation with no output schema and low schema coverage, the description covers what an agent needs: scope of effect, filter behavior, mutual exclusivity, return count, feature gating, and 404 failure modes. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only id and team_id have descriptions), so the description must compensate and largely does: it explains types as narrowing member types, severity as exact vs minSeverity as threshold and mutually exclusive, and openedFrom as recording the read channel applied to every updated member. team_id semantics are left to the schema, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Mark every unread live member of a notification batch as read for the authenticated user.' Distinguishes clearly from siblings like markNotificationRead (singular) and markAllNotificationsRead (no batch scoping) by emphasizing batch-membership and the 'live/unread' qualifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when narrowing applies: 'Narrowing matters when the batch card was rendered under a filter: the rows marked read should be the rows the card counted.' It documents mutually-exclusive parameters (severity vs minSeverity) and states omitting filters marks everything. This is conditional guidance an agent could not infer from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markNotificationReadMark Notification ReadA
Idempotent
Inspect

Mark a notification as read for the authenticated user. Idempotent — calling it again on an already-read notification still returns success. Pass openedFrom to record which channel the reader came through (in_app when they were already in Duvo, or email/slack/teams from the notificationSource param on an external link); omit it when the read is not somebody opening the notification. Requires the Notification Center feature; returns 404 when it is not enabled for the team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe notification's unique identifier
openedFromNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses meaningful behavior beyond annotations: idempotency semantics (returns success even if already read), feature gating requiring the Notification Center feature, and 404 behavior when disabled. These add real context that annotations (idempotentHint, readOnlyHint=false) alone don'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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Approximately three dense sentences with no wasted verbiage, front-loaded with the core action. Slightly long but each sentence contributes distinct information (behavior, param semantics, prerequisite).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a two-parameter mutation tool with no output schema. All salient behavioral aspects (idempotency, feature gating, 404 conditions, parameter semantics) are covered, giving an agent everything needed to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, so the description must compensate and does: it explains the semantic meaning of openedFrom values and when to omit it, notably clarifying 'in_app' vs external source channels. The id parameter is adequately documented by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Mark a notification as read for the authenticated user') and distinguishes scope from siblings like markAllNotificationsRead and markNotificationBatchRead by singling out one notification for the authenticated user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: when to pass openedFrom ('in_app' vs external link channels) and when to omit it. However, it does not explicitly name alternatives or contrast with markAllNotificationsRead/markNotificationBatchRead for multi-notification cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moveAgentMove AgentAInspect

Move an agent (and its connected workspace) to a different team. Pass dry_run=true to preview the closure without applying changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoWhen true, preview the closure and warnings without applying any changes.
agent_idYesThe ID of the agent to move.
target_team_idYesThe ID of the team to move the agent into.
bypass_standalone_gateNoWhen true, move the agent together with every connected queue, trigger, and handover peer instead of rejecting a non-standalone agent. Defaults to false.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond annotations by revealing that the connected workspace is moved and that the operation involves a 'closure' that can be previewed with dry_run. Annotations already signal mutation through readOnlyHint=false, and the description enriches this with concrete 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core action is front-loaded, and the dry-run guidance is placed second as a natural follow-up. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with full schema coverage and annotations, the description gives enough context: what is moved, what to preview, and that the operation can be dry-run. It does not explain return values or deeper closure consequences, but the absence of an output schema and the presence of the bypass_standalone_gate parameter in the schema make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all four parameters. The description mentions dry_run=true but does not add meaning beyond the schema. Baseline 3 is appropriate because the structured data already carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Move'), a specific resource ('an agent and its connected workspace'), and the target ('to a different team'). This clearly differentiates it from siblings like moveAgentsToFolder or movePulseDashboard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context: moving an agent to a different team affects the connected workspace. It also provides a direct usage hint for dry_run=true. It does not explicitly enumerate alternatives or when-not-to-use, but the core use case is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moveAgentsToFolderMove Agents To FolderAInspect

Move one or more agents (assignments) into a folder, or to the root level.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
agent_idsYesIDs of the agents (assignments) to move. Must be unique.
folder_idYesDestination folder ID. Pass null to move the agents to the root level.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a non-read-only mutation that is not destructive or idempotent. The description adds the specific move behavior and the root-level option, but does not disclose side effects such as leaving the previous folder or permissions required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action, target, and destination options with no filler. It is concise and immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward move operation with fully self-describing parameters, the description plus schema provides enough to invoke correctly. It omits return-value details, but no output schema exists and the operation is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: each parameter has a meaningful description, including the null meaning of folder_id. The tool description adds no parameter-level details beyond what the schema already provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (move), resource (agents/assignments), and destination (folder or root level). It is unambiguous, though it does not explicitly differentiate from the similarly named sibling moveAgent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied by the operation—use it when agents need to be placed into a folder or moved back to root—but no alternatives or when-not-to-use conditions are mentioned, despite relevant siblings like moveAgent and moveClarityProcessesToFolder.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moveAutomationsToFolderMove Automations To FolderAInspect

Move one or more automations into an agent folder, or to the root level.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folder_idYesDestination folder ID. Pass null to move the automations to the root level.
automation_idsYesIDs of the automations to move. Must be unique.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description communicates that this is a move operation, including the root-level special case, which is useful beyond the bare tool name. Annotations already indicate readOnly=false and destructiveHint=false, and the description adds limited additional behavioral context such as failure modes, validation, or effects on existing folder membership.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that clearly states the action, the target, and the root-level exception. There is no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple move tool, the description plus the detailed input schema is largely sufficient. It covers the batch nature ('one or more automations') and the root-level destination, though it does not describe prerequisites like folder existence or what happens if an automation is already in the target folder.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description's mention of 'root level' aligns with the folder_id schema but does not add meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Move' with a clear resource ('automations') and destination ('agent folder' or 'root level'). It is easily distinguishable from sibling tools like moveAgentsToFolder and moveClarityProcessesToFolder by the resource type, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool when moving one or more automations into an agent folder or to the root level. It does not explicitly list exclusions or alternative tools, but the resource-focused wording makes the intended use unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moveClarityProcessesToFolderMove Clarity Processes To FolderAInspect

Move processes into a folder (or back to Unfiled)

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folderIdYesDestination folder ID, or null to move back to Unfiled.
processIdsYesClarity process IDs to move.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds the 'back to Unfiled' behavior, which is useful, but it does not disclose side effects such as the process being removed from its previous folder or behavior when some processIds are invalid. No annotation contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It conveys the primary operation and the key Unfiled exception in very few words, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple bulk-move operation with fully self-documenting parameters and no output schema, the description is complete enough. It states the action, the target, the special Unfiled case, and the schema covers the remaining invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for processIds, folderId, and team_id, including the null-to-Unfiled behavior. The tool description adds no extra parameter meaning beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Move processes into a folder (or back to Unfiled)'. It clearly distinguishes this tool from sibling move tools like moveAgentsToFolder and movePulseDashboard by naming Clarity processes, and it adds the important edge case of moving back to Unfiled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage well enough for a self-named operation, but it does not explicitly say when to prefer this over related tools such as updateClarityFolder or reorderClarityFolders, nor does it mention that folder IDs come from listClarityFolders. There are no exclusions or alternative routing hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

movePulseDashboardMove Pulse DashboardAInspect

Move a Pulse dashboard from the team in the URL to another team, keeping only its latest revision (chat history and older revisions are deleted). The caller must be a Manager or above on both teams. Pass dryRun=true to preview which Connections reconnect vs drop without applying changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoWhen true, only previews the move: reports which Connections would reconnect vs drop without changing anything.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
artifactIdYes
targetTeamIdYesID of the destination team the dashboard moves to.

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states that older revisions and chat history are deleted, yet the annotation destructiveHint is false. This is a direct contradiction between the description and annotations, severely undermining behavioral transparency. The tool is destructive in effect, but the annotation claims otherwise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two sentences to convey the action, key side effects, permissions, and optional dryRun. It is well-structured with no fluff, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential aspects: action, source/destination, permissions, side effects, and preview option. There is no output schema, but the absence is not a major gap since the operation's result (success/error) is typical. The description does not specify return details, but the tool's behavior is sufficiently explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Three of four parameters have detailed descriptions: dryRun explains preview behavior, team_id clarifies API key pinning, and targetTeamId indicates the destination. artifactId lacks a description but is clearly the dashboard UUID from context. Overall the descriptions add meaningful semantics beyond bare parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Move' and resource 'Pulse dashboard', specifies the source team (from the URL) and destination team (targetTeamId), and elaborates on the effect (keeping only latest revision, deleting chat history and older revisions). It also mentions permissions and dryRun preview, making the intent unambiguous and distinguishing it from related tools like duplicate or publish.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides preconditions (Manager or above on both teams) and the dryRun option, giving clear guidance on when and how to use the tool. However, it does not explicitly contrast with alternative tools like moveAgent or duplicatePulseDashboard, so a subtle 'use this when X' is missing, but the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

organizeClarityProcessLandscapeOrganize Clarity Process LandscapeAInspect

Start an asynchronous organization pass over the organization's unfiled processes, placing them into the Process Landscape where possible (organization admin+). Results appear progressively; started is false when there is nothing to organize.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
instructionsNoDeprecated: ignored. The organize pass takes no instructions.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a mutating, non-idempotent operation, so the description adds valuable context by disclosing async execution, progressive results, and the 'started is false when there is nothing to organize' edge case. It also surfaces the admin+ permission gate. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and scope, followed by the async and result behavior. There is no filler, no repetition of schema fields, and every clause contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema, the description covers the core action, admin permission, async execution, progressive appearance of results, and the meaningful false-start condition. It could specify how to observe progress or handle concurrent passes, but the provided context is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents instructions as deprecated/ignored but leaves orgId with only format and pattern. The description indirectly clarifies orgId as the target organization by referring to the organization's unfiled processes, but it does not explicitly map either parameter or provide additional semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action ('Start an asynchronous organization pass'), names the resource ('the organization's unfiled processes'), and states the destination ('placing them into the Process Landscape'). This clearly distinguishes it from sibling get/generate/propose landscape tools by framing it as an organizing operation rather than a read or generation operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: use this when you want to organize unfiled processes into the Process Landscape, and it flags the admin+ permission requirement. It does not explicitly name alternative tools or state when not to use it, so exclusion guidance is left somewhat implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pinRevisionIntegrationConnectionPin Revision Integration ConnectionAInspect

Pin one of your connections (from GET /v2/teams/:team_id/connections) to this build's integration slot. Multi-pin is supported: a single user can pin multiple connections to the same slot.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
connection_idYesID of one of your connections (from GET /v2/teams/:team_id/connections) to pin to this slot
integration_idYesIntegration ID (catalog integration ID or slot ID from the list response)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a valuable behavioral detail not present in the annotations: multi-pin is supported, meaning a single user can pin multiple connections to the same slot. This helps set expectations about non-replacement behavior. The annotations already signal a write operation and non-destructive behavior, and the description is consistent with those signals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action, then adds the most important behavioral nuance, multi-pin support. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple pin operation with four required parameters, the description plus schema provide enough context to invoke the tool correctly. It explains the source of connections, the target slot, and the key behavioral twist. The lack of an output schema is not a significant gap here, though it does not describe what happens to existing pins beyond implying coexistence through multi-pin support.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description reinforces where connection_id comes from and what an integration slot is, but it does not add new semantic detail beyond the schema. This is an adequate baseline case where structured information carries the weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (pin), a specific resource (connection), and a clear target (build's integration slot), while also specifying the source of valid connections via the GET endpoint. This clearly distinguishes it from siblings like unpinRevisionIntegrationConnection and listRevisionIntegrationConnections. It adds meaningful detail beyond the title by explaining what is pinned and where.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when pinning an existing connection to a build's integration slot, and it even tells the agent where to obtain valid connection IDs. It does not explicitly discuss alternatives or exclusion conditions, but the intended usage is unambiguous enough for an agent to select this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postprocessClaritySnapshotPostprocess Clarity SnapshotAInspect

Re-run postprocessing agents on an existing v2 clarity snapshot. Targets either the current-process snapshot or the automation proposal snapshot, identified by id in the body. Flips the process status to generating and returns 202 immediately; agents run asynchronously and flip the status back to review once they settle.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesThe snapshot kind to post-process.
process_idYesThe clarity process id
current_process_idNoRequired when type is `current_process`.
transformation_proposal_idNoRequired when type is `transformation_proposal`.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing key behavioral traits: it flips the process status to `generating`, returns 202 immediately, and runs agents asynchronously before flipping the status back to `review`. This gives an agent a clear model of the side effects and async behavior without contradicting the readOnlyHint=false annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: the action is front-loaded, followed by the target scope, then the async behavior. There is no filler or redundant repetition of schema information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action, target selection, immediate 202 response, and asynchronous completion behavior. With no output schema, it omits return-value specifics but provides enough for an agent to understand the operation's flow. The exact conditional id mapping is left to the schema, which fully documents it, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds some semantic grouping by naming the snapshot kinds, but it uses 'automation proposal' where the schema enum says 'transformation_proposal,' and it vaguely refers to 'identified by id in the body' without mapping ids to types. The parameter details are essentially carried by the schema, not the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Re-run postprocessing agents on an existing v2 clarity snapshot.' It further narrows the target to either the current-process snapshot or the automation proposal snapshot. This clearly distinguishes it from sibling snapshot operations like generateClarityProcessSnapshot, promoteClarityProcessSnapshot, saveClarityProcessSnapshot, revertClarityProcessSnapshot, and stopClarityProcessSnapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the use case: when you need to re-run postprocessing agents on an existing snapshot, and it identifies the two snapshot types it can target. However, it does not explicitly mention alternatives or provide 'when not to use' guidance, 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.

postRunMessagePost Run MessageAInspect

Post a message to an agent run. This will persist the message and resume the agent execution if the run is in a resumable state (waiting, completed, or interrupted).

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run's unique identifier
messageYesThe message content to send to the agent

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses concrete behavioral consequences: the message is persisted and execution may resume. It also specifies the three resumable states, adding real context an agent needs to predict effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states the primary action, the second states the side effect and its condition. The most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with annotations already covering mutability, the description fully characterizes the tool's core behavior and conditional resume effect. It does not detail error handling or return value, but there is no output schema and the simplicity of the call makes that gap minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both run_id and message already have clear schema descriptions. The tool description does not add meaning beyond the schema, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete action—'Post a message to an agent run'—and distinguishes it from run lifecycle siblings like startRun and stopRun by focusing on message delivery. It also names the resume side effect, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditions for when the resume behavior applies ('if the run is in a resumable state (waiting, completed, or interrupted)'), which tells an agent when the tool is meaningful. It does not explicitly name alternatives, but it provides enough context to route away from unrelated run tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

previewAgentCaseTriggerConflictsPreview Agent Case Trigger ConflictsA
Read-onlyIdempotent
Inspect

Preview which other agents would conflict with this agent's case trigger if it pointed at the given queue. Does not modify the trigger.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesThe agent's unique identifier
case_queue_idYesThe queue to check for conflicts against

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reiterates 'Does not modify the trigger,' which is redundant but consistent. It adds the context of the hypothetical queue check but does not disclose return format or potential side effects beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the primary purpose and immediately clarify non-modification. No wasted words; the description is tightly scoped and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only preview tool with two UUID parameters and no output schema, the description conveys the essential behavior and outcome (returns conflicting agents). It could mention the return format or any prerequisites (e.g., whether the agent must already have a trigger), but given the annotations and simplicity, it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters having clear descriptions (e.g., 'The agent's unique identifier' and 'The queue to check for conflicts against'). The tool description adds no additional semantic meaning 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Preview') and resource ('agent case trigger conflicts') and clarifies the hypothetical condition ('if it pointed at the given queue'). It distinguishes from create/update/delete triggers by explicitly noting it does not modify the trigger, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a planning use case ('Preview which other agents would conflict') but does not explicitly name alternatives or state when to use this vs. creating/updating a trigger. It says 'Does not modify the trigger' which hints at non-destructive intent, but lacks direct comparison to sibling tools like createAgentCaseTrigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probeMcpServerProbe an MCP server for available toolsAInspect

Probe an MCP server URL and list the tools it exposes. Useful as a dry-run before creating a connection — verifies the URL is reachable, that authentication headers (if any) are correct, and surfaces the tool catalog. Performs no writes; sits alongside /v2/teams/:team_id/connections/oauth/mcp/check (which probes the same URL for OAuth support).

ParametersJSON Schema
NameRequiredDescriptionDefault
headersNoOptional HTTP headers for authentication (raw server_url mode only)
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
server_urlNoRaw MCP server URL to probe (for custom MCP servers)
integration_slugNoCatalog integration slug. The backend resolves the MCP server URL and dummy auth headers server-side — no server_url or headers needed.

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description states 'Performs no writes', but the annotations declare readOnlyHint=false, creating a direct contradiction. This is a serious inconsistency that could mislead an agent about 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundancy. The key differentiator and side-effect statement are front-loaded, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description implies the result is a list/catalog of tools. The failure mode and return shape are not detailed, but the dry-run intent and no-write guarantee make it reasonably complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions already cover all four parameters at 100%. The description adds context about auth headers but does not materially extend the parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Probe') and resource ('an MCP server URL'), and explicitly contrasts with the sibling OAuth check tool, which probes the same URL for OAuth support. Clearly differentiates from checkMcpOAuth and authorizeMcpOAuth.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames when to use it ('as a dry-run before creating a connection') and what it verifies (reachability, auth headers, tool catalog). It also mentions the sibling OAuth-specific check, making the selection criteria clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

promoteClarityProcessSnapshotPromote Clarity Process SnapshotAInspect

Promote a draft or historic Clarity v2 snapshot to live for its kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
process_idYesThe clarity process id
snapshot_idYesSnapshot id

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that this is a state-changing 'promote' operation, and annotations confirm it is not read-only, not idempotent, and not marked destructive. However, it does not describe side effects such as what happens to the current live snapshot or whether promotion can be undone, leaving those details to inference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single 13-word sentence with no filler. The core action and target state are front-loaded, and every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation with three required, fully described parameters and no output schema, the description captures the essential behavior and allowed source states. It is slightly incomplete in not specifying what happens to the previous live snapshot or what the response contains, but annotations and schema cover the safety profile and parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are already fully documented in the input schema, so the description adds no additional parameter-level meaning. The baseline of 3 applies; notably, the schema's 'kind' description says 'Snapshot kind to list,' a likely copy-paste artifact that the tool description does not correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise state-transition: promote a 'draft or historic Clarity v2 snapshot' to 'live for its kind.' This clearly differentiates it from sibling snapshot tools like generate, save, list, revert, and stop, which create, persist, list, or reverse snapshots rather than changing their live status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'draft or historic ... to live' gives a clear trigger condition: use this tool when a non-live snapshot of either enum kind should become the live one. It does not explicitly name alternatives or when-not-to-use conditions, but the context is sufficient for choosing it over related snapshot operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

promoteRevisionPromote RevisionAInspect

Promote a draft or historic revision to the live version. The live revision is the one used by triggers and new runs. Fails if the revision is already live, or if a draft revision still has an active builder run.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYesThe build's unique identifier
revision_nameNoOptional display name to set on the promoted revision.
revision_descriptionNoOptional description for the promoted revision. Pass null to clear an existing description.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as a non-read-only, non-idempotent, non-destructive action; the description adds meaningful behavior on top by disclosing two failure modes and the effect on triggers/new runs. It does not contradict the annotations, though it could have clarified what happens to the previous live revision.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states the action, the second adds the consequence and failure conditions. There is no filler or redundancy, and the most important operational constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small mutation tool with no output schema, the description covers the action, its purpose, and key failure cases; optional parameters are fully documented in the schema. The only minor gaps are definitional context around what qualifies as a draft/historic revision and the exact relationship between build_id and the revision being promoted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% parameter description coverage, so the baseline is 3. The tool description adds no parameter-level detail beyond the schema, and it leaves the relationship between build_id and 'revision' implicit, but the schema's own property descriptions cover the three fields adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and object: 'Promote a draft or historic revision to the live version.' It also defines what 'live' means ('used by triggers and new runs'), making the tool's purpose unmistakable and distinct from read/update revision tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context: promotion is needed to make a revision live for triggers and new runs. It also provides when-not conditions by stating the call fails if the revision is already live or a draft still has an active builder run. It does not explicitly name sibling alternatives like promoteSkillRevision, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

promoteSkillRevisionPromote Skill RevisionA
Idempotent
Inspect

Make a skill revision the active (live) one. The previously active revision becomes historic and can be re-activated later. Idempotent: promoting the already-active revision succeeds rather than erroring, and still applies any revision_name / revision_description supplied in the body.

ParametersJSON Schema
NameRequiredDescriptionDefault
revision_nameNoOptional display name to set on the promoted revision.
skill_revision_idYesSkill revision ID.
revision_descriptionNoOptional description for the promoted revision. Pass null to clear an existing description.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as mutating and idempotent, but the description adds meaningful behavior beyond them: the previously active revision becomes historic and can be re-activated, and idempotent promotion still applies revision_name/revision_description. This gives an agent a clear mental model of side effects and reversibility without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the primary action first, then the state consequence, then the idempotent edge case. Every sentence earns its place and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter mutation with complete schema documentation and annotations covering idempotence and non-destructiveness, the description covers the important state transition, reversibility, and idempotent behavior. No output schema exists, and none is needed for correct invocation at this level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that revision_name and revision_description are applied even when promoting the already-active revision, which is a behavioral subtlety not obvious from the schema alone. It doesn't need to restate each parameter's schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Make a skill revision the active (live) one,' and clarifies the state transition (previously active becomes historic). It does not explicitly distinguish itself from the closely named sibling promoteRevision, so it stops shy of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to choose this tool over alternatives such as promoteRevision, updateSkillRevision, or createSkillRevision. There are no prerequisites, exclusions, or conditional use cases beyond the core action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proposeClarityLandscapeProcessPropose Clarity Landscape ProcessAInspect

Create a manual process in the organization's Process Landscape, either as an unassigned proposal or atomically assigned to an eligible team.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
orgIdYes
teamIdNo
parentIdNo
descriptionNoOne short paragraph (1-3 sentences) saying why this process belongs in the landscape. Use only what you saw in the captures. Say what the process is (don't just repeat the name), show proof it really happens, and name where you heard it - be as specific as the captures allow, like "a warehouse lead said so in their interview" or "it came up in two returns recordings". Use only facts from the captures: never make up sources, people, dates, quotes, or numbers, and don't stretch what was said. If you have no real proof the process happens, don't propose it.
materializationModeNoUse "proposal" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. Chat-scoped discovery agents may use proposal mode for their pinned team; direct human and API callers require Manager-or-above authority for that team. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. Defaults to "auto", which materializes a real process when `teamId` is set — except in a landscape-onboarding chat, which may only propose, and so defaults to "proposal".

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

All annotation hints are false, so the description carries the full disclosure burden. It discloses the critical behavioral distinction that proposal mode creates no real process record ('WITHOUT creating a real process record'), scopes idempotency to proposals ('an equivalent live proposal... is returned untouched rather than duplicated'), states the Manager-or-above authorization requirement, and reveals context-dependent defaulting (auto vs. proposal depending on caller context). The idempotency qualifier refines rather than contradicts idempotentHint=false, since auto mode creates new records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main description is a single verb-first sentence with zero filler. Every phrase earns its place: 'manual' distinguishes from automated processes, 'in the organization's Process Landscape' anchors the resource, and 'either as an unassigned proposal or atomically assigned to an eligible team' compresses the entire mode distinction into one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The two riskiest aspects — choosing proposal vs. auto mode and the role of teamId — are thoroughly covered by the combination of the main description and schema parameter docs, including auth, idempotency, and defaults. But with no output schema, the description never states what the tool returns (created process ID? proposal object?), parentId semantics are absent, and 'eligible team' eligibility criteria are undefined, leaving an agent to guess at failure conditions and result handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33%, below the 50% threshold where a baseline 3 would suffice, so the description must compensate. The main description's 'unassigned... or atomically assigned' dichotomy maps usefully to teamId, and materializationMode's schema doc explicitly ties teamId to proposal mode ('owned by teamId for review'). The description parameter also has unusually detailed authorship guidance. However, parentId semantics are entirely unexplained, 'eligible team' is left undefined, and name/orgId receive no elaboration beyond field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Create a manual process in the organization's Process Landscape') and immediately disambiguates the tool's dual behavior: unassigned proposal versus atomically assigned creation. It meaningfully narrows scope with 'manual process' among a sibling list containing createClarityProcess, createClarityProcessNode, and createClarityLandscapeNode. It stops short of a 5 because it never names a sibling it is not (e.g., createClarityProcess), leaving some differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The materializationMode parameter description provides explicit when-to-use guidance: 'proposal' for plausible-but-unverified processes with teamId required and no real record created, 'auto' to materialize when teamId is set, plus the landscape-onboarding-chat exception that forces proposal mode. It also states caller constraints (chat-scoped discovery agents vs. direct human/API callers requiring Manager-or-above). No explicit comparison to sibling tools like createClarityProcess, so it misses the 'alternatives' component of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publishPulseDashboardPublish Pulse DashboardAInspect

Publish (share) a Duvo Pulse dashboard to your whole team or your whole organization, or revert it to private (creator only). When publishing, set permission to 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it); organization-wide viewers outside the team always get view-only access.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
permissionNo
visibilityYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only declaring the operation mutates (readOnlyHint=false) without being destructive, the description adds meaningful constraints: organization-wide viewers always receive view-only access regardless of the permission value, and 'private' means creator-only. It also clarifies that the permission setting only governs teammates' access, which an agent could not infer from the schema alone. No contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences express the primary action, the reverse action, and the permission model with no wasted words. The parenthetical clarifications ('share', 'creator only', 'also iterate on it') are slightly repetitive but each adds precision rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers parameter semantics for the two enums and the resource type, which is the core of calling this tool correctly. It leaves gaps an agent would want for a non-idempotent mutation with no output schema: what the response looks like, who is authorized to publish, and what re-publishing (e.g., switching visibility or permission) does to existing shares.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full semantic burden, and it delivers on both enum parameters: it maps visibility values to their real-world meaning (private=creator only, team, organization) and defines permission (view vs edit, plus the org view-only override). artifactId is not elaborated, but its role as the dashboard identifier is obvious from the description and the uuid format in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action pair — 'Publish (share)' and 'revert it to private' — applied to a named resource, the Duvo Pulse dashboard, with explicit scopes (team, organization, creator). This makes the tool's function clearly distinct from dashboard-lifecycle siblings like createPulseDashboard, updatePulseDashboard, and deletePulseDashboard, though it never names 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the trigger condition — an agent should call this when the goal is changing a dashboard's sharing scope — and it usefully covers the unshare case ('revert it to private'). However, it gives no explicit when-not-to-use guidance and does not name alternatives such as updatePulseDashboard for content changes or sendPulseDashboardMessage for targeted distribution, 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.

refreshPulseDashboardRefresh Pulse DashboardAInspect

Trigger an on-demand data refresh of a Duvo Pulse dashboard. The dashboard regenerates its connection-sourced values in the background — poll GET /artifacts/{artifactId} for status.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations: the refresh is asynchronous, runs in the background, and requires polling GET /artifacts/{artifactId} for status. This aligns with readOnlyHint=false, idempotentHint=false, and destructiveHint=false, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, front-loaded sentences convey the trigger action, the background behavior, and the follow-up polling step. Every sentence earns its place with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter async mutation with no output schema, the description gives the essential workflow: trigger refresh, wait in background, poll for status. It could mention what the initial trigger response looks like or how long polling might take, but it is adequately complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only artifactId with UUID format and 0% schema description coverage. The description compensates by referencing artifactId in the polling URL, indicating the parameter identifies the artifact whose refresh status should be checked. Since there is only one parameter, this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Trigger an on-demand data refresh'), a specific resource ('Duvo Pulse dashboard'), and the resulting behavior ('regenerates its connection-sourced values in the background'). This clearly distinguishes it from related siblings like updatePulseDashboard, createPulseDashboard, or refreshQueueAggregation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case clear: refresh the dashboard's connection-sourced data on demand, then monitor via polling. It does not explicitly discuss alternatives or when not to use it, but the context is specific enough that an agent can determine when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refreshQueueAggregationRefresh Queue AggregationBInspect

Force a fresh recompute of an aggregation definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesThe queue's unique identifier
definition_idYesThe aggregation definition's identifier

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a mutating, non-idempotent operation, and the description adds the 'force fresh' semantics — implying it bypasses staleness checks and recomputes regardless of current state. However, it does not disclose whether the recompute is synchronous, whether it is expensive, what happens to the previously stored result, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Seven words in a single sentence with the action verb 'Force' front-loaded. There is no filler, and every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should explain what a successful refresh returns, but does not. Combined with unresolved sibling ambiguity (evaluate vs refresh vs get result) and no mention of sync/async behavior or side effects on existing results, an agent is left guessing about the consequences of calling this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both queue_id and definition_id are fully documented in the schema with identifiers and formats. The description adds no parameter-level meaning, which matches the baseline 3 since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Force a fresh recompute') and a specific resource ('aggregation definition'), making the core action unambiguous. However, it does not distinguish itself from siblings like evaluateQueueAggregation or getQueueAggregationResult, so an agent must infer the difference between refreshing, evaluating, and reading a result.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus siblings such as evaluateQueueAggregation, getQueueAggregationResult, or createQueueAggregation. There are no exclusions, no conditions, and no mention of preconditions (e.g., the definition must already exist), leaving selection entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rejectAgentSuggestionReject Agent SuggestionBInspect

Dismiss a pending suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe suggestion's unique identifier

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the 'pending' precondition, which is useful context beyond the annotations, and it does not contradict any annotation. However, it does not disclose whether dismissal is reversible, whether repeated calls error, or what state change occurs, despite idempotentHint being false for this state-changing action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler, immediately stating the action and target. It is appropriately sized for a one-parameter tool and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally viable for a simple action: it names the operation and the schema documents the parameter. However, it lacks routing context for when to reject rather than accept or consume a suggestion, and with no output schema it does not clarify expected results or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents 'id' as the suggestion's unique identifier. The description adds no parameter-level detail, but the schema fully covers this, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Dismiss') and object ('a pending suggestion'), making the core function clear. It does not explicitly differentiate from sibling accept/consume suggestion tools, but the reject verb and resource make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like acceptClarityCaptureSuggestion, acceptClarityTeamAssignmentSuggestion, or consumeAgentSuggestion. The description implies pending suggestions are the target but does not state exclusions, prerequisites, or alternative conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeAutomationAgentRemove Automation AgentA
DestructiveIdempotent
Inspect

Remove an agent from an automation on a team that changes its automations without revisions, deleting the agent. Its active runs are interrupted and their sandboxes paused, exactly as a standalone agent delete does.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
automation_idYesAutomation ID

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the operation deletes the agent, interrupts active runs, and pauses their sandboxes—materially beyond the destructiveHint annotation. This gives the agent a precise mental model of 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The information is valuable but packed into a single rambling sentence; the clause 'on a team that changes its automations without revisions' disrupts flow and could be clearer as separate sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter destructive tool with no output schema, the description covers the operation, side effects, and the relevant automation-modification context. It lacks only explicit sibling routing (e.g., when to use removeAutomationRevisionAgent instead) to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with simple descriptions ('Agent ID', 'Automation ID') that already define the two required UUIDs. The description adds no further parameter-level detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action: removing an agent from an automation, and explicitly notes the agent is deleted. The 'without revisions' clause and the deletion side effect distinguish it from revision-based and queue-removal siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: it applies to automations changed without revisions (direct-edit mode) and compares the effect to a standalone agent delete. It does not explicitly name alternatives like removeAutomationRevisionAgent or state when not to use them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeAutomationQueueRemove Automation QueueA
DestructiveIdempotent
Inspect

Remove a queue from an automation on a team that changes its automations without revisions, deleting the queue. Its cases are cleared and the runs working them interrupted, exactly as a standalone queue delete does.

ParametersJSON Schema
NameRequiredDescriptionDefault
automation_idYesAutomation ID
case_queue_idYesQueue ID

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the queue is deleted, its cases are cleared, and running executions are interrupted. It explicitly equates the behavior with a standalone queue delete, providing valuable side-effect context. No contradiction with the destructive or idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the core action stated first and side effects compressed into a single clause. The comparison to standalone queue deletion earns its place, though the sentence is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-UUID destructive operation, the description sufficiently explains the outcome: queue deletion, case clearing, and interruption of runs. It does not address not-found or permission errors, but the provided operational context is strong enough for an agent to understand the tool's effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds the relationship between the automation and the queue, but does not provide additional parameter-level meaning or context beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action: remove a queue from an automation and delete it. The phrase 'without revisions' signalss which automation-modification model this tool belongs to, distinguishing it from revision-based queue removal tools like removeAutomationRevisionQueue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear selection context: use this on teams that change automations without revisions, which implicitly excludes revision-managed workflows. It does not explicitly name the alternative tool or state 'use X instead', so it falls short of a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeAutomationRevisionAgentRemove Automation Revision AgentA
DestructiveIdempotent
Inspect

Remove an agent from a draft revision (forward-only removal). Any queue routing to the agent in the draft is unrouted as part of the same change. Live and historic revisions are immutable.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
revision_idYesRevision ID
automation_idYesAutomation ID

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and idempotent behavior, but the description adds meaningful detail: removal is forward-only, queue routing to the agent is unrouted in the same change, and live/historic revisions cannot be modified. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying necessary information: the primary action, the side effect, and the immutability constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the core operation, the side effect, and the critical constraint on which revisions are valid. An agent has enough information 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions are minimal ('Agent ID', 'Revision ID', 'Automation ID'), but the description clarifies that revision_id must refer to a draft revision and that agent_id refers to an agent present in that draft. This adds semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: remove an agent from a draft revision. It adds the 'forward-only' qualifier and notes the queue-routing side effect, which distinguishes this from sibling tools like removeAutomationAgent or removeAutomationRevisionQueue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the key usage boundary explicit: live and historic revisions are immutable, so this tool is for draft revisions only. It does not explicitly name alternative tools for adding or replacing agents, but the context is clear enough for an agent to decide when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeAutomationRevisionQueueRemove Automation Revision QueueA
DestructiveIdempotent
Inspect

Remove a queue's routing from a draft revision (forward-only removal). Live and historic revisions are immutable.

ParametersJSON Schema
NameRequiredDescriptionDefault
revision_idYesRevision ID
automation_idYesAutomation ID
case_queue_idYesQueue ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and idempotent, and the description adds meaningful behavioral context by explaining the removal is forward-only and cannot affect immutable live or historic revisions. This goes beyond the annotations to clarify the scope and reversibility characteristics of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, both dense with useful information, and it front-loads the primary action and scope. Every clause earns its place, including the forward-only nuance and the immutability constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three straightforward ID parameters and no output schema, the description covers the essential operational context: what is removed, from which revision type, and the constraints on live and historic revisions. It lacks only an explicit mention of side effects or return behavior, but these are not critical given the simple mutation and existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all three parameters with 100% coverage, so the baseline of 3 applies. The description does not add parameter-specific detail beyond what the schema provides, but the tool description clarifies the role of a 'queue's routing' in a revision, giving enough context to understand the parameter relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action on a specific resource: removing a queue's routing from a draft revision. It also distinguishes this from related operations by specifying 'forward-only removal' and noting that live and historic revisions are immutable, so it is clear what this tool does and what it cannot do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates that this operation applies only to draft revisions and explicitly warns that live and historic revisions are immutable, which provides strong context on when the tool is appropriate. It does not explicitly name alternatives such as setAutomationRevisionQueue or removeAutomationQueue, so it stops short of the highest benchmark.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeClarityLandscapeNodePersonRemove Clarity Landscape Node PersonA
DestructiveIdempotent
Inspect

Remove a person from the process behind a process landscape node, and revoke the process access they were granted when they were added.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYesA process landscape node that is linked to a real process.
teamIdNo
personIdYesThe person entry to change, as returned by listClarityLandscapeNodePeople.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is destructive and idempotent, and the description adds meaningful context by specifying that the person's granted process access is also revoked, not just their node association. This clarifies a material side effect beyond what the annotations alone convey. It does not reveal additional limits such as permission requirements or irreversibility, but the annotation coverage lessens that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the primary action and immediately states the key side effect. There is no redundant phrasing or filler, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core action and main side effect are covered, and the annotations plus schema handle required-parameter identification. However, the undocumented teamId parameter, lack of guidance on distinguishing this from removeClarityProcessMember, and no mention of prerequisites or authorization leave the description only partially complete for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes only nodeId and personId, while orgId and teamId have no description, leaving 50% of parameters semantically uncovered. The tool description does not compensate by clarifying what orgId or teamId represent or how they affect the removal. This is a notable gap for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource combination: 'Remove a person from the process behind a process landscape node,' which clearly identifies the action and target. It also distinguishes itself from related tools by noting the additional consequence of revoking process access, separating it from simple removal or update operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: whenever a person should be removed from a landscape node and have their related process access revoked. However, it does not explicitly mention alternatives such as removeClarityProcessMember or updateClarityLandscapeNodePerson, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeClarityProcessMemberRemove Clarity Process MemberA
DestructiveIdempotent
Inspect

Remove accepted access to a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process ID.
invitationIdYesAccepted process invitation to remove.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is destructive and non-read-only. The description adds the useful context that it removes accepted access rather than merely deleting an invitation, but it does not describe side effects, irreversibility, or any post-removal behavior beyond what destructiveHint already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It communicates the core action and target resource efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive mutation whose safety profile is covered by annotations and whose parameters are fully documented, the description is sufficient. It could more explicitly state that it removes a member from the process, but no critical call-blocking context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are clearly documented in the schema. The tool description adds no additional meaning beyond what 'id' and 'invitationId' already convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Remove') and a specific resource ('accepted access to a clarity process'), so an agent can distinguish it from tools like deleteClarityProcess or deleteClarityProcessInviteLink. However, it relies on the title for the 'member' concept and does not explicitly differentiate itself from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'accepted' implies this tool is for removing members who have already accepted access, rather than pending invitations or invite links. No alternative tool is named and no explicit when-to-use or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeRevisionIntegrationRemove Revision IntegrationA
DestructiveIdempotent
Inspect

Remove an integration from an agent revision. Removes the slot for everyone on the revision, including all per-user connection pins. Requires edit permission on the agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
integration_idYesIntegration ID (catalog integration ID or slot ID from the list response)
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral details beyond the annotations: it explains the removal affects the slot for everyone on the revision and covers all per-user connection pins. It also notes the edit permission requirement. While it does not enumerate error conditions or exact side effects, the annotations already flag destructive and idempotent nature, and the description provides additional scope context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—two sentences—and directly states the action, scope, and a prerequisite. It is well-structured and free of unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool definition is complete for its purpose: it explains what it does, its effects, and required permissions. The absence of an output schema is acceptable given the destructive nature. It could mention potential error cases or relationship to unpin operations, but the provided information is sufficient for correct invocation in most contexts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema includes descriptions for all parameters, with integration_id and selected_automation_revision_id having detailed explanations (catalog/slot ID, branching behavior). agent_id and build_id are self-explanatory. The main description does not add parameter-specific meaning, but the schema coverage is good, so overall clarity is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool removes an integration from an agent revision, and explicitly mentions it removes the slot for everyone on the revision including per-user connection pins. This distinguishes it from sibling tools like attachRevisionIntegrations or listRevisionIntegrations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the action (removing an integration) and the requirement for edit permission, which implies when it should be used. It does not explicitly contrast with similar functions like unpinRevisionIntegrationConnection, but the 'including all per-user connection pins' phrase differentiates the scope, so usage is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeTeamMemberRemove Team MemberA
DestructiveIdempotent
Inspect

Remove a member from a team. Removing another member requires the Superadmin role or above; any member may remove themselves (leaving the team). The last remaining Owner cannot be removed, and a member whose Owner role is inherited from the organization can only leave voluntarily.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
memberIdYesMember (user) ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag the tool as destructive and idempotent, but the description goes beyond them by disclosing role hierarchy requirements, self-removal behavior, and Owner protections. This is valuable behavioral context for a destructive membership operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and followed only by nontrivial constraints. No filler, no restating of schema fields, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive membership operation, the description covers authorization, self-removal, and Owner edge cases. Combined with the rich team_id schema and annotations, an agent has enough context to invoke it correctly; the only minor gap is explicit output/error behavior, which is not essential for a remove operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed semantics for team_id and memberId, so the schema already carries the parameter documentation burden. The description adds no additional parameter-specific meaning beyond what the schema provides, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('remove') and resource ('a member from a team'). It is immediately distinguishable from sibling tools like removeClarityProcessMember or removeClarityLandscapeNodePerson, leaving no ambiguity about what operation is performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear contextual rules: removing another member requires Superadmin or above, any member may remove themselves, the last remaining Owner cannot be removed, and inherited-Owner members can only leave voluntarily. These act as preconditions and edge-case exclusions, though it stops short of explicitly naming alternative tools such as updateTeamMemberRole.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

renameFileRename FileBInspect

Rename a file in team storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
relativePathYesCurrent path of the file relative to the team's storage root
newFilenameOnlyYesNew file name (no extension; the existing extension is preserved)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what annotations already imply: rename is a mutation and readOnlyHint=false. It does not mention side effects, overwrite behavior, reversibility, or response shape. The extension-preservation behavior exists only in the schema, not in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It states the action and scope efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter mutation with complete schema coverage and annotations, the one-line description plus schema is largely sufficient to invoke correctly. The lack of return-value or usage-selection detail is a minor gap given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for team_id, relativePath, and newFilenameOnly. The description itself adds no parameter-level meaning, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb, resource, and scope: 'Rename a file in team storage.' This clearly distinguishes it from content-modifying siblings like updateFileContent. It does not explicitly contrast with a sibling tool, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, exclusions, or alternatives are provided. The description only restates the operation; the team_id schema note covers authentication context but not tool-selection decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorderClarityFoldersReorder Clarity FoldersAInspect

Reorder the team's process folders to match the given id order. The payload must name every folder exactly once.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folderIdsYesEvery team folder ID, in the desired display order.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutation (readOnlyHint=false) that is not marked destructive. The description adds the meaningful behavioral constraint that the payload must name every folder exactly once, implying a full-set reorder rather than a partial move. It does not disclose error behavior, validation failures, or what happens if some folders are omitted, so more context was possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The core action and resource are front-loaded, and the critical payload invariant is stated clearly in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation tool with no output schema, the description plus schema covers what the tool does and what inputs are needed. The main gap is the absence of expected response or error behavior, but the annotations and schema provide enough context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including a detailed explanation of team_id and folderIds. The description adds value by reinforcing that folderIds must name every folder exactly once, which is a stronger invariant than the schema's 'Every team folder ID, in the desired display order.' This helps the agent avoid constructing a partial or duplicate list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Reorder the team's process folders to match the given id order.' This clearly distinguishes it from sibling tools like reorderClarityLandscapeAreas, which operates on a different resource, and updateClarityFolder, which implies settings modification rather than ordering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when folders need to be reordered to a specific id sequence. However, it does not explicitly contrast it with alternatives such as moveClarityProcessesToFolder or setupClarityFoldersFromLandscape, nor does it state when not to use it. The payload constraint is useful but is more about input construction than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorderClarityLandscapeAreasReorder Clarity Landscape AreasA
Idempotent
Inspect

Reorder a sibling group of the organization's process landscape area folders left-to-right — the top-level areas by default, or the folder children of parentId (organization admin+). This changes display order only; use setClarityLandscapeNodePlacement to move a node to a different parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
parentIdNoThe parent area whose folder children are being reordered. Omit or pass null to reorder the top-level areas.
orderedAreaIdsYesEvery area folder in the sibling group, exactly once, in the order you want them displayed left-to-right. Read the current siblings first (getClarityProcessTree); a partial list is rejected with 400.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: it requires organization admin+, says the operation affects display order only, and the schema notes that partial lists are rejected with 400. These details are not implied by readOnlyHint, idempotentHint, or destructiveHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the entire core meaning: the operation, default scope, parent variant, permission level, side-effect scope, and the alternative tool. The most important scoping information is front-loaded, with no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is complete enough for an agent to call the tool correctly: required ids, parent semantics, full-order constraint, read-first advice, and permission are all present. No output schema exists, so return-value documentation would be a minor enhancement, but its absence does not prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The main description adds little parameter meaning beyond the schema: the schema already documents parentId's top-level/null behavior and orderedAreaIds' 'exactly once' full-sibling requirement. The description references parentId and sibling grouping, but does not substantially extend the property-level semantics already present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Reorder'), a specific resource ('process landscape area folders'), and the scope ('sibling group... left-to-right'). It also distinguishes itself from setClarityLandscapeNodePlacement by clarifying that this tool only changes display order, not parent assignment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly explains the default case (top-level areas) versus the parentId case (folder children), and gives a direct alternative for reparenting: 'use setClarityLandscapeNodePlacement to move a node to a different parent.' The 'display order only' caveat is a clear when-not-to-use signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replaceCaseQueueEvalRubricsReplace Case Queue Eval RubricsA
Destructive
Inspect

Replace the entire case-level evaluation rubric set on a queue's current version (1 to 12 rubrics). Existing rubrics are removed and the supplied list becomes the new set. An empty list is refused — whole-case evaluation regenerates rubrics for an empty set at the next settlement, so a cleared set would not stay cleared; remove individual rubrics instead. Targets the queue's current version (build-set), which exists once its first Agent-processed case settles — this fails with 409 before then. Cases already judged keep their original verdicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
rubricsYesThe complete case-level rubric set for the queue's current version (at least 1 rubric). Replaces every existing rubric.
queue_idYesThe queue's unique identifier

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint=true annotation, the description reveals important side effects: existing rubrics are removed, an empty set would be regenerated by whole-case evaluation, the target is the current version, and already-judged cases retain original verdicts. This gives the agent a precise behavioral model with no contradiction to annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and every sentence earns its place: main action, destructive behavior, empty-list rationale, version precondition and 409 error, and preservation of judged verdicts. The primary function is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive replace operation with no output schema, the description covers all critical operational edges: what is replaced, why an empty list is invalid, when the target exists, the error condition, and the effect on existing data. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already fully documented. The description's mention of '1 to 12 rubrics' and 'supplied list becomes the new set' largely restates the schema's minItems/maxItems and replacement semantics rather than adding new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Replace the entire case-level evaluation rubric set on a queue's current version.' The qualifiers 'entire' and 'current version' clearly separate it from sibling create/update/delete single-rubric tools like createCaseQueueEvalRubric or updateCaseQueueEvalRubric.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when not to use the tool ('An empty list is refused') and directs to an alternative ('remove individual rubrics instead'). It also provides a concrete precondition: the operation targets the queue's current build-set version and fails with 409 before it exists. This is 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.

replaceEvalRubricsReplace Eval RubricsA
Destructive
Inspect

Replace a build's entire Agent-specific evaluation rubric set in one call (at most 5 rubrics). Existing custom rubrics are removed and the supplied list becomes the new set; pass an empty array to clear them. Defaults to the Agent's live build; pass build_id to target a specific revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier (Assignment ID)
rubricsYesThe complete custom rubric set for the build. Replaces every existing custom rubric; pass an empty array to clear them.
build_idNoReplace the custom rubrics on this build (revision). Defaults to the agent's live build when omitted.
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructiveHint=true, and the description meaningfully elaborates: existing custom rubrics are removed, the supplied list becomes the new set, and empty array clears them. This adds a concrete behavioral consequence beyond the boolean flag, which is exactly what the tool's destructive nature requires.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The primary action is front-loaded, the destructive replacement behavior is stated clearly, and the default/build_id targeting guidance is given compactly. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema, the description covers the essential behavioral facts: whole-set replacement, the 5-rubric cap, clearing via empty array, and build targeting. Combined with the detailed schema and destructive annotation, nothing an agent needs 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.

Parameters3/5

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 reinforces the 'entire set' and 'live build default' semantics, but the detailed meaning of each parameter, especially selected_automation_revision_id, is already fully documented in the input schema. The description does not need to compensate for gaps because there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Replace'), a clear resource ('a build's entire Agent-specific evaluation rubric set'), and a precise scope ('in one call (at most 5 rubrics)'). It distinguishes itself from sibling per-rubric tools like createEvalRubric/updateEvalRubric/deleteEvalRubric by emphasizing whole-set replacement rather than individual edits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational context: the default targets the live build, build_id selects a specific revision, and an empty array clears rubrics. It does not explicitly name alternatives or exclusion conditions, but the 'entire set in one call' framing implies when this tool should be preferred over per-rubric operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replaceQueueJsonSchemaReplace Queue Json SchemaB
Idempotent
Inspect

Replace a queue's Case schema with a new version. Every declared field is frozen against automated change, so this is the only way one can be edited.

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaYes
queue_idYesThe queue's unique identifier
change_summaryYes
expected_schema_idNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the key behavioral fact that declared fields are frozen against automated change, making this the sole edit mechanism—context not present in annotations. It omits potential side effects on existing cases/versions and does not mention authorization or rollback, but the annotations already cover the read-only/destructive/idempotent profile, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, each carrying information, with the core action first and the rationale second. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-parameter mutation with one nested object and no output schema, this is incomplete: expected_schema_id and change_summary are undocumented in both schema and description, and the effect of replacing a schema on existing cases is not addressed. An agent could call it with malformed or insufficient input. However, the frozen-field rule and idempotency annotation do orient the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25%; only queue_id has a schema description. The description references 'Case schema' conceptually but does not explain the schema object structure, change_summary requirements, or expected_schema_id's concurrency role, so it fails to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action—replace a queue's Case schema with a new version—and gives distinguishing context: because every declared field is frozen, this is the only editing path. It is not a tautology and separates the tool from generic queue tools, though it does not explicitly contrast with attachQueueJsonSchema/createQueueJsonSchema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the trigger condition (when a declared schema field must be edited) and explains why this tool is the only path for that. However, it does not explicitly tell the agent when to prefer attach/create/detach siblings or state when not to use the tool, so the usage guidance is mostly inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replaceRevisionIntegrationQueuesReplace Revision Integration QueuesA
Idempotent
Inspect

Replace the set of queues linked to this build's case-queue integration slot. Send the full desired queue list — any queues not in the list will be unlinked. Requires edit permission on the agent. After linking, call getRevisionCaseQueueSetup to confirm the slot now reports linked_queue_count > 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
queue_idsYesFull set of queue IDs to link to this slot. Replaces any existing links.
integration_idYesIntegration ID
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the key side effect — 'any queues not in the list will be unlinked' — well beyond the annotations' readOnly/destructive hints. Also adds the permission requirement and the success criterion (linked_queue_count > 0), which function as a post-condition. This is consistent with idempotentHint=true, since submitting the same full list twice yields the same state; no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: the purpose, the replacement semantics, and the permission/verification steps. The critical 'full list' instruction is front-loaded immediately after the purpose statement, so an agent grasps the operational contract quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity mutation tool with no output schema, the description covers purpose, side effects, permissions, and a verification path via getRevisionCaseQueueSetup, which effectively substitutes for return-value documentation. The remaining gap is that the direct response shape and edge-case behavior (e.g., an empty queue_ids array) are not addressed, though the confirm-call instruction mitigates this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The selected_automation_revision_id parameter already has extensive draft/active/historic semantics in the schema, and queue_ids already documents 'Full set of queue IDs... Replaces any existing links.' The description reinforces queue_ids' full-set meaning and ties build_id/integration_id to the 'case-queue integration slot', but adds little net-new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Replace') and a precise resource ('the set of queues linked to this build's case-queue integration slot'). The second sentence's 'full desired queue list' semantic makes the replace-all behavior unmistakable and separates it from additive siblings like attachRevisionIntegrations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear invocation pattern ('Send the full desired queue list — any queues not in the list will be unlinked'), a precondition ('Requires edit permission on the agent'), and a named follow-up call (getRevisionCaseQueueSetup). It does not explicitly contrast with additive alternatives such as attachRevisionIntegrations or listRevisionIntegrationQueues, so when-not-to-use is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

respondToHumanRequestRespond To Human RequestAInspect

Respond to a human-in-the-loop request. Use 'approved' (true/false) for approval-type requests, or 'answers' ({question: answer}) for question-type requests. Only works when the run is in 'waiting' status.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run's unique identifier
answersNoFor question-type requests: a map of question text to answer. Multi-select answers should be comma-separated.
approvedNoFor approval-type requests: true to approve, false to deny
request_idYesThe human request's unique identifier

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by mentioning the 'waiting' status restriction and the conditional parameter usage. It does not elaborate on error handling or side effects, but the annotations already indicate read/write characteristics, so this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and well-structured, without redundant information. It front-loads the main action and immediately clarifies parameter usage, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description adequately covers the core aspects: what it does, how to use it, and when it works. It does not mention potential edge cases (e.g., simultaneous 'approved' and 'answers'), but these are not critical for successful invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides full descriptions for all parameters (100% coverage), and the tool description adds value by explaining when to use 'approved' vs 'answers' based on request type. This goes beyond the schema's individual parameter descriptions, offering practical guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Respond to a human-in-the-loop request') and specifies the exact resource and condition. It distinguishes itself from sibling tools by focusing on human-in-the-loop requests and the 'waiting' status, making it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear precondition ('Only works when the run is in 'waiting' status') and explains how to use the approved vs. answers parameters. However, it does not explicitly state when to choose this tool over others (e.g., 'use this when a human request is pending'), but the context makes it inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restorePulseDashboardVersionRestore Pulse Dashboard VersionAInspect

Restore a previous version of a Duvo Pulse dashboard, making it live again (requires edit access). Non-destructive — it moves the head pointer to the chosen version.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
revisionIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it explains the mechanism ('moves the head pointer') and explicitly reassures non-destructiveness, which is valuable for an operation that sounds like a rollback. It also discloses the edit-access requirement. It doesn't discuss side effects on the previously live version, but annotations already cover destructive/read-only hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the core action and key caveats are front-loaded before the mechanism detail. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter operation with no output schema, the description covers the action, permission, and non-destructive semantics. It could add a pointer to listPulseDashboardVersions as the source of revisionId, but the current text is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly map artifactId to the dashboard or revisionId to the target version; it only refers generically to 'the chosen version.' Parameter names and UUID patterns appear in the schema, but the description adds almost no semantic value for an agent deciding what to pass.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Restore') and clearly identifies the resource ('previous version of a Duvo Pulse dashboard') and the intended effect ('making it live again'). The non-destructive head-pointer mechanism further distinguishes it from destructive or revision-promotion siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: use this when a previous dashboard version should become live, and it notes the edit-access prerequisite. It does not explicitly name alternatives or exclusions, but the dashboard/version scoping and head-pointer behavior separate it from promoteRevision and revertClarityProcessSnapshot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resumeBuilderRunResume Builder RunAInspect

Resume a builder run that is waiting for user input

ParametersJSON Schema
NameRequiredDescriptionDefault
answersYesAnswers keyed by the exact question text in pending_user_questions.questions.
builder_run_idYesThe builder run waiting for answers.

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds little beyond the annotations: it restates the title and the waiting-state condition. It does not mention what happens after resuming, whether answers replace or supplement existing data, or any other behavioral consequences. Annotations already convey that it is non-read-only, non-destructive, and non-idempotent, so the description carries nearly no extra weight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence achieving both purpose and usage clarity without superfluous words. It is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With two fully-schema'd parameters and no output schema, the description supplies the core use case but omits any notion of what the agent should expect after a successful resume (e.g., no longer waiting, next pending step, or a confirmation response). A brief note about the outcome or state change would round out the definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema thoroughly describes both parameters (builder_run_id and answers, 100% coverage). The tool description adds no parameter-specific information. With high schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Resume' and a specific resource 'a builder run', qualified by the state 'waiting for user input'. This clearly differentiates it from siblings such as startRun, cancelBuilderRun, and getBuilderRun.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'that is waiting for user input' provides a clear condition for when the tool should be used, distinguishing it from runs in other states. It doesn't explicitly name alternatives or exclusions, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revertClarityProcessSnapshotRevert Clarity Process SnapshotA
DestructiveIdempotent
Inspect

Archive a Clarity v2 snapshot of either kind. If the live row is archived, the repository auto-promotes the latest historic row of the same kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
process_idYesThe clarity process id
snapshot_idYesSnapshot id

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as destructive and idempotent, so the description adds value by specifying the concrete state change: archiving a snapshot, and if it is the live row, auto-promoting the latest historic row of the same kind. This goes beyond the generic destructive hint, though it stops short of describing return behavior or the non-live-row case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the second sentence earns its place by explaining the important automatic promotion behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive operation, the description plus annotations and full schema coverage cover the essential state transition. The remaining gaps are minor: there is no output schema and no explicit statement about what happens when a non-live snapshot is archived, but the core behavior is clear enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The phrase 'either kind' loosely maps to the kind enum and the live/historic distinction adds context around snapshot_id, but the description does not provide parameter-specific detail beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a concrete verb and object: 'Archive a Clarity v2 snapshot of either kind,' and it explains the key side effect (auto-promotion of the latest historic row). It is clear about what the tool does, though it does not explicitly distinguish itself from closely related snapshot operations such as promoteClarityProcessSnapshot or saveClarityProcessSnapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to call this tool versus any of the many sibling snapshot tools. The conditional sentence describes a behavior that occurs if the live row is archived, but it does not state the intended trigger, prerequisites, or when an alternative like promote or save would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saveClarityProcessSnapshotSave Clarity Process SnapshotCInspect

Save user edits as the live Clarity v2 snapshot for the selected kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
swotNoSWOT analysis produced by the swot-analysis postprocessing agent. `undefined` = agent has not yet run; `null` = agent ran and produced no analysis.
stepsYes
summaryNoOne short paragraph (3-5 sentences) describing the captured process at a glance. Surfaced at the top of the current-process tab so reviewers can orient themselves before scanning the steps. Example: "Customers order beer at the bar; the bartender greets them, picks an option matching their preference, pours and garnishes the glass, then rings the order through the POS before serving."
process_idYesThe clarity process id
projectedImpactNoAnswer-first, MECE-structured business case. 4-8 sentences of prose + one markdown assumptions table. Null when team context is insufficient to produce any quantitative or qualitative assessment.
baselineSnapshotIdYes
clarityCurrentProcessIdNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so they carry almost no signal and the description must carry the burden. The description confirms this is a mutation ('Save') and that it becomes the 'live' snapshot, but discloses nothing about versioning semantics, whether re-saving overwrites the prior live snapshot, non-idempotence, or how it relates to promote. Minimal added behavioral context beyond the verb itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words; the verb is front-loaded and the audience/scope is stated compactly. It is efficient in form, though the terseness is partly why other dimensions score lower.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with 8 parameters (4 required) and a large nested steps schema, plus a sibling family of snapshot operations, a one-line description is insufficient. It does not explain what 'live snapshot' means versus promoteClarityProcessSnapshot, what baselineSnapshotId anchors, whether saving creates a new version, or what overwrite/idempotency behavior to expect. An agent cannot reliably decide when and how to invoke this correctly from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, falling in the middle band. The description adds modest value by tying 'selected kind' to the kind parameter with its enumerated values, but it adds nothing about process_id, steps, or baselineSnapshotId — particularly the purpose of baselineSnapshotId as a required baseline reference, which is non-obvious. It does not materially compensate for the uncovered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pairing ('Save user edits as the live Clarity v2 snapshot') and scopes by 'selected kind', which maps cleanly to the kind parameter. This is clear enough to distinguish the save operation from the generate/get/list siblings in the snapshot family, though it does not name 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the closely related siblings generateClarityProcessSnapshot, promoteClarityProcessSnapshot, revertClarityProcessSnapshot, or stopClarityProcessSnapshot. 'Save user edits' implies persisting edits, but the description never says when to reach for save vs. promote (which likely also affects the 'live' status), leaving a real disambiguation gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchCasesSearch CasesAInspect

Search cases in a queue with rich filters (multi-status, date ranges, label-based filters, and field-value filters over a typed queue's json_data). Use this when the simple query-string filters on GET /v2/queues/:queue_id/cases aren't enough. Each json_data entry is {path, operator, value} where path is a declared scalar in JSONPath dotted form ($.invoice.amount); entries are ANDed, so two comparisons on one path express a range. A path the queue's Case schema does not declare is rejected rather than ignored, as is a value that does not match the field's declared type. The contains operator is case-sensitive (unlike the free-text search parameter). Set count_only=true to skip Case row selection, enrichment, and transformation. The normal response shape is returned with cases: [] and the matching total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo
filtersNo
sort_byNocreated_at
queue_idYesThe queue's unique identifier
count_onlyNoSkip Case row selection, enrichment, and transformation. The normal response shape contains an empty cases array and the matching total.
sort_orderNodesc

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: entries are ANDed, undeclared paths and type-mismatched values are rejected rather than ignored, the contains operator is case-sensitive unlike free-text search, and count_only short-circuits row selection/enrichment. Note the annotations declare readOnlyHint=false and idempotentHint=false, which sits awkwardly with a pure search, but the description itself makes no misleading behavioral claim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the when-to-use condition before detail, and most sentences carry non-obvious information. However, the two sentences on count_only restate the schema's parameter description almost verbatim, which is wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter search tool with no output schema, it covers the hardest parts (json_data grammar, validation failures, count_only return shape) and notes the normal response shape. It leaves the label-filter object shape, enum meanings, and pagination/sort behavior undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at only 25% and a nested filters object, the description carries real weight: it explains the {path, operator, value} tuple, the JSONPath dotted form ('$.invoice.amount'), ANDing semantics, and the rejection rule for undeclared paths. It still says nothing about labels, status, sort, limit or offset semantics, so it does not fully close the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search cases in a queue') and enumerates the filter families it supports (multi-status, date ranges, labels, field-value filters over json_data), which distinguishes it from plain case listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use this 'when the simple query-string filters on GET /v2/queues/:queue_id/cases aren't enough', giving a clear selection condition against the simpler listing path. It does not explicitly name the sibling tool (listCases) nor state any when-not/exclusion conditions, 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.

sendPulseDashboardMessageSend Pulse Dashboard MessageAInspect

Send an instruction to iterate on a Duvo Pulse dashboard (e.g. 'make it a bar chart', 'filter to last 14 days'). The creator can always iterate; teammates can too when the Pulse is published to the team with edit access. The agent regenerates asynchronously — poll GET /artifacts/{artifactId} for status.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
artifactIdYes
attachmentsNoAttachments to hand the agent, uploaded beforehand via the upload-urls endpoint (max 5)
from_revision_idNo
selected_elementNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool triggers asynchronous regeneration and instructs polling the artifact status, which is key behavioral information not fully captured by annotations. It aligns with annotations (readOnlyHint false, destructiveHint false) and adds operational detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, using three sentences to convey purpose, permissions, and async behavior. Minor awkwardness like 'Duvo Pulse' (possibly a typo) slightly detracts, but overall it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action and async polling, but given the complexity of five parameters and nested objects, it leaves out important context about attachments and revision handling. It does not describe the expected outcome or response format, though the polling URL partially compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 20% schema description coverage, the description provides minimal help for parameters. It indirectly mentions the message and artifactId via examples and the polling URL, but attachments, from_revision_id, and nested objects are left unexplained, leaving the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool sends an instruction to iterate on a Pulse dashboard, with concrete examples of such instructions. It distinguishes the tool's purpose from other dashboard-related actions, making it easy for an agent to understand when to use it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context by explaining who can iterate (creator always, teammates with edit access when published) and that the operation is asynchronous, requiring polling. It does not explicitly compare to alternative tools, but the conditions and workflow are sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sendTeamInviteEmailSend Team Invite EmailAInspect

Email an invitation to its recipient. Use this to deliver an invitation created by createTeamInvite (which never sends mail on its own), or to resend one the recipient never received. The accept link is always built from the server-configured app origin.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the invitation to email.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
frontendUrlNoDeprecated. Accepted for backward compatibility and IGNORED: the accept link is always built from the server-configured app origin, so a caller cannot point invitation emails at another host.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds two useful behavioral facts: createTeamInvite has no mail side effect, and the accept link is always derived from the server-configured app origin, so frontendUrl cannot override it. It does not detail auth/rate limits or post-send state changes, but the primary side effect—sending an email—is explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct job: main action, when to use, and server-origin constraint. No filler or duplication of schema content. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-object send action with only three parameters and no output schema, the description covers what the tool does, when to use it, its relationship to createTeamInvite, and a key behavioral constraint. It does not specify return/error behavior or what happens if the invitation was already sent, but these are minor 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains id, team_id, and the deprecated ignored frontendUrl. The description reinforces the id semantics contextually and explains why frontendUrl is irrelevant, but it does not add substantial param-level 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Email an invitation to its recipient,' naming a specific verb and object. It further distinguishes itself from createTeamInvite by stating that tool never sends mail on its own, and clarifies that this tool also handles resending. This is enough for an agent to differentiate it from siblings like listTeamInvites or bulkCreateTeamInvites.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs when to use: to deliver an invitation created by createTeamInvite or to resend one the recipient never received. It names createTeamInvite as the companion creation tool that does not send mail, providing an alternative and the condition that selects this tool. The guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setAutomationRevisionAgentSet Automation Revision AgentAInspect

Fold a build into a draft revision for one agent — adds the agent to the revision or replaces the build it references. Live and historic revisions are immutable.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent to bind in the revision
build_idYesBuild to reference for the agent
revision_idYesRevision ID
automation_idYesAutomation ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the real behavioral nuance: the operation is an add-or-replace upsert on an agent's build reference, not just a simple set. It also surfaces the immutability restriction beyond what annotations provide, which helps the agent predict failure on non-draft revisions. It stops short of mentioning error behavior, permissions, or 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the entire definition with no filler. The core action is front-loaded, and the immutability constraint is presented as a short, independent sentence that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-UUID mutation with no output schema, the description covers the essential behavior, the draft-revision restriction, and the add/replace semantics. It is reasonably complete, though a brief note about the expected outcome or error on immutable revisions would make it stronger.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has a concise description in the schema, so the baseline applies. The tool description adds no extra meaning about how the parameters interact, such as which revision states are valid or what makes a build valid for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear mutating action on a draft revision: it adds an agent to the revision or replaces the build that agent references. It correctly signals that live and historic revisions are off-limits, which distinguishes it from revision activation or removal tools, though it could name the closest siblings (e.g., removeAutomationRevisionAgent) more explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The statement 'Live and historic revisions are immutable' gives an explicit constraint: this tool should only be used for draft revisions. It does not, however, discuss when to prefer adding versus replacing, nor does it contrast with sibling tools like setAutomationRevisionQueue or removeAutomationRevisionAgent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setAutomationRevisionQueueSet Automation Revision QueueAInspect

Set the per-revision routing for one queue in a draft revision — which agent it triggers, whether it is enabled, and per-revision name/description overrides. Partial update: only the fields you send are changed; omitted fields keep their current value (or take the default when the queue is first added). Live and historic revisions are immutable.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPer-revision name override (null clears; omit to keep current)
enabledNoWhether routing is enabled (omit to keep current; default true when new)
agent_idNoAgent the queue routes to (null clears routing; omit to keep current)
descriptionNoPer-revision description override (null clears; omit to keep current)
revision_idYesRevision ID
automation_idYesAutomation ID
case_queue_idYesQueue to route in the revision

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which already indicate this is a read/write operation that is not idempotent or destructive, the description discloses important behavioral traits: 'only the fields you send are changed; omitted fields keep their current value (or take the default when the queue is first added)' and the immutability of live/historic revisions. This adds meaningful context that annotations do not provide. It does not mention auth requirements or error cases, but those are not explicit gaps for this operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The primary action and scope are front-loaded in the first sentence, and the critical behavioral caveats (partial update, immutability) are packed efficiently into the next two. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, 3 required) and 100% schema coverage, the description covers the essential operational context: scope, mutable fields, partial-update behavior, and immutability constraints. Since there is no output schema, one might expect a note about return values, but for a mutation-style operation this omission is minor. Overall, an agent has enough to invoke it correctly without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already has a detailed explanation of its meaning and null/omit behavior. The description essentially restates the key fields (agent, enabled, name/description overrides) without adding new details beyond what the schema already says. The partial-update note is behavioral guidance rather than per-parameter semantic enrichment, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Set the per-revision routing for one queue in a draft revision — which agent it triggers, whether it is enabled, and per-revision name/description overrides.' This precisely identifies what the tool does and distinguishes it from queue-independent operations like setAutomationRevisionAgent. The field list maps clearly to the parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool applies: it targets draft revisions and explicitly warns that 'Live and historic revisions are immutable,' which is a when-not guideline. It also clarifies partial-update behavior and default-on-creation semantics. However, it does not name any alternative tools or compare against siblings like setAutomationRevisionAgent, 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.

setClarityLandscapeNodePlacementSet Clarity Landscape Node PlacementC
Idempotent
Inspect

Move a process landscape node (team manager or above for team processes; organization admin for areas)

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
nodeIdYes
parentIdYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is mutating, idempotent, and non-destructive. The description adds role requirements and clarifies the operation is a move rather than a general update. However, it doesn't disclose what happens to child nodes, whether parentId=null moves to root, or how placement ordering works, though annotations reduce 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. The parenthetical role note is compact and relevant, and every word contributes to understanding the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three required parameters, no output schema, and zero parameter descriptions, this is under-specified. An agent cannot confidently infer the semantics of parentId=null, whether the tool reorders siblings, or how it differs from closely related landscape tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain orgId, nodeId, or parentId. The verb implies nodeId is the node being moved, but parentId accepting null and the meaning of placement are left entirely unspecified. The description fails to compensate for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Move' and the resource 'process landscape node', making the core action identifiable. The role qualifier adds useful scope information. However, it doesn't name sibling tools like updateClarityLandscapeNode or reorderClarityLandscapeAreas, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus related landscape tools such as updateClarityLandscapeNode or reorderClarityLandscapeAreas. The parenthetical about team manager/organization admin permissions is about authorization, not use-case selection. With a large sibling list, an agent receives no routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setClarityLandscapePrioritiesSet Clarity Landscape PrioritiesA
Idempotent
Inspect

Set or clear heatmap priorities in one batch (team managers for their processes; organization admin+ across the organization)

ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization whose landscape is being assessed.
prioritiesYesProcess priority updates applied atomically.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide the core safety profile: not read-only, not destructive, idempotent. The description adds useful context about batching and authorization scope, but it does not need to repeat the annotation-covered traits. This is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one efficient sentence with the action front-loaded and the scope in a compact parenthetical. It conveys the key facts without filler, though the parenthetical is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only two well-documented parameters, no output schema, and annotations covering read-only/idempotent/destructive traits, the description supplies the remaining essential context: batching, use scope, and role restrictions. It is sufficiently complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with org_id and priorities both explained in the schema itself. The description adds the 'heatmap priorities' framing and batch behavior, but does not materially enrich the meaning of the individual parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('set or clear'), a specific resource ('heatmap priorities'), and a batching property ('in one batch'). It also includes role-based scope (team managers vs organization admin+), which makes the tool's purpose precise and distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical provides clear usage context by specifying who can apply priorities and at what scope: team managers for their own processes, organization admins across the whole organization. It does not explicitly name alternatives or exclusions, 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.

setPulseDashboardCommentResolutionSet Pulse Dashboard Comment ResolutionAInspect

Mark a Duvo Pulse dashboard comment thread complete, or reopen it (requires view access). Pass the target state in resolved; the call is idempotent, and the response carries the thread with resolved_at and resolved_by set or cleared.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolvedYes
commentIdYes
artifactIdYes

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description claims 'the call is idempotent' while the annotation `idempotentHint` is false. This is a direct contradiction between description and annotations, warranting a score of 1 and flagging an annotation contradiction. Other behavioral details (output includes resolved_at/resolved_by) are obscured by this conflict.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise – two sentences – and well-structured. It packs the action, the requirement, the parameter usage, idempotency, and the expected response into a tight, readable form with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the absence of an output schema, the description covers the essential context: what the tool does, how to specify the state, the required view access, and what the response contains. It lacks explicit identification of artifactId and commentId, but that is partially inferable. Overall, it is fairly complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only source for parameter meaning. It explains `resolved` ('Pass the target state in `resolved`') and implies `commentId` via 'comment thread', but `artifactId` is not clarified in relation to the dashboard. With three parameters and only partial elaboration, this is insufficient to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Mark a Duvo Pulse dashboard comment thread complete, or reopen it' – a specific verb and resource. It also distinguishes itself from siblings like createPulseDashboardComment or listPulseDashboardComments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage instruction: 'Pass the target state in `resolved`'. Also notes 'requires view access' and mentions idempotency. However, it does not explicitly contrast with alternative tools or state when not to use it, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setupClarityFoldersFromLandscapeSetup Clarity Folders From LandscapeBInspect

Create one linked folder per landscape group node containing this team's processes. Idempotent: groups that already have a linked folder are skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation Contradiction: the description explicitly claims 'Idempotent: groups that already have a linked folder are skipped,' yet idempotentHint=false in the annotations. Per rubric, a direct contradiction forces a score of 1 despite the text otherwise adding useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The core action is front-loaded and the idempotency qualifier earns its place as essential behavioral context. Exceptionally tight for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param tool with full schema coverage, the basics are covered: scope, behavior, and skip semantics. However, there is no output schema and the description omits what the tool returns, and the idempotency contradiction undermines reliability. Adequate with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; team_id is fully documented in the input schema with type, format, pattern, and auth-context behavior. 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create') and resource ('one linked folder per landscape group node') with a scoping qualifier ('containing this team's processes'). This differentiates it from generic folder tools like createClarityFolder and listClarityFolders in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case — batch scaffolding of folders from a landscape — but never explicitly states when to use it over createClarityFolder or how it relates to listClarityFolders/updateClarityFolder. No when/when-not guidance or named alternatives are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

startClarityExportStart Clarity ExportCInspect

Start a Clarity → SAP Signavio export job

ParametersJSON Schema
NameRequiredDescriptionDefault
bpmnXmlYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
processIdYes
processOwnerRefNo
processApproverRefNo
connectionInstanceIdYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a mutation (readOnlyHint=false, destructiveHint=false). The description adds almost nothing beyond that — it doesn't disclose that this kicks off an asynchronous job, whether the export is polled afterward, or how to track completion. No contradiction with annotations, but minimal added behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clean sentence with no wasted words — structurally sound. However, it borders on a restatement of the title ('Start Clarity Export'), so the conciseness is partly a function of under-specification rather than efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a moderately complex tool with 6 parameters (3 required) and no output schema, yet the description provides no guidance on the meaning of the inputs, the nature of the export job, or how to verify the result. An agent has insufficient context to call this correctly without probing other tools or schemas.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% (only team_id has a description), and the description explains zero parameters. The required bpmnXml, processId, and connectionInstanceId are entirely undocumented in both the description and schema. With such low coverage, the description was obligated to compensate and failed to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Start') and a specific resource ('Clarity → SAP Signavio export job'). The directionality distinguishes it from generic export tools like exportCases. However, it doesn't explicitly differentiate from closely-related siblings such as getClarityExport or listActiveClarityExports, which share the export domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like getClarityExport, listActiveClarityExports, or exportCases. There's no mention of prerequisites (e.g., needing an existing connectionInstanceId or a saved process) or any exclusions. An agent must infer usage entirely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

startNativeOAuthStart Native OAuthAInspect

Start an OAuth-based connection with a native provider (Gmail, Google Sheets, Outlook, etc.). Returns an authorization URL that must be opened in a browser by a human end-user; once they grant consent, Duvo creates the matching connection and redirects the browser to the optional return_url (or the Duvo dashboard if none is provided). Poll /v2/teams/:team_id/connections to detect the new connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
providerYesOAuth provider slug (e.g. 'google', 'gmail', 'googlesheets', 'outlook'). Must match a configured native OAuth provider.
return_urlNoWhere to send the user's browser after OAuth completes.
reconnect_instance_idNoWhen set, the OAuth flow will update the existing connection in place rather than creating a new one.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by explaining that the call returns an authorization URL, requires a human to open it, and only creates the connection after consent. It also tells the agent to poll the connections endpoint, which is valuable non-obvious 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then expands into the critical flow details. Every sentence contributes useful information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description fully explains the return value, the asynchronous human step, the post-consent behavior, and how to detect the result. This is complete enough for an agent to understand the entire expected flow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already well documented in the schema. The description adds minimal parameter-level meaning beyond what the schema provides, which matches the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts an OAuth-based connection for native providers, which is a specific action on a specific resource type. It also distinguishes itself from generic connection tools by describing the human-in-the-loop authorization URL flow and naming example providers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when connecting to a native provider requiring OAuth consent. It does not explicitly name alternative tools or state when not to use it, but the native-provider and human-consent framing makes the intended use unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

startRunStart RunAInspect

Start a new agent run. Returns immediately with run info - does not wait for completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional initial message to start the run with (e.g. a trigger payload or user instruction)
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
agent_idYesThe agent ID to run
sandbox_idNoOptional sandbox ID with pre-uploaded files
webhook_urlNoWebhook URL to POST events to (human_request, run_completed, run_failed, run_interrupted)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate this is non-read-only, non-idempotent, and not destructive. The description adds a meaningful behavioral fact beyond those: the run starts and the call returns immediately without waiting for completion. This is valuable because it sets agent expectations about the tool's asynchronous nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero wasted words. The core action is front-loaded, and the key behavioral caveat ('does not wait for completion') is placed immediately after the action statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential async contract and the schema documents all parameters, including webhook event types. It does not specify the exact shape of 'run info' or how to retrieve the run later, but sibling tools like getRun and the webhook_url parameter fill most of that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented with meaningful descriptions, including the nuanced team_id behavior. The tool description itself adds no parameter-specific meaning, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Start a new agent run') and adds a distinguishing async behavior ('Returns immediately with run info - does not wait for completion'). This clearly separates it from sibling tools like getRun, listRuns, and stopRun without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to use the tool: when starting a new agent run. The async disclosure implies you should not expect completion results synchronously, giving useful context. However, it does not explicitly name alternatives like getRun for polling status or stopRun for cancellation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stopClarityArtifactChatConversationStop Clarity Artifact Chat ConversationAInspect

Stop an in-flight artifact-chat turn. Flips the conversation back to open first so the interrupted run's late webhooks are dropped as stale, then best-effort interrupts the cc-server execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idYes
conversation_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool flips the conversation to open to drop late webhooks, and that the interruption is best-effort, indicating potential failure. This goes beyond the annotations (which only state non-idempotent and non-destructive) by detailing side effects and limitations, though it does not cover all possible error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, concise, and directly addresses the tool's action and effect. No redundant information is included, and the structure is logical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides sufficient context for an agent to understand the tool's purpose and effect, including the state change and best-effort nature. However, it does not explain how to determine if a turn is in-flight or what happens if the turn is not in-flight, leaving minor contextual gaps. Given there is no output schema, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are required UUIDs, but the schema provides no descriptions and the description adds no semantic detail beyond the parameter names. While the names process_id and conversation_id are self-explanatory, the tool does not clarify their exact roles or relationship to the artifact-chat turn.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool stops an in-flight artifact-chat turn, which is a specific verb (stop) and resource (artifact-chat turn). It also explains the action of flipping the conversation back to open, distinguishing it from deletion. This is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a turn is in-flight and needs to be halted, and contrasts with deletion by noting it only flips to open. However, it does not explicitly name sibling tools like deleteClarityArtifactChatConversation, so the distinction is implicit rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stopClarityProcessSnapshotStop Clarity Process SnapshotAInspect

Stop an in-flight snapshot generation for the selected kind. Reads the sandbox id from the process row, kills the sandbox, flips the process back to review, and clears the sandbox marker so any late webhook from the killed run is dropped as stale.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesSnapshot kind to list
process_idYesThe clarity process id

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the full behavioral sequence: reads sandbox id, kills the sandbox, flips the process back to review, clears the sandbox marker, and drops late webhooks as stale. This goes far beyond what the annotations convey and gives the agent an accurate model of the tool's 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The purpose is front-loaded, and the mechanism/side effects are compactly explained without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutating action with no output schema, the description fully explains what will happen, what state changes occur, and how stale webhooks are handled. An agent can confidently call this tool and understand its consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter meaning beyond stating 'selected kind' and referencing the process row/sandbox id. The schema's own 'Snapshot kind to list' description is slightly misleading, but the tool description's verb 'stop' helps disambiguate the intended operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Stop an in-flight snapshot generation for the selected kind.' This clearly distinguishes the tool from generate/get/list/promote/revert snapshot siblings and from generic stop tools like stopRun or stopClarityArtifactChatConversation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in-flight snapshot generation' provides clear usage context: this tool is for cancelling an ongoing snapshot generation. It does not explicitly mention exclusions or alternatives, but the condition is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stopPulseDashboardMessageStop Pulse Dashboard MessageAInspect

Stop an in-flight Duvo Pulse generation turn. Requires edit access to the dashboard. Flips the dashboard to 'interrupted' and keeps any streamed-so-far reply; stopping when nothing is generating is a successful no-op.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactIdYes
partial_textNoThe assistant text streamed so far, kept in the conversation as the partial reply. Omit when calling from an API client without streaming state.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the sparse annotations, the description explicitly discloses side effects: flips the dashboard to 'interrupted', keeps the streamed-so-far reply, and is a successful no-op if nothing is generating. This provides clear expectations about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, consisting of two sentences that efficiently convey purpose, precondition, side effects, and idempotency without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, enums, or nested objects, the description covers the essential aspects: purpose, precondition, state change, and no-op semantics. It does not discuss potential error cases or exact response shape, but these are not required given the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: partial_text has a helpful description, but artifactId lacks any description beyond its name and format. The tool description adds no additional parameter clarification. Since one parameter is well-documented and the other is self-explanatory, the score is moderate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to stop an in-flight Duvo Pulse generation turn. It uses a specific verb (stop) and resource (Pulse Dashboard generation), and explains the resulting state change and the no-op behavior, effectively distinguishing it from sibling tools like sendPulseDashboardMessage or answerPulseDashboardQuestion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to abort an in-flight generation), states a precondition (requires edit access), and explains the behavior when nothing is generating. It does not explicitly contrast with other stop tools (e.g., stopRun) but provides sufficient guidance for this context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stopRunStop RunAInspect

Stop an agent run. No-op if the run is not currently running.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run's unique identifier

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a state-changing (readOnlyHint=false), non-destructive operation. The description adds the important no-op edge case beyond those hints, but it does not disclose return values, error behavior, or cancellation semantics for a running run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the core action and the critical edge case with no unnecessary filler. The description is well front-loaded and appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers the action and the notable already-stopped case. It could mention success/error responses, but the operation is simple enough that an agent has sufficient information to select and invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents run_id as the run's unique identifier, so the schema carries the parameter semantics. The description adds no additional parameter meaning beyond what is already present, warranting the baseline score for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-object pairing, 'Stop an agent run', that clearly names the resource and action. It distinguishes this tool from startRun/getRun and from other stop* siblings that act on different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The no-op clause provides clear contextual guidance: if the run is not currently running, the call has no effect, so an agent doesn't need to be concerned about stopping an already-finished run. It does not explicitly list alternatives, but the simple and complementary nature of the action makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unlinkCaseLabelsUnlink Case LabelsCInspect

Remove the given labels from a case.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesThe case's unique identifier
queue_idYesThe queue's unique identifier
label_idsYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, so 'Remove' is consistent and no contradiction exists. However, the description adds no behavioral detail beyond the bare action: nothing about idempotency (what happens if a label isn't attached), atomicity (partial failure if one label_id is invalid), or whether the operation affects other case data. For a mutating tool with all-false annotations, this 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single 8-word sentence with the action verb front-loaded and zero filler. It earns high marks for efficiency, though it is arguably so sparse that it sacrifices informative content — a tradeoff reflected in the other dimension scores.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should convey what the caller gets back (success confirmation, updated case, etc.), but it doesn't. It also fails to clarify queue_id's necessity or failure behavior. For a 3-parameter mutating tool with no annotation or schema support, an agent is left guessing key operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage, case_id and queue_id have basic schema descriptions, but the role of queue_id is never explained — it is unclear why a queue identifier is required to unlink case labels. label_ids lacks a property-level description, and the tool description only loosely maps 'the given labels' to label_ids without clarifying relationships or constraints among the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Remove the given labels from a case' uses a specific verb (remove) and names both the resource (labels) and the scope (a case). It is clearly distinguishable from sibling unlinkClarityProcessLabels by the 'case' qualifier, and from assignCaseLabels by being the inverse operation. It doesn't explicitly name sibling alternatives, but the action and resource are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus assignCaseLabels or other label-related tools, and no exclusions or prerequisites are stated. The only signal is the terse action itself, which leaves context selection entirely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unlinkClarityProcessLabelsUnlink Clarity Process LabelsAInspect

Remove process tags from a process.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
labelIdsYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations show readOnlyHint=false, destructiveHint=false, and idempotentHint=false, which are somewhat contradictory for a removal operation. The description clarifies it's a non-destructive modification (removing links, not deleting the process or labels), but doesn't specify whether it's idempotent or what happens if labels are not currently linked. Given the annotations, the description adds useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that fully captures the operation. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two required parameters, the description is complete for the invocation. However, it doesn't mention potential errors like if the process or labels don't exist, or if the labels are not currently linked. Given the simplicity, the description is adequate but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter names and types are self-explanatory: 'id' identifies the process and 'labelIds' is an array of label UUIDs. The minItems=1 and maxItems=50 constraints are clear from the schema. The description doesn't need to explain them further, though it could clarify that 'labelIds' must correspond to currently assigned labels.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove') and the resource ('process tags' from 'a process'). It distinguishes this from related tools like assignClarityProcessLabels and listClarityProcessAssignedLabels, though it doesn't explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when tags need to be removed, but there is no explicit guidance on when to use this tool versus alternatives like updateClarityProcess or deleteClarityProcessLabel. The context is clear enough for a straightforward removal operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpinRevisionIntegrationConnectionUnpin Revision Integration ConnectionA
DestructiveIdempotent
Inspect

Unpin one of your connections from this build's integration slot. The connection itself is not deleted; only the binding to this slot is removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesAgent ID
build_idYesBuild ID
connection_idYesConnection ID to unpin
integration_idYesIntegration ID (catalog integration ID or slot ID from the list response)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses exactly what is affected: only the binding to the integration slot is removed, and the underlying connection survives. This adds valuable nuance to destructiveHint=true and gives the agent a precise mental model of the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted words. The action is front-loaded, and the clarifying non-deletion note earns its place by preventing a costly misunderstanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutating operation, the description covers the essential effect and non-effect completely, and the schema covers parameters fully. It could add a bit more about prerequisites or expected result, but nothing critical is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds only contextual framing ('this build's integration slot') and does not materially improve per-parameter understanding beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Unpin') and a specific resource ('one of your connections from this build's integration slot'). It explicitly contrasts with deletion, which distinguishes this tool from deleteConnection and removeRevisionIntegration and clarifies its relationship to pinRevisionIntegrationConnection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contextual guidance: use this when you want to remove the binding but keep the connection itself. It implicitly excludes deletion use cases and clarifies the scope of the operation, though it does not explicitly name alternative sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAgentUpdate AgentCInspect

Update an agent's display name or delivery settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew agent display name.
pinnedNoPin the agent to the top of your agents list (true) or unpin it (false). Per-user — each viewer has their own pin. A team on Automations has no agents list for a pin to order, so a pin or unpin there is refused with a 409.
agent_idYesThe agent's unique identifier
thread_idNoThread id to associate with the agent, or null to clear.
slack_enabledNoWhether the agent is reachable via Slack.
agentic_memory_enabledNoToggle agentic memory for the agent.
microsoft_teams_enabledNoWhether the agent is reachable via Microsoft Teams.
computer_use_vpn_config_idNo"direct" to durably pin direct internet (no VPN, immune to future team-default changes), a VPN config UUID to pin that network, or null to follow the team default.
computer_use_sandbox_template_idNo"standard" to durably pin the standard Duvo desktop (immune to future team-default changes), a template UUID to pin that desktop, or null to follow the team default.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate that the operation is not read-only and not destructive; no further safety signals are provided. The description adds no behavioral context such as whether omitted fields are left unchanged, whether the operation is a partial update, what permissions are required, or what error conditions exist beyond what the schema already documents. For a mutating tool with sparse annotations, this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no filler or redundant wording, making it easy to scan. The brevity sacrifices completeness, but conciseness itself is handled well and the key action and resource are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 9-parameter update tool with no output schema and sparse annotations, so the description needs to carry more orienting weight. It does not convey the breadth of settings that can be updated, whether updates are partial or full replacements, or any side-effect/error context beyond the schema's own parameter descriptions. The rich schema helps, but the description alone leaves an agent under-informed about the tool's full scope and behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters in detail, including nuanced behavior for pinned, VPN config, and sandbox template. The description adds only a loose summary ('display name or delivery settings') that under-represents the full parameter set, but since the schema carries the semantic load, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action, 'Update', a resource, 'agent', and a scope, 'display name or delivery settings', which helps distinguish it from sibling tools like updateAgentCaseTrigger and updateAgentFolder. However, 'delivery settings' is somewhat vague and the description omits other updateable aspects such as pinned state, agentic memory, thread association, and computer-use network/desktop settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like createAgent, deleteAgent, duplicateAgent, or updateAgentCaseTrigger. It does not state exclusions, prerequisites, or direct the agent to a more appropriate sibling, so the agent must rely on the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAgentCaseTriggerUpdate Agent Case TriggerAInspect

Update fields on a case trigger. Only the trigger creator or a builder/admin can disable an enabled trigger or change its queue, and only a builder/admin can change queue concurrency.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledNoWhether the trigger is active. Disabled triggers do not dispatch runs.
agent_idYesThe agent's unique identifier
trigger_idYesThe case trigger's unique identifier
concurrencyNoConcurrency cap for the trigger's queue. The cap is queue-wide, so this affects every Agent working the queue, not just this trigger. Only 1 (run cases one at a time) or null (reset the whole queue's cap to the platform default) can be set here; higher caps are configured per-queue via PATCH /v2/admin/case-queues/{queueId}/concurrency. Omit to leave the current value unchanged.
case_queue_idNoQueue whose new cases should trigger this agent

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly=false, destructive=false, and idempotent=false. The description adds meaningful behavioral context about authorization requirements for specific field changes, which is not captured in the annotations. It does not describe side effects, but the low-risk annotations reduce the need for that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the action, and the second adds the key permission constraints. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update operation with a fully documented schema, the description covers the important constraints. It does not describe the return value, but no output schema exists and that is a minor gap for an update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by clarifying role-based permissions for enabled, case_queue_id, and concurrency, telling agents which fields they may be allowed to change.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('fields on a case trigger'), which clearly distinguishes it from create/delete/get/list siblings. It conveys that this modifies an existing case trigger rather than creating or removing one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear permission context: only the trigger creator or a builder/admin can disable or change the queue, and only a builder/admin can change concurrency. This helps an agent decide whether the call is permitted, though it does not explicitly name alternatives like createAgentCaseTrigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAgentFolderUpdate Agent FolderAInspect

Rename an agent folder or move it to a new parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew folder name
folder_idYesThe folder's unique identifier
parent_folder_idNoNew parent folder ID. Pass null to move the folder to the root level.

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is not read-only (readOnlyHint false) and not destructive (destructiveHint false), but the description adds no details about side effects, idempotency, or potential failures. It does not disclose whether renaming affects child folders or if moving changes hierarchy in any other way.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that fits the essential information without fluff. It is front-loaded with the primary action and directly states what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter set and lack of an output schema, the description is sufficient for an agent to understand the operation's purpose and invocation. No additional context is required for this straightforward update action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters are documented with clear semantic meaning. 'name' is described as 'New folder name', 'parent_folder_id' explains the null case for moving to root, and 'folder_id' is clearly the unique identifier. Schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Rename' or 'move') on a specific resource ('agent folder'), distinguishing it from sibling create/delete/list operations. It conveys the exact scope of the operation without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for modifying an existing folder but does not explicitly mention when to prefer this over creating, deleting, or moving multiple folders. Alternatives like 'moveAgentsToFolder' are not referenced, leaving some room for interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAutomationUpdate AutomationAInspect

Update an automation, e.g. rename it. Only the fields present in the body are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew human-readable automation name.
automation_idYesAutomation ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations already indicate this is a non-read-only, non-destructive operation, the description adds a valuable behavioral guarantee: 'Only the fields present in the body are changed.' This clarifies partial-update semantics and assures an agent that unspecified fields are preserved, going beyond what the annotations alone communicate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The primary action is front-loaded, and the partial-update nuance is stated immediately after, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter update tool, the description plus schema and annotations are largely sufficient: required identifier, optional field, and partial-update behavior are all covered. It does not describe return values or failure behavior, and with no output schema, a little more detail there would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents both parameters with descriptions, so the baseline is 3. The description adds meaning by explaining that the name parameter is used for renaming and that only included body fields are modified, which clarifies how automation_id and name interact during an update.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Update an automation,' with a concrete example ('e.g. rename it') that signals the intent. It does not explicitly name or differentiate from the sibling createAutomation/deleteAutomation tools, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus createAutomation, deleteAutomation, getAutomation, or listAutomations. It does not state prerequisites, exclusions, or alternatives; the only usage signal is the verb 'Update,' which is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAutomationTabsUpdate Automation TabsA
Idempotent
Inspect

Replace the automation detail view's tab arrangement. Pinning, unpinning, reordering and hiding a tab are all expressed as a different arrangement.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesLeft-group tab keys in render order
hiddenYesNative tab keys the user removed from the bar
automation_idYesAutomation ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is an idempotent, non-destructive write (readOnlyHint=false, idempotentHint=true). The description adds genuinely useful behavioral context: there is no separate pin/unpin operation, only an arrangement composed of order and hidden arrays. This explains the data model beyond what the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core operation front-loaded and the mental model delivered in the second sentence. Every sentence earns its place, with no filler and no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, idempotent write with a fully documented schema and no output schema, the description is nearly complete: an agent can understand what the call does and what input to provide. It could optionally enumerate valid tab keys or clarify how unlisted tabs are treated, but those are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with descriptions for automation_id, order, and hidden, so the baseline applies. The description reinforces that order and hidden together encode the arrangement, but it does not add parameter-level detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource ('the automation detail view's tab arrangement') and a specific verb ('Replace'), and clarifies that pinning, unpinning, reordering, and hiding are all expressed as arrangement changes. It is clearly distinct from generic automation update tools, though it does not explicitly name a sibling to distinguish from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the appropriate use case—changing the visible tabs or their order in the automation detail view—and the mention of hiding/pinning/reordering gives a clear trigger context. However, it does not explicitly contrast with alternatives such as getAutomationTabs or updateAutomation, so the guidance is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateCaseUpdate CaseAInspect

Edit a case's title and/or its data payload. Provide at least one field. For the payload, send free-form data OR a structured json_data object, never both. json_data is validated against the queue's Case schema and requires the queue to have one; a case that is already typed against a schema keeps its structured payload and rejects a free-text data write. Works on pending, in-progress, and settled cases. Other attributes (status, priority, labels) have their own dedicated endpoints. Returns the updated case with its event history and approval batches.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoNew free-form data payload handed to the agent when the case is claimed. Mutually exclusive with `json_data`.
titleNoNew case title (1–500 characters).
case_idYesThe case's unique identifier
json_dataNoNew structured payload for a case on a queue that has a Case schema. Validated against that schema and mutually exclusive with `data`.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations are all false/neutral, so the description carries the behavioral burden and handles it thoroughly: it discloses validation against a queue schema, rejection of free-text on already-typed cases, allowed case state, and the return value (updated case with event history and approval batches). This goes well beyond what any annotation or JSON-level flag implies and contains no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise despite having high informational density. It is front-loaded with the core purpose, then covers preconditions, edge cases, and return value in a natural sequence. Every sentence earns its place and there is minimal redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema, the description is complete: it explains required input(s), the conditional logic, what output to expect, and how it relates to other case mutation endpoints. An agent can decide when to call this tool and what the outcome will be without needing extra external context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the input schema covers all four parameters, the description adds meaning beyond the schema: the requirement to pass at least one field, the rule never to send both data and json_data, and the behavioral differences when a typed case rejects free-text data. These are not reachable from the schema alone, so this description is indispensable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: 'Edit a case's title and/or its data payload,' naming the exact resource and fields. It then distinguishes itself from other attributes by stating those have dedicated endpoints, which makes it clear why this tool is used and not bulkUpdateCaseStatus or assignCaseLabels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance ('Provide at least one field') and when-not-to-use guidance ('Other attributes (status, priority, labels) have their own dedicated endpoints'). It also gives a hard condition for json_data usage (queue must have a Case schema) and the mutual-exclusion rule, leaving no ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateCaseQueueEvalRubricUpdate Case Queue Eval RubricA
Destructive
Inspect

Edit a single case-level evaluation rubric's title and/or description. The edit produces a NEW rubric (with a new id and slug) so previously judged cases stay attributed to the original criterion; the response contains the new rubric.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoShort, human-readable Pass/Fail rubric title.
queue_idYesThe queue's unique identifier
rubric_idYesThe case-level rubric's unique identifier
descriptionNoA 1-2 sentence Pass condition phrased as a question.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal mutation/destructiveness, but the description adds critical behavior beyond them: the update creates a NEW rubric with a new id and slug, preserves attribution of previously judged cases, and returns the new rubric. This is valuable context that prevents an agent from assuming an in-place update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the action and scope, and the second delivers the critical side-effect information about new IDs, attribution preservation, and the response. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with full schema coverage and annotations, the description covers the essential missing piece: the non-obvious create-new-rubric behavior and the response shape. No output schema exists, but the description explicitly states the response contains the new rubric, making the tool sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents all four parameters with descriptions and constraints. The description adds no parameter-specific meaning beyond naming title and description as the editable fields, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Edit') with a clearly defined resource ('a single case-level evaluation rubric's title and/or description'). It distinguishes this tool from siblings like createCaseQueueEvalRubric, replaceCaseQueueEvalRubrics, and deleteCaseQueueEvalRubric by emphasizing 'single' and 'case-level', so an agent can select 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for editing only the title and/or description of a single case-level rubric, and it explains a key condition: the edit produces a new rubric so previously judged cases stay attributed to the original criterion. However, it does not explicitly name alternatives or state when-not-to-use, so guidance is implied rather than fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityFolderUpdate Clarity FolderAInspect

Rename a process folder. Renaming a landscape-linked folder permanently stops landscape name-sync.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew folder name.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
folderIdYesFolder to rename.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a significant behavioral disclosure: renaming a landscape-linked folder permanently stops landscape name-sync. This goes beyond the annotations, which only state readOnlyHint=false and destructiveHint=false, and informs the agent of an irreversible side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action and then gives the critical caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple rename operation with two required parameters and no output schema, the description is mostly complete. It supplies the essential permanent side-effect warning, though it does not describe return values or error behavior, which is not critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions already present for folderId, name, and team_id. The description itself adds no new parameter meaning, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Rename a process folder.' This clearly differentiates it from related tools like createClarityFolder, deleteClarityFolder, and reorderClarityFolders. The phrase 'process folder' adds precision beyond the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when the tool is used—renaming a process folder—but does not explicitly mention alternatives or exclusion conditions. The warning about landscape-linked folders implies a when-not-to-use scenario, but no sibling tool is named or recommended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityGuidanceUpdate Clarity GuidanceBInspect

Update the automation guidance message for a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe clarity process ID
contentYesReplacement automation guidance for the process.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description essentially restates the mutating nature already encoded by readOnlyHint=false. It does not disclose what happens to existing guidance, whether the referenced clarity process must already exist, or any side effects. Annotations provide some baseline, but the description adds little behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to identifying the action and target resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with detailed schema descriptions and annotations, this is minimally viable. However, it lacks sibling differentiation and any note about replacement semantics or error conditions, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both id and content are already documented structurally. The description's 'automation guidance message' and 'clarity process' language aligns with the parameters but adds no additional semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action, 'Update', a specific resource, 'automation guidance message', and scopes it to 'a clarity process'. This distinguishes it from generic process-update tools, though it does not explicitly differentiate it from createClarityGuidance or updateAutomation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like createClarityGuidance, updateClarityProcess, or updateAutomation. The usage context is only implied by the verb 'Update' and the parameter descriptions, with no explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityLandscapeNodeUpdate Clarity Landscape NodeAInspect

Rename a process landscape node or update its owner label (team manager or above for team processes; organization admin for areas)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
orgIdYes
nodeIdYes
ownerLabelNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation, and the description adds the role/permission requirement. It does not disclose what happens when ownerLabel is null, whether both fields can be updated together, or what success/failure responses look like, but the simple update nature and annotation coverage keep the gap moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with the verb and object front-loaded and a parenthetical for role constraints. There is no redundant restatement of the title or schema fields; every part of the sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool does and who can use it, but not complete call semantics: it lacks alternative routing among the many Clarity landscape siblings, null/clear behavior for ownerLabel, and return/error expectations. For a simple update with no output schema, it is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning, and it does for name and ownerLabel ('rename' and 'update its owner label'). It leaves orgId and nodeId unexplained and does not mention that ownerLabel accepts null to clear the label, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with explicit actions 'Rename a process landscape node or update its owner label', identifying the exact resource and the two update operations. This clearly separates it from sibling mutators like updateClarityLandscapeNodePerson and assignClarityLandscapeNodeTeam without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical provides authorization context ('team manager or above for team processes; organization admin for areas'), which helps the agent know prerequisites for using this tool. However, it does not explicitly state when not to use this tool or direct users to alternative siblings for person/team/placement updates; usage context is only implied by the verb and resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityLandscapeNodePersonUpdate Clarity Landscape Node PersonAInspect

Change the role a person plays in the process behind a process landscape node (for example "Approver"). Send role: null to clear it.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNo
orgIdYes
nodeIdYesA process landscape node that is linked to a real process.
teamIdNo
personIdYesThe person entry to change, as returned by listClarityLandscapeNodePeople.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry write intent (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds one non-obvious behavioral detail: null clears the role rather than being an invalid value. It does not disclose side effects, permissions, or the outcome for the person assignment when the role is cleared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core action is front-loaded, and the second sentence efficiently communicates the important null-clearing behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple write operation with no output schema: the description covers the intent and the key role nuance, and the schema documents nodeId and personId. However, it omits expected return behavior, failure conditions, and any guidance for the optional teamId parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description needs to compensate. It does add real meaning for the role parameter by explaining it semantically and giving an example, but it does not describe orgId or teamId, leaving those to be inferred from their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Change'), a precise object (the role a person plays in the process behind a process landscape node), and gives a concrete example ('Approver'). This clearly distinguishes it from sibling add/remove/list tools even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful operational guidance ('Send role: null to clear it') but does not explicitly say when to prefer this tool over addClarityLandscapeNodePerson or removeClarityLandscapeNodePerson. The intended usage is inferable from the action 'change the role', but no alternative routing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityOrganizationInterviewUpdate Clarity Organization InterviewCInspect

Rename an organization landscape Clarity capture

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
titleYes
interviewIdYesThe organization interview ID

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations are all false/neutral and provide little safety or behavioral context, so the description carries the burden. It adds that the operation is a rename, implying the title changes, but it does not disclose side effects, authorization needs, uniqueness constraints, or whether the change is reversible. This is minimal beyond what the annotations already convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single terse sentence with no filler, and the core action is front-loaded. It is efficient but leans toward under-specification, leaving necessary context absent while remaining concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three required parameters, no output schema, and weak annotations, the description is too thin for an agent to confidently construct a correct call. It lacks parameter mapping, side-effect notes, and any indication of what the response contains, so it is not complete enough for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only interviewId is described). The description does not explain the role of orgId, nor does it explicitly state that title is the new name for the interview. 'Rename' hints at the title's purpose but does not sufficiently compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation ('Rename') and resource ('organization landscape Clarity capture'), which is distinct from sibling operations like delete, finalize, or list. However, the term 'Clarity capture' is not exactly the schema's language ('organization interview'), introducing minor ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as finalizeClarityOrganizationInterview or deleteClarityOrganizationInterview. The only implicit signal is that this tool renames, but no exclusions, prerequisites, or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityProcessUpdate Clarity ProcessAInspect

Update a Clarity process name, guidance, visibility, or completion status. Team Builders can edit names and guidance, only the creator or a team manager can change visibility, and completion requires a Lead Builder role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process id
nameNoNew process name
statusNoMark a review-stage process complete
visibilityNoProcess visibility within the team
customPromptNoProcess-specific guidance, or null to clear it

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only specify readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description must carry the behavioral disclosure burden. It does disclose role-based permissions and that it modifies process attributes. However, it does not explicitly state whether the update is partial (only provided fields) or full replacement, nor does it mention potential side effects on dependent data. This is a minor gap given the clear per-field restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the operation and fields, then adds role constraints in a structured manner. Every sentence serves a distinct purpose, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 parameters, role restrictions, enum values), the description covers the essential operational context: what can be updated and by whom. It does not describe return values, but since there is no output schema, that is not a blocking gap. It also omits whether passing no fields besides id is valid, but the schema marks id as required, and the enum for status implies only 'complete' is allowed. Overall, it is sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all parameters have descriptions in the input schema), so baseline is 3. The description adds valuable context by mapping each editable field to the roles allowed to change it (e.g., 'Team Builders can edit names and guidance' directly relates to name and customPrompt parameters). This exceeds baseline by providing permission semantics beyond the schema, though it doesn't elaborate on parameter formats or interactions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' with the specific resource 'Clarity process' and lists the exact fields (name, guidance, visibility, completion status). It distinguishes itself from siblings like createClarityProcess and deleteClarityProcess by focusing on mutation of existing processes, giving an agent a precise understanding of its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit role-based guidance: Team Builders can edit names and guidance, only the creator or team manager can change visibility, and completion requires Lead Builder role. This effectively tells the agent when the operation is permitted and under what conditions, leaving no ambiguity about prerequisites or restrictions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityProcessLabelUpdate Clarity Process LabelCInspect

Update process tags for an organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYes
valueNo
labelIdYes
colorHueNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, so the mutation nature is known. The description adds no behavioral context beyond that, such as whether this is a partial update, whether existing label values are overwritten, or whether authorization is required. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler or redundant phrasing. It is appropriately concise, though that brevity contributes to the lack of semantic detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, no schema descriptions, no output schema, and a mutation operation, the description is too thin. It does not communicate which fields are updatable, whether all fields are optional, or what the effect of calling it is on the referenced label. An agent would likely need to inspect sibling tools or schemas to use it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to explain what value and colorHue mean and how they relate to updating a label. The description only says 'update process tags,' which does not map to the four parameters and leaves labelId, value, and colorHue semantics to the agent's inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Update' and names the resource as 'process tags,' which aligns with the tool name, but it is vague about what is actually being changed (label value, color, or something else). It does not distinguish this from related siblings like assignClarityProcessLabels or createClarityProcessLabel, which also operate on clarity process labels/tags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus alternatives such as createClarityProcessLabel, deleteClarityProcessLabel, or assignClarityProcessLabels. There are no exclusions, prerequisites, or context cues beyond the generic 'for an organization.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityProcessSharingUpdate Clarity Process SharingAInspect

Enable or disable sharing for a clarity process

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClarity process ID.
enabledYesWhether public process sharing is enabled.
proposalShareEnabledNoWhether the automation proposal is included. Public sharing must already be enabled when only changing this setting.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is a mutating operation (readOnlyHint=false) and non-destructive. The description adds no extra behavioral context such as side effects of disabling sharing, permission requirements, or what happens to existing shared links. It essentially restates the action implied by the name and title.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It states the action and object directly and efficiently, leaving parameter details to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema covers parameter semantics well, and this is a relatively simple mutation tool. Still, the description omits broader context such as prerequisites beyond the schema note and any side effects that disabling sharing may have, which an agent might need before invoking the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all three parameters, including the precondition that public sharing must already be enabled when only changing proposalShareEnabled. The description itself adds no parameter-level meaning, so it earns the baseline score for a fully covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Enable or disable') and a specific resource ('sharing for a clarity process'). This clearly distinguishes it from sibling tools that update other clarity process aspects such as labels, links, or general process settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied by the action: call this when you want to change the sharing state of a clarity process. However, it does not explicitly mention alternatives like getClarityProcessSharing for reading current sharing settings, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateClarityTeamSettingsUpdate Clarity Team SettingsCInspect

Update clarity team settings for financial calculations

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
industryNo
languageNo
teamSizeNo
companyNameNo
annualRevenueNo
averageHourlyRateNo
emailReportsEnabledNo
emailReportIncludeSummaryNo
emailReportIncludeCapturesNo

TDQS

C2.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only trivial hints (readOnlyHint=false, idempotentHint=false, destructiveHint=false) which are neutral, so the description carries the burden of behavioral disclosure. It merely says 'update', which is a restatement of the tool's name. It does not disclose side effects, whether it's a partial or full update, authorization requirements, or any impact on financial calculations. No value beyond the schema is added.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence, which is front-loaded with the core action. However, it is so terse that it omits critical information needed for correct invocation. It earns its place in that it avoids verbosity, but the brevity is a disservice given the tool's complexity. It is not overlong but under-informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex mutation tool with 10 parameters, 90% of which are undocumented in the schema, and no output schema. The description provides minimal purpose ('for financial calculations') and nothing else. It lacks usage guidance, behavioral transparency, and parameter explanation. An agent cannot call this tool correctly without external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 10% (only team_id has a description). The description does not explain any of the 10 parameters, such as industry, annualRevenue, or emailReportsEnabled, beyond what the types imply. It does not compensate for the low schema coverage by clarifying the meaning or purpose of the fields. An agent would be left guessing what 'averageHourlyRate' means in the context of financial calculations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('Update'), the resource ('clarity team settings'), and a specific purpose ('for financial calculations'). This is clear enough to distinguish it from other updateClarity* tools, though it doesn't enumerate which settings are updatable. The verb and resource are specific, and it is not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives, no prerequisite conditions, and no exclusions. It simply states what it does. There is no mention of the read counterpart (getClarityTeamSettings) or any routing criteria. An agent has no context for selecting this over other update tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateConfigFieldUpdate Config FieldAInspect

Set or clear a config field's value. A locked field stays editable here (locking only tells an agent not to reason around the value, it never blocks a human correction). value: null clears the field back to "default".

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
fieldIdYesConfig field ID
automationIdYesAutomation ID

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating call, so the description does not need to restate that. It adds valuable behavioral detail beyond annotations: locked fields remain editable here, and the lock's purpose is purely advisory for agents. It also specifies the null-clears-to-default behavior, which is a meaningful side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. The primary action is front-loaded, and both clarifying details—locked-field behavior and null semantics—earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation with only three required parameters and no output schema, the description gives enough information to invoke it correctly. The only minor gap is not stating how non-null values are handled or what the response contains, but the schema and tool's simplicity make these non-blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents `automationId` and `fieldId`, but leaves `value`'s semantics implicit despite its complex anyOf type. The description compensates by explaining the null case explicitly ('clears the field back to default'), which is the most behaviorally important parameter detail. It does not fully enumerate value semantics, but the schema covers the allowed types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Set or clear') on a specific resource ('a config field's value'), which goes beyond the title and clearly distinguishes it from the many other update* siblings. It also conveys the core semantic distinction of setting versus clearing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is the tool to use for changing a config field's value, including locked fields, which are explicitly addressed. It does not name alternatives or state when not to use it, but no direct sibling alternative exists for updating config fields.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateConnectionUpdate ConnectionAInspect

Update an existing connection. For sensitive header values, sending an empty string keeps the existing value; send a new value to overwrite. Toggling shared moves the connection between personal and team-shared.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
sharedNo
headersNo
server_urlNo
auth_methodNo
connection_idYesConnection ID

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only generic annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description adds meaningful behavioral detail: empty strings preserve sensitive header values and toggling `shared` moves between personal and team-shared. This goes beyond the schema and gives agents important update semantics, though it doesn't disclose all edge cases like how to remove a header.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: the first states purpose, the second clarifies sensitive-header behavior, and the third clarifies the `shared` toggle. Every sentence adds necessary information, and the most important nuance is front-loaded immediately after the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with six parameters and no output schema, the description covers the two most non-obvious behaviors (partial header updates and `shared` toggling) well. It is slightly incomplete in not stating whether omitted fields are left unchanged or how to clear sensitive header values, but overall it provides enough context for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description partially compensates by explaining the nuanced behavior of `headers` and `shared`. Other parameters like `name`, `server_url`, and `auth_method` rely on their self-explanatory names and enum/format constraints, but the description does not describe every parameter's update behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Update an existing connection,' a specific verb and resource that clearly distinguishes this from createConnection, deleteConnection, getConnection, and listConnections. The word 'existing' reinforces the update semantics and makes the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this is the tool to modify an already-created connection, which is the right context against the sibling create/delete/get/list tools. However, it does not explicitly state when not to use it or name an alternative tool, leaving some routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateCredentialUpdate credential by idAInspect

Update a login by id. At least one of password or otp_secret must remain set after the update. Editing a team-shared login or toggling sharing requires lead builder role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
domainNo
sharedNo
userIdYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
passwordNo
usernameNo
otp_secretNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only and non-idempotent, and the description adds useful behavioral context: the password/otp invariant and the role requirement for shared-login edits. It also reveals that sharing can be toggled through this tool. The partial-update semantics are not disclosed, but the description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the action and scope; the second packs in both a data invariant and a permission constraint. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema, the description is minimal but viable. It covers the core invariant and authorization requirement, yet leaves important gaps like what happens with omitted fields, what the response contains, and why userId is required. The annotations cover safety but not operational detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 13%, so the description must add meaning to parameters. It clarifies the password/otp_secret invariant and the behavior around the 'shared' field, but leaves required userId, id, domain, username, and nullability semantics implicit. The most important constraints are covered, but not enough to fully compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('a login') with an id scope, making the basic operation clear. It is distinguishable from createCredential and deleteCredential, though it doesn't explicitly name them or clarify the 'credential'/'login' terminology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides actionable usage constraints: at least one of password or otp_secret must remain set, and editing team-shared logins or toggling sharing requires lead builder role. This helps an agent decide whether a requested update is valid or permissioned, though it does not explicitly contrast with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateEvalRubricUpdate Eval RubricA
Destructive
Inspect

Edit a single Agent-specific evaluation rubric's title and/or description. The edit produces a NEW rubric (with a new id and slug) so previously scored Runs stay attributed to the original criterion; the response contains the new rubric.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoShort, human-readable Pass/Fail rubric title.
agentIdYesThe agent's unique identifier (Assignment ID)
rubricIdYesThe custom rubric's unique identifier
descriptionNoA 1-2 sentence Pass condition phrased as a question.
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing the critical non-obvious behavior: the edit creates a NEW rubric with a new id and slug, previously scored Runs remain attributed to the original criterion, and the response contains the new rubric. This is exactly the kind of behavioral nuance an agent needs and complements the destructiveHint annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence. It front-loads the core action and then efficiently explains the most important consequences: new id/slug, preservation of past Run attribution, and the response containing the new rubric. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description does a good job of noting that the response contains the new rubric and explaining the versioning side effect. Combined with the fully documented schema, the agent has enough context to invoke the tool. It falls slightly short of complete because it does not summarize the selected_automation_revision_id draft/active behavior, though the schema covers it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already well documented, including the complex selected_automation_revision_id behavior. The description mentions title and/or description at a high level but does not add new parameter meaning beyond what the schema already provides, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: edit a single Agent-specific evaluation rubric's title and/or description. It identifies the resource and the fields affected, so an agent can understand what the tool does. However, it does not explicitly differentiate this tool from related siblings such as createEvalRubric, replaceEvalRubrics, or updateCaseQueueEvalRubric.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for editing an existing rubric, but it gives no explicit guidance on when to use it versus creating, replacing, or deleting a rubric. No exclusions, prerequisites, or alternative tool mentions are provided, leaving the agent to infer appropriate usage from the tool name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateFileContentUpdate File ContentB
Idempotent
Inspect

Update the content of a text file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath of the file relative to the team's storage root
contentYesNew UTF-8 text content for the file
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description aligns with those signals. However, the description adds no extra behavioral detail beyond the title, such as whether the entire file content is replaced or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence with no filler or redundancy. It is appropriately concise, though it is so terse that it mostly restates the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple write operation, the schema and annotations provide most of the essential context. However, there is no output schema or description of the return value, and the lack of usage guidance leaves cross-tool selection incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all three parameters with 100% coverage, including path relative to the storage root, new UTF-8 content, and team_id semantics. The description adds no additional parameter meaning beyond the generic term 'content'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('content of a text file'), so an agent can tell this operation modifies file contents. However, it does not differentiate this tool from sibling file tools like updateSkillFile or getFileContent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as updateSkillFile, getFileContent, or renameFile. The description only implies generic usage for updating text files, leaving tool selection largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updatePulseDashboardUpdate Pulse DashboardAInspect

Update a Duvo Pulse dashboard's settings — rename it. Only the creator can update it.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
artifactIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations: only the creator is permitted to update the dashboard, and the concrete mutation is a rename. It does not mention versioning or return behavior, but for a simple rename the permission constraint is the most important 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with zero filler. The action is front-loaded ('Update a Duvo Pulse dashboard's settings — rename it'), and the authorization note is a single clause. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter rename with no output schema, the description plus schema constraints give an agent enough to call it correctly: what to do, on which object, and who is allowed. The only notable gaps are unstated versioning behavior and response format, but these are minor for such a simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. 'Rename it' maps title to the new dashboard name, and artifactId is reasonably inferable as the target dashboard identifier, but there is no explicit statement that artifactId identifies the dashboard to update or that title replaces the existing title. This is adequate but not thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update'), a specific resource ('a Duvo Pulse dashboard'), and narrows the action to renaming it rather than updating arbitrary settings. This separates it from create/delete/move/duplicate dashboard siblings, though it does not name 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: rename an existing Pulse dashboard. It also adds an explicit authorization condition, 'Only the creator can update it,' which helps an agent decide whether to attempt the call. It does not describe when to prefer a sibling tool like movePulseDashboard or createPulseDashboard, 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.

updateQueueUpdate QueueCInspect

Update a queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew queue name. Must be unique within the team. This route is refused once a team is on automation revisions, where a queue is instead renamed through its revision binding and uniqueness is checked per revision on activation.
queue_idYesThe queue's unique identifier
folder_idNoNew folder id, or null to move to the root.
descriptionNoNew description, or null to clear.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a mutating, non-idempotent operation, but the description adds no behavioral context beyond that. It does not disclose what changes are applied, whether the operation replaces fields wholesale, any side effects, 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but not appropriately sized for a four-parameter mutation tool. It contains only a single tautological sentence and omits informative content that would help an agent invoke it correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is incomplete for the tool's complexity. With no output schema and sparse annotations, the burden falls on the description, but it fails to explain update semantics, alternatives, or operational constraints, leaving the agent to rely entirely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents each parameter thoroughly, including the special automation-revisions constraint on name. The description itself adds no parameter-level semantics, keeping this at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update a queue.' is a tautology—it restates the tool name and title without specifying what aspects of the queue can be updated, what the effect is, or how this differs from createQueue/deleteQueue/getQueue. It provides no detail beyond the verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not mention when to use this tool instead of createQueue, deleteQueue, or other queue-related tools, nor does it indicate prerequisites or constraints such as the automation revisions restriction described in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateQueueJsonSchemaSettingsUpdate Queue Json Schema SettingsAInspect

Turn a queue's schema guard on or off, and freeze or unfreeze the schema document. A guarded queue with no schema yet asks its producing agent to declare one; a frozen schema refuses every change until it is unfrozen.

ParametersJSON Schema
NameRequiredDescriptionDefault
frozenNoClose the schema document to change. The queue must already have a schema.
guardedNoRequire every new case on this queue to be typed. When on and the queue has no schema yet, the producing agent must declare one before it can add cases.
queue_idYesThe queue's unique identifier

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish readOnly=false and destructive=false, so the mutation is already known. The description adds meaningful behavioral detail: a guarded queue with no schema requires the producing agent to declare one, and a frozen schema rejects all changes until unfrozen. This explains the state transitions the call triggers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, and no filler. The follow-up sentence clarifies the two key states in parallel. Every clause contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-boolean mutation tool with well-described parameters and annotations, the description covers the core semantics and state effects. It does not mention return values or the relationship to replaceQueueJsonSchema, but these are not required for correct invocation. Slight gap in usage guidance keeps this below a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers all three parameters with descriptions (100% coverage), so the baseline is 3. The description mostly paraphrases the guarded and frozen parameter descriptions, adding only the phrasing 'asks its producing agent to declare one' and 'refuses every change until it is unfrozen.' It does not need to compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb phrase 'Turn a queue's schema guard on or off' and 'freeze or unfreeze the schema document,' identifying both the resource and the two toggles. This distinguishes it from schema-content operations like replaceQueueJsonSchema and attachQueueJsonSchema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for changing guard/frozen settings but does not explicitly say when to prefer it over related tools such as replaceQueueJsonSchema or attachQueueJsonSchema. There are no stated exclusions or alternative conditions. Usage is left to inference from the tool name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateQueueLabelUpdate Queue LabelBInspect

Update a label's key, value, or color. Renaming key/value affects every case assigned to this label.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
valueYes
label_idYesThe label's unique identifier
queue_idYesThe queue's unique identifier
color_hueNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds valuable behavioral context by disclosing that renaming key/value affects every case assigned to the label, which is a significant side effect an agent should know before invoking 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The primary action is stated immediately, and the high-impact side effect is included in the second sentence. Every word contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main fields and the key side effect, but for a 5-parameter mutation tool with no output schema, it leaves gaps: no usage guidance, no explanation of key/value semantics, and no note on whether color updates behave differently from key/value updates. The schema and annotations fill some but not all of these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, with only label_id and queue_id documented. The description mentions key, value, and color, but does not explain what 'key' and 'value' mean in the queue-label context, nor does it clarify the semantics of color_hue beyond the schema's numeric range. This does not sufficiently compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update a label's key, value, or color'), identifies the specific attributes that can be changed, and implies the tool targets queue/case labels through the context of assigned cases. It does not explicitly differentiate from sibling updateClarityProcessLabel, but the queue_id parameter and name provide enough grounding.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives like createQueueLabel, deleteQueueLabel, or updateClarityProcessLabel. The description simply restates the operation without providing selection criteria, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateRevisionUpdate RevisionAInspect

Update a revision's configuration, name, description, or handover targets. Returns the updated revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoBuild configuration object
build_idYesThe build's unique identifier
handoverToNoThe single agent or code step to run after this one completes ("Handover to"). Null clears it; omit to leave it unchanged. Mutually exclusive with @-mention handovers in the AOP.
revision_nameNoOptional user-defined name for this revision. Pass null to clear.
handoverOptionsNoCode steps only. The targets the program may request, and whether it must. Null clears them; omit to leave unchanged. Mutually exclusive with handoverTo in one request.
handoverTargetIdsNoAgent IDs that this agent can hand over work to
revision_descriptionNoOptional user-defined description for this revision. Pass null to clear.
selected_automation_revision_idNoThe automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is not read-only and is not destructive. The description adds only the fact that it returns the updated revision. It does not disclose further side effects such as permission requirements, whether changes are reversible, or the behavior when editing an active revision versus a draft. Since the bar is lowered by the annotations, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundant filler. The action verb is frontloaded, the scope is enumerated concisely, and the return value is a single useful clause. It is easy to scan and contains no extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex (8 parameters, nested objects, conditional branching logic), but the schema descriptions are very detailed (e.g., the semantics of selected_automation_revision_id). The description adds the return value, which is important since there is no output schema. The key draft-vs-active interaction is not mentioned in the description, but it is thoroughly documented in the schema, so the description is complete enough for an agent that will read the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – every parameter has a detailed description including nuances like null-clearing and mutual exclusivity. The description adds no parameter specifics beyond a general summary of field categories, so it contributes no additional value over the schema. A balanced baseline of 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation (update), the resource (revision), and specifically which attributes (configuration, name, description, handover targets). This is unambiguous and distinguishable from siblings such as createRevision, getRevision, and promoteAutomationRevision. It also adds the return value expectation, which is not present in the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a flat statement of what the tool does but provides no when-to-use guidance versus alternatives, no prerequisites, and no mention of the draft/active branching behavior. There is no naming of sibling tools or conditions for selecting updateRevision instead of createRevision or other revision operations. This matches the update_drive calibration, which was scored 2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateScheduleUpdate ScheduleAInspect

Update fields on an existing schedule. Only supplied fields are changed; omitted fields retain their current values. Owners may update their own schedules; team superadmins may update any schedule on agents in the current team.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo
cronNo
timeNo
enabledNo
agent_idYesThe agent's unique identifier
timezoneNo
frequencyNo
recurringNo
schedule_idYesThe schedule's unique identifier
day_of_monthNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations by explaining that only supplied fields are changed and omitted fields retain their values. It also discloses permission boundaries. It does not describe side effects or return behavior, but with annotations present, this is acceptable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: the purpose comes first, followed by patch behavior, then authorization. Every sentence contributes essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action, partial update behavior, and permissions, which is good for selection. However, there is no output schema and no mention of return values, and parameter details like cron or time format are absent, leaving some gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, and the description does not compensate by explaining what fields like cron, time, timezone, frequency, or day_of_month mean or what formats they require. The generic patch rule is useful, but the meaning of most parameters is left to schema names and enums alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Update fields on an existing schedule.' It clearly implies this is not the create or delete operation, but it does not explicitly name a sibling such as createSchedule or listAgentSchedules for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful usage context by explaining partial-update semantics and who is authorized to update schedules. However, it does not explicitly state when to prefer this tool over alternatives or mention when the tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateSecretUpdate SecretAInspect

Update an env-var secret. Send values to replace all entries, or any of rename_keys, remove_keys, add_values for a non-destructive patch. Editing a team-shared secret or toggling sharing requires lead builder role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
sharedNo
valuesNo
add_valuesNo
remove_keysNo
rename_keysNo
service_slugNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses that the operation can fully replace or partially patch entries, and that toggling sharing requires a special role. This adds useful behavioral context, though it does not cover idempotency, conflict handling, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and logically structured: first the purpose, then the operational modes, then the role caveat. No redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the main update modes and role requirement, it does not explain the behavior of name and service_slug parameters, nor does it address potential errors (e.g., conflicting values and add_values) or the return payload. Given the lack of an output schema, some gaps remain, but the description is sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, so the tool description is the only source of meaning. It explains the semantics of the key parameters (values, rename_keys, remove_keys, add_values) and clarifies that shared toggling has role implications. It omits explanations for id, name, and service_slug, but the core update parameters are well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and the resource ('env-var secret'), and distinguishes between full replacement and non-destructive patch modes. It also mentions a critical role requirement, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete guidance on how to use the tool ('send values to replace, or rename_keys/remove_keys/add_values for patch') and mentions the role requirement for team-shared secrets. It does not explicitly compare to alternatives like createSecret or deleteSecret, but the context of updating an existing secret is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateSkillFileUpdate Skill FileA
Idempotent
Inspect

Update the content of a file in a skill, overwriting the active revision in place — the previous content is not recoverable. Prefer the non-destructive flow when you can: createSkillRevision to open a draft, updateSkillRevisionFile to edit it, promoteSkillRevision to activate it. Only team skills can be edited.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the file inside the skill, e.g. SKILL.md.
contentYesNew UTF-8 text content for the file.
skill_idYesSkill ID.

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is transparent about irreversibility ('the previous content is not recoverable'), but the annotations declare destructiveHint=false, which directly contradicts that warning. Per the contradiction rule, this dimension must be scored 1, even though the prose alone would be strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying essential information: the destructive update, the safer alternative workflow, and the team-skill constraint. No filler, and the most important caveat is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter mutation with no output schema, the description covers the destructive consequence, the alternative flow, and the prerequisite. It loses one point only because the conflicting destructiveHint annotation makes the overall context less trustworthy and could mislead an agent despite the clear prose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains path, content, and skill_id with adequate descriptions. The tool description adds no parameter-specific semantics beyond the overall overwrite behavior, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Update the content of a file in a skill'), the target resource, and the critical mode 'overwriting the active revision in place.' This clearly differentiates from siblings such as updateSkillRevisionFile and promoteSkillRevision, which operate on drafts or activation rather than live content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly advises preferring the non-destructive flow ('Prefer the non-destructive flow when you can') and enumerates the exact alternative sequence: createSkillRevision, updateSkillRevisionFile, promoteSkillRevision. It also states the constraint 'Only team skills can be edited,' so the agent knows when the tool is applicable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateSkillRevisionUpdate Skill RevisionAInspect

Rename a skill revision or change its description. Works for drafts, the active revision, and historic revisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
revision_nameNoOptional user-defined name for this revision. Pass null to clear.
skill_revision_idYesSkill revision ID.
revision_descriptionNoOptional user-defined description for this revision. Pass null to clear.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey this is a mutating but non-destructive operation (readOnlyHint=false, destructiveHint=false). The description adds one genuinely useful behavioral fact — that even historic revisions are editable, which is atypical. However, it does not disclose potential side effects of editing the active revision (e.g., impact on running skills/agents) or whether partial updates patch versus overwrite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler. The core action is front-loaded in the first sentence, and the second sentence adds lifecycle scope that earns its place. This is an appropriately sized definition for a simple three-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with full schema coverage and no output schema, the description covers what it does and across which revision states it works. The remaining gaps — routing to the generic updateRevision sibling and clarifying side effects on the active revision — are relatively minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters including the 'Pass null to clear' semantics for both optional fields. The description's mention of renaming and changing description merely mirrors the schema without adding new parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (rename/change a skill revision) and the exact fields mutated (name, description), which clearly separates it from createSkillRevision, deleteSkillRevision, and promoteSkillRevision. However, it does not explicitly distinguish itself from the generic updateRevision sibling, which could overlap with this tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Works for drafts, the active revision, and historic revisions' clause gives useful applicability context, implying the agent can use this tool on any revision lifecycle state. But it names no alternatives and gives no when-not-to-use guidance, especially against the similarly named updateRevision and updateSkillRevisionFile siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateSkillRevisionFileUpdate Skill Revision FileA
DestructiveIdempotent
Inspect

Write a text file into a skill revision. Writing into a draft leaves the active revision untouched until the draft is promoted; writing into the active revision changes what the skill runs immediately. Historic revisions are read-only: create a draft from one to edit it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the file inside the revision, e.g. SKILL.md.
contentYesNew UTF-8 text content for the file.
skill_revision_idYesSkill revision ID.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (write, destructive, idempotent), the description adds valuable behavioral context: the draft-versus-active distinction, the impact on the running skill, and the read-only constraint on historic revisions. This meaningfully explains side effects the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying essential information. The main action is front-loaded, followed by the critical revision-state semantics and the read-only caveat. No filler or redundant restating of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the most important contextual complexity of this tool: how revisions behave differently depending on draft/active/historic state. With no output schema, return values need not be described, and the 100% parameter coverage handles the remaining specifics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already documented. The description adds extra semantic value by implying that skill_revision_id must refer to a draft or active revision (not historic), and by framing path and content as file contents within a revision.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Write a text file into a skill revision.' It clearly distinguishes this file-level operation from sibling tools like updateSkillFile and updateSkillRevision by targeting files within a revision and explaining draft/active/historic behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: writing to a draft leaves the active revision untouched, while writing to the active revision changes behavior immediately. It also tells users that historic revisions are read-only and advises creating a draft to edit them, but it does not name the specific alternative tool to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateSlackTriggerUpdate Slack Channel TriggerAInspect

Update a Slack channel trigger you own — repoint it at another channel, change which messages match, or pause and resume it with enabled. Only the supplied fields change. Resuming a paused trigger requires the Slack connection it runs off to still be available on the agent; changing the channel resets the trigger's seen-message state.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledNoSet to false to pause the trigger without deleting it, or true to resume it. Resuming requires the connection the trigger uses to still be available on the agent.
channel_idNoNew Slack channel ID to watch. Omit to leave unchanged.
is_privateNoWhether the channel is private.
match_ruleNoWhich channel messages fire the trigger: `{"kind":"all"}` for every message, or `{"kind":"contains","values":["invoice"]}` to match keywords.
trigger_idYesThe Slack channel trigger's unique identifier
channel_nameNoNew Slack channel name, without the leading `#`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description meaningfully discloses behavioral details beyond the annotations: partial updates, the connection prerequisite for resuming a paused trigger, and the state-resetting side effect of changing channels. These are exactly the non-obvious behaviors an agent needs to know when invoking a mutation that is not annotated destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the full meaning, with the core action front-loaded and supporting behavioral caveats placed right after. There is no redundant language, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update tool with six parameters, no output schema, and sparse annotations, the description covers the critical operational details: what can change, partial-update semantics, a prerequisite for resuming, and a side effect of channel changes. The schema fills in parameter-level detail, making this complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds value by connecting `enabled` to pause/resume semantics, noting the channel-change state reset, and reinforcing partial-update behavior. This is a modest but tangible contribution beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Update a Slack channel trigger you own,' and enumerates the distinct update capabilities (repoint channel, change match rule, pause/resume). The ownership qualifier adds scope, and the specificity of 'Slack channel trigger' distinguishes it from related trigger tools like updateAgentCaseTrigger.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is for updating existing Slack channel triggers, not creating or deleting them, and stresses partial-update semantics via 'Only the supplied fields change.' It provides context for when to use it but does not explicitly name sibling alternatives like createAgentSlackTrigger or deleteSlackTrigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateTeamInviteUpdate Team InviteAInspect

Change the role on a pending team invitation. Only pending invitations can be updated — one already accepted or declined is rejected. Requires the Manager role or above on the invitation's own team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the pending invitation to update.
roleYesNew team role for the invitation. One of: team:owner, team:superadmin, team:admin (deprecated), team:manager, team:builder, team:member, team:clarity-member. You cannot assign a role above your own.
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal the operation is a non-read-only mutation. The description adds meaningful behavioral context beyond that: only pending invitations are accepted, accepted/declined invitations are rejected, and Manager role or above is required. This clarifies state constraints and permission needs that 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first states the primary purpose, and the second adds the key state and permission constraints. There is no filler, repetition of schema content, or extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three well-documented parameters and no output schema, the description covers the critical conditions for successful invocation: pending state, role restriction, and authorization level. It could be slightly more complete by noting the success response or side effects, but the existing constraints are sufficient for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents the id, role, and team_id parameters. The description adds a team-level permission requirement, but this is contextual rather than parameter-specific, so it does not significantly increase parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action on a specific resource: 'Change the role on a pending team invitation.' It also distinguishes this from related sibling tools like deleteTeamInvite, createTeamInvite, and updateTeamMemberRole by focusing on pending invitations and role changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when the tool applies ('Only pending invitations can be updated') and explicitly excludes accepted or declined invitations. It also provides an authorization requirement ('Requires the Manager role or above'), but does not name sibling tools as alternatives, such as using updateTeamMemberRole after an invitation is accepted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateTeamMemberRoleUpdate Team Member RoleAInspect

Update an existing team member's role. Requires the Manager role or above; only an Owner may grant or remove the Owner role, and the last remaining Owner cannot be demoted. A member whose Owner role is inherited from the organization cannot be changed here.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
team_idNoDuvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here.
memberIdYesMember (user) ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses meaningful constraints: permission level required, Owner-role grant/removal restrictions, the last-Owner cannot be demoted rule, and the inherited-owner exclusion. This gives the agent important behavioral context not visible in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences front-load the action and then pack in the essential authorization and edge-case rules without repetition or filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a permission-sensitive mutation, the description covers who may call it, owner-specific rules, and an inheritance edge case. It is slightly incomplete because the valid role values for the role argument are not enumerated, and no output/return expectations are stated, though the tool is otherwise well specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents memberId and team_id, but the required role parameter has no description or enum. The description adds hierarchy constraints ('Manager role or above', 'Owner role'), which is useful, but it never lists the exact accepted role values, leaving the most important parameter under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence, 'Update an existing team member's role,' names a specific action and resource, and 'existing' distinguishes it from invitation or creation tools. Among siblings like updateTeamInvite, removeTeamMember, and listTeamMembers, this clearly targets role mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operating conditions: 'Requires the Manager role or above' and 'only an Owner may grant or remove the Owner role,' which tells the agent when the call is permitted. It does not explicitly name alternative tools or 'when not to use' beyond the inherited-owner case, 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.

upgradeClarityProcessUpgrade Clarity ProcessAInspect

Move a v1 clarity process into v2. Rows with generated analysis are reset in place and regenerated; rows without analysis migrate in place when not generating.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations by explaining that generated-analysis rows are reset in place and regenerated, while rows without analysis migrate in place. This gives the agent awareness of side effects that readOnlyHint and destructiveHint 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences and front-loads the core operation ('Move a v1 clarity process into v2') before giving behavioral caveats. Every sentence contributes useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation tool, this is reasonably complete, but some ambiguity remains: it does not clarify what 'when not generating' means, what the return value is, or what prerequisites must hold. Since there is no output schema, a bit more context would help the agent fully anticipate the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly explain that the required 'id' parameter is the identifier of the v1 clarity process to upgrade. The meaning is inferable from the operation and parameter name, but the description does not directly compensate for the missing schema-level documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Move a v1 clarity process into v2,' which clearly identifies the operation as a version migration rather than a generic update or create. This distinguishes it from siblings like updateClarityProcess and duplicateClarityProcess, which do not mention v1-to-v2 migration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for upgrading v1 processes to v2, giving the reader a clear context for use. However, it never explicitly states when not to use it or names alternatives, leaving the selection guidance mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uploadSandboxFileUpload Sandbox FileAInspect

Upload a file directly to the sandbox. Maximum file size is 10MB. For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls.

ParametersJSON Schema
NameRequiredDescriptionDefault
sandbox_idYesThe sandbox's unique identifier

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals a key behavioral constraint—the 10MB file size limit—and directs users to the appropriate fallback when that limit is exceeded. While it lacks details on success responses, failure modes (e.g., duplicate names), or overwrite behavior, the annotations (readOnlyHint: false, destructiveHint: false) already cover the read/write and destructive nature. The description adds meaningful behavioral context beyond the annotations, meriting a high score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise—two sentences—with the action stated first and the size constraint and fallback immediately following. Every word contributes value; there is no padding or redundancy. The front-loaded structure makes the critical information immediately accessible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one declared parameter, no output schema, no nested objects), the description is highly complete. It covers the primary action, the size threshold, and the alternative flow. The only missing element is the mechanism for providing the file content itself, but since the API endpoint is implied and the agent has sibling tools like createSandboxUploadUrl for context, the description adequately serves its purpose for most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the sandbox_id parameter with a clear description, achieving 100% coverage of declared inputs. The description adds the file size context (10MB) but fails to address a critical undisclosed parameter: how the actual file content is transmitted (e.g., request body, multipart form-data). Since the schema only lists sandbox_id, an agent would be left guessing how to attach the file, preventing the description from fully compensating for this gap. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the exact action ('Upload a file directly to the sandbox'), identifying the specific verb (Upload), resource (file), and target (sandbox). It also distinguishes itself from sibling tools by explicitly defining a size limit (10MB) and referencing the alternate URL-based upload path, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (for files up to 10MB) and when not to use it ('For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls'), providing a direct alternative. This gives the agent clear conditional logic for tool selection without needing to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsertAgentTriggerUpsert Agent TriggerA
Idempotent
Inspect

Create or update the authenticated user's trigger for an integration on an agent. The integration must already be connected to the agent (its OAuth connection set up in the Duvo dashboard). Set enabled: false to pause a trigger without deleting it. An agent holds one trigger per integration for a user, so a save with a different trigger_type replaces the existing one — except when that trigger is an @mention trigger, which is managed from the agent's mention setting and answers 409 (mention_trigger_protected) here. @mention triggers are best managed from that setting throughout: this route leaves an existing one's filter_config untouched, and refuses to create a teams_mention trigger without a filter_config.tenantId (400, mention_trigger_workspace_required) — a Slack mention trigger has no equivalent field to supply.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesThe agent's unique identifier
enabledNoWhether the trigger is active. Defaults to true.
trigger_typeYesTrigger type within the integration (e.g. `email_received`). Discover valid values via the trigger types endpoint. Integrations that enumerate their trigger types (Microsoft Teams, Google Drive, Google Sheets) reject anything else with 400 (`trigger_type_unsupported`), except a save that pauses a trigger already carrying that type.
filter_configNoIntegration-specific filter config (e.g. sender/subject filters). Shape comes from the integration's filter schema. Replaces the trigger's current config, so send the whole object — except on an @mention trigger, whose config is managed from the agent's mention setting and is left as it is.
integration_slugYesIntegration slug the trigger fires for (e.g. `gmail`, `outlook`, `linear-native`, `google-drive`).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, but the description adds substantial behavior the annotations cannot express: the one-trigger-per-integration replacement rule, the @mention exception where filter_config is left untouched, and the specific error codes/statuses (409, 400) an agent must handle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and prerequisites, and every sentence carries real information (error codes, exception rules). It is dense and uses long em-dash clauses with parenthetical error identifiers, which slightly taxes readability but does not waste space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the prerequisite (integration already connected), the pause-vs-delete semantics, the uniqueness/replacement model, and the failure modes. Nothing an agent needs in order to invoke 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.

Parameters4/5

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; however the description adds cross-parameter semantics the schema states only partially, e.g. that trigger_type replacement replaces the whole trigger and that teams_mention requires filter_config.tenantId. Much of the filter_config replacement wording does overlap with the schema, keeping this at 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource combination ('Create or update the authenticated user's trigger for an integration on an agent') and immediately scopes it with the idempotent upsert semantics. An agent can distinguish this from the sibling create/update/delete single-trigger routes because the description explains that one trigger exists per integration per user and that a different trigger_type replaces it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use and when-not-to-use guidance: use `enabled: false` to pause instead of deleting, and manage @mention triggers from the agent's mention setting 'throughout' rather than here. It also names the conditions that make this route fail (409 mention_trigger_protected, 400 mention_trigger_workspace_required), effectively routing the agent to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • ChangedcreateTeamInvite1 field changed
      • addedInput schema / properties / process_role_id
        Added value: +{
        +  "description": "Configured Process role to assign alongside the Clarity invitation. Requires processId; the role must belong to that Process.",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +  "type": "string"
        +}
  2. 1 tool update
    • AddedmoveAutomationsToFolder
  3. 1 tool update
    • ChangedstartClarityExport2 fields changed
      • addedInput schema / properties / processApproverRef
        Added value: +{
        +  "pattern": "^\\/glossary\\/[0-9a-zA-Z_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / processOwnerRef
        Added value: +{
        +  "pattern": "^\\/glossary\\/[0-9a-zA-Z_-]+$",
        +  "type": "string"
        +}
  4. 2 tool updates
    • ChangedcreateRevision2 fields changed
      • changedInput schema / properties / config / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Agent configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        -          },
        -          "input": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "items": {
        -                  "properties": {
        -                    "content": {
        -                      "anyOf": [
        -                        {
        -                          "type": "string"
        -                        },
        -                        {
        -                          "items": {
        -                            "anyOf": [
        -                              {
        -                                "properties": {
        -                                  "text": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_text",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "text"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "detail": {
        -                                    "anyOf": [
        -                                      {
        -                                        "enum": [
        -                                          "low",
        -                                          "high",
        -                                          "auto"
        -                                        ],
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "file_id": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "type": {
        -                                    "const": "input_image",
        -                                    "type": "string"
        -                                  },
        -                                  "url": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "file_id": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_file",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "file_id"
        -                                ],
        -                                "type": "object"
        -                              }
        -                            ]
        -                          },
        -                          "type": "array"
        -                        }
        -                      ]
        -                    },
        -                    "role": {
        -                      "enum": [
        -                        "system",
        -                        "user",
        -                        "assistant"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "anyOf": [
        -                        {
        -                          "const": "message",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    }
        -                  },
        -                  "required": [
        -                    "role",
        -                    "content"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              }
        -            ],
        -            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        -          },
        -          "models": {
        -            "description": "Model configuration for each capability the agent uses",
        -            "properties": {
        -              "agent": {
        -                "description": "Primary agent model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        -                    "enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ],
        -                    "type": "string",
        -                    "x-extensible-enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ]
        -                  }
        -                },
        -                "required": [
        -                  "model"
        -                ],
        -                "type": "object"
        -              },
        -              "browsing": {
        -                "description": "Browsing/computer-use model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier for the browsing provider",
        -                    "enum": [
        -                      "gemini-2.5-pro",
        -                      "gemini-2.5-flash",
        -                      "gemini-3-pro-preview",
        -                      "claude-haiku-4-5",
        -                      "claude-sonnet-4-5",
        -                      "claude-opus-4-1"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "provider": {
        -                    "description": "Provider backing the browsing/computer-use model",
        -                    "enum": [
        -                      "google",
        -                      "anthropic"
        -                    ],
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "provider",
        -                  "model"
        -                ],
        -                "type": "object"
        -              }
        -            },
        -            "required": [
        -              "agent",
        -              "browsing"
        -            ],
        -            "type": "object"
        -          },
        -          "options": {
        -            "additionalProperties": {},
        -            "description": "Optional runtime options controlling how the agent executes",
        -            "properties": {
        -              "benchmarkExpectedOutcomes": {
        -                "description": "Expected outcomes used when running benchmark scenarios",
        -                "items": {
        -                  "properties": {
        -                    "criteria": {
        -                      "description": "Pass/fail criteria used to evaluate the outcome",
        -                      "type": "string"
        -                    },
        -                    "description": {
        -                      "description": "Human-readable description of the expected outcome",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "description",
        -                    "criteria"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "browserProvider": {
        -                "description": "Browser infrastructure provider",
        -                "enum": [
        -                  "browserbase",
        -                  "browser-use"
        -                ],
        -                "type": "string"
        -              },
        -              "evaluationSchemaId": {
        -                "description": "ID of the evaluation schema to apply to runs of this agent",
        -                "type": "string"
        -              },
        -              "supervisedMode": {
        -                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        -                "type": "boolean"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "plugins": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        -          },
        -          "skills": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "IDs of skills (team or system) that should be available to the agent"
        -          },
        -          "subAgents": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "format": "uuid",
        -                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
        -          }
        -        },
        -        "required": [
        -          "models",
        -          "input"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v2",
        -        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Code step configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team file paths this step can read at run time"
        -          },
        -          "language": {
        -            "description": "Language the step's program is written in",
        -            "enum": [
        -              "python"
        -            ],
        -            "type": "string"
        -          },
        -          "source": {
        -            "description": "Where the step's program comes from",
        -            "oneOf": [
        -              {
        -                "properties": {
        -                  "code": {
        -                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "kind": {
        -                    "const": "inline",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "code"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "bundle": {
        -                    "description": "The program's files, as a content-addressed manifest",
        -                    "properties": {
        -                      "bucket": {
        -                        "description": "GCS bucket the bundle's blobs are stored in",
        -                        "minLength": 1,
        -                        "type": "string"
        -                      },
        -                      "files": {
        -                        "description": "The program's files, one manifest entry each",
        -                        "items": {
        -                          "properties": {
        -                            "path": {
        -                              "description": "Path the file is materialised at, relative to the work dir",
        -                              "minLength": 1,
        -                              "type": "string"
        -                            },
        -                            "sha256": {
        -                              "description": "Digest of the file's bytes, and the key its blob is stored at",
        -                              "maxLength": 64,
        -                              "minLength": 64,
        -                              "pattern": "^[0-9a-f]{64}$",
        -                              "type": "string"
        -                            },
        -                            "sizeBytes": {
        -                              "description": "UTF-8 byte length of the file's contents",
        -                              "maximum": 131072,
        -                              "minimum": 0,
        -                              "type": "integer"
        -                            }
        -                          },
        -                          "required": [
        -                            "path",
        -                            "sha256",
        -                            "sizeBytes"
        -                          ],
        -                          "type": "object"
        -                        },
        -                        "maxItems": 200,
        -                        "type": "array"
        -                      }
        -                    },
        -                    "required": [
        -                      "bucket",
        -                      "files"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "kind": {
        -                    "const": "files",
        -                    "type": "string"
        -                  },
        -                  "startCommand": {
        -                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        -                    "maxLength": 2000,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "startCommand"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "timeoutMs": {
        -            "default": 600000,
        -            "description": "Wall-clock budget for one execution of the step",
        -            "exclusiveMinimum": 0,
        -            "maximum": 3600000,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "language",
        -          "source"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v1",
        -        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Agent configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "items": {
        +                  "properties": {
        +                    "content": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "items": {
        +                            "anyOf": [
        +                              {
        +                                "properties": {
        +                                  "text": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_text",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "text"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "detail": {
        +                                    "anyOf": [
        +                                      {
        +                                        "enum": [
        +                                          "low",
        +                                          "high",
        +                                          "auto"
        +                                        ],
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "file_id": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "type": {
        +                                    "const": "input_image",
        +                                    "type": "string"
        +                                  },
        +                                  "url": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "file_id": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_file",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "file_id"
        +                                ],
        +                                "type": "object"
        +                              }
        +                            ]
        +                          },
        +                          "type": "array"
        +                        }
        +                      ]
        +                    },
        +                    "role": {
        +                      "enum": [
        +                        "system",
        +                        "user",
        +                        "assistant"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "anyOf": [
        +                        {
        +                          "const": "message",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    }
        +                  },
        +                  "required": [
        +                    "role",
        +                    "content"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            ],
        +            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        +          },
        +          "models": {
        +            "description": "Model configuration for each capability the agent uses",
        +            "properties": {
        +              "agent": {
        +                "description": "Primary agent model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        +                    "enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ],
        +                    "type": "string",
        +                    "x-extensible-enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ]
        +                  }
        +                },
        +                "required": [
        +                  "model"
        +                ],
        +                "type": "object"
        +              },
        +              "browsing": {
        +                "description": "Browsing/computer-use model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier for the browsing provider",
        +                    "enum": [
        +                      "gemini-2.5-pro",
        +                      "gemini-2.5-flash",
        +                      "gemini-3-pro-preview",
        +                      "claude-haiku-4-5",
        +                      "claude-sonnet-4-5",
        +                      "claude-opus-4-1"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "provider": {
        +                    "description": "Provider backing the browsing/computer-use model",
        +                    "enum": [
        +                      "google",
        +                      "anthropic"
        +                    ],
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "provider",
        +                  "model"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "agent",
        +              "browsing"
        +            ],
        +            "type": "object"
        +          },
        +          "options": {
        +            "additionalProperties": {},
        +            "description": "Optional runtime options controlling how the agent executes",
        +            "properties": {
        +              "benchmarkExpectedOutcomes": {
        +                "description": "Expected outcomes used when running benchmark scenarios",
        +                "items": {
        +                  "properties": {
        +                    "criteria": {
        +                      "description": "Pass/fail criteria used to evaluate the outcome",
        +                      "type": "string"
        +                    },
        +                    "description": {
        +                      "description": "Human-readable description of the expected outcome",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "description",
        +                    "criteria"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "browserProvider": {
        +                "description": "Browser infrastructure provider",
        +                "enum": [
        +                  "browserbase",
        +                  "browser-use"
        +                ],
        +                "type": "string"
        +              },
        +              "evaluationSchemaId": {
        +                "description": "ID of the evaluation schema to apply to runs of this agent",
        +                "type": "string"
        +              },
        +              "supervisedMode": {
        +                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "plugins": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        +          },
        +          "skills": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "IDs of skills (team or system) that should be available to the agent"
        +          },
        +          "subAgents": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "format": "uuid",
        +                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
        +          }
        +        },
        +        "required": [
        +          "models",
        +          "input"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v2",
        +        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Code step configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team file paths this step can read at run time"
        +          },
        +          "handoverRequired": {
        +            "default": false,
        +            "description": "When the step declares handover options, whether a run that exits cleanly without requesting one fails. Ignored when the step declares no options.",
        +            "type": "boolean"
        +          },
        +          "language": {
        +            "description": "Language the step's program is written in",
        +            "enum": [
        +              "python"
        +            ],
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "Where the step's program comes from",
        +            "oneOf": [
        +              {
        +                "properties": {
        +                  "code": {
        +                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "kind": {
        +                    "const": "inline",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "code"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "bundle": {
        +                    "description": "The program's files, as a content-addressed manifest",
        +                    "properties": {
        +                      "bucket": {
        +                        "description": "GCS bucket the bundle's blobs are stored in",
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      "files": {
        +                        "description": "The program's files, one manifest entry each",
        +                        "items": {
        +                          "properties": {
        +                            "path": {
        +                              "description": "Path the file is materialised at, relative to the work dir",
        +                              "minLength": 1,
        +                              "type": "string"
        +                            },
        +                            "sha256": {
        +                              "description": "Digest of the file's bytes, and the key its blob is stored at",
        +                              "maxLength": 64,
        +                              "minLength": 64,
        +                              "pattern": "^[0-9a-f]{64}$",
        +                              "type": "string"
        +                            },
        +                            "sizeBytes": {
        +                              "description": "UTF-8 byte length of the file's contents",
        +                              "maximum": 131072,
        +                              "minimum": 0,
        +                              "type": "integer"
        +                            }
        +                          },
        +                          "required": [
        +                            "path",
        +                            "sha256",
        +                            "sizeBytes"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        "maxItems": 200,
        +                        "type": "array"
        +                      }
        +                    },
        +                    "required": [
        +                      "bucket",
        +                      "files"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "kind": {
        +                    "const": "files",
        +                    "type": "string"
        +                  },
        +                  "startCommand": {
        +                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        +                    "maxLength": 2000,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "startCommand"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "timeoutMs": {
        +            "default": 600000,
        +            "description": "Wall-clock budget for one execution of the step",
        +            "exclusiveMinimum": 0,
        +            "maximum": 3600000,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "language",
        +          "source"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v1",
        +        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / handover_options
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "required": {
        +          "description": "When true, a run that exits cleanly without requesting a handover fails",
        +          "type": "boolean"
        +        },
        +        "target_agent_ids": {
        +          "description": "Steps in the same automation this code step's program may request",
        +          "items": {
        +            "format": "uuid",
        +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +            "type": "string"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "target_agent_ids",
        +        "required"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Code steps only. The targets the program may request, and whether it must. Null clears them; omit to inherit the source build's. Mutually exclusive with handover_to."
        +}
    • ChangedupdateRevision1 field changed
      • addedInput schema / properties / handoverOptions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "required": {
        +          "description": "When true, a run that exits cleanly without requesting a handover fails",
        +          "type": "boolean"
        +        },
        +        "targetAgentIds": {
        +          "description": "Steps in the same automation this code step's program may request",
        +          "items": {
        +            "format": "uuid",
        +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +            "type": "string"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "targetAgentIds",
        +        "required"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Code steps only. The targets the program may request, and whether it must. Null clears them; omit to leave unchanged. Mutually exclusive with handoverTo in one request."
        +}
  5. 1 tool update
    • ChangedupdateClarityTeamSettings1 field changed
      • changedInput schema / properties / language / enum
        Previous value: -[
        -  "cs",
        -  "de",
        -  "en",
        -  "en-GB",
        -  "es",
        -  "es-MX",
        -  "fr",
        -  "hu",
        -  "pl",
        -  "pt",
        -  "pt-BR",
        -  "sk",
        -  "uk"
        -]New value: +[
        +  "cs",
        +  "de",
        +  "en",
        +  "en-GB",
        +  "es",
        +  "es-MX",
        +  "fr",
        +  "hu",
        +  "pl",
        +  "pt",
        +  "pt-BR",
        +  "sk",
        +  "sl",
        +  "uk"
        +]
  6. 7 tool updates
    • AddedacceptRevisionGeneration
    • AddedcancelBuilderRun
    • AddeddeclineRevisionGeneration
    • ChangedgenerateClarityProcessSnapshot2 fields changed
      • changedInput schema / properties / transformation_aggressiveness / description
        Previous value: -"Automation proposals only: controls how much the generated proposal should change the current process structure."New value: +"Transformation proposals only: the transformation appetite. `aggressive`, `conservative`, and `none` redesign around Duvo automation with decreasing freedom to change the process; `optimize` standardizes and streamlines the process while every step stays performed by people."
      • changedInput schema / properties / transformation_aggressiveness / enum
        Previous value: -[
        -  "none",
        -  "conservative",
        -  "aggressive"
        -]New value: +[
        +  "none",
        +  "conservative",
        +  "aggressive",
        +  "optimize"
        +]
    • AddedgenerateRevision
    • AddedgetBuilderRun
    • AddedresumeBuilderRun
  7. 2 tool updates
    • ChangedgetClarityHierarchyPeople3 fields changed
      • addedInput schema / properties / ownerTeamId
        Added value: +{
        +  "description": "Only return rosters for processes owned by this team. 404s when the team has no readable Process Landscape",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +  "type": "string"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "description": "Only return rows whose person name or email contains this text, case-insensitively",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedInput schema / properties / userId
        Added value: +{
        +  "description": "Only return rows for this platform user, matched on the same resolved identity the roster reports (an email-only row resolves through its organization profile)",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +  "type": "string"
        +}
    • ChangedgetClarityProcessTree1 field changed
      • addedInput schema / properties / ownerTeamId
        Added value: +{
        +  "description": "Only return process nodes owned by this team, plus the folder nodes that carry them. 404s when the team has no readable Process Landscape",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +  "type": "string"
        +}
  8. 23 tool updates
    • AddedactivateAutomationRevision
    • AddedaddAutomationAgent
    • AddedaddAutomationQueue
    • ChangedbulkReprocessCases1 field changed
      • addedInput schema / properties / filters / properties / awaiting_my_approval
        Added value: +{
        +  "type": "boolean"
        +}
    • ChangedbulkUpdateCasePriority1 field changed
      • addedInput schema / properties / filters / properties / awaiting_my_approval
        Added value: +{
        +  "type": "boolean"
        +}
    • ChangedbulkUpdateCaseStatus1 field changed
      • addedInput schema / properties / filters / properties / awaiting_my_approval
        Added value: +{
        +  "type": "boolean"
        +}
    • AddedcreateAutomationRevision
    • AddeddeleteAutomationRevision
    • ChangedexportCases1 field changed
      • addedInput schema / properties / filters / properties / awaiting_my_approval
        Added value: +{
        +  "type": "boolean"
        +}
    • AddedlistAllAgentSchedules
    • ChangedlistCases1 field changed
      • addedInput schema / properties / awaiting_my_approval
        Added value: +{
        +  "description": "Return only cases holding an unanswered approval row assigned to you, on the case's own run. Resolved from the authenticated caller, so it names no user: an API key filters as the user who owns it, and a credential with no user behind it is rejected rather than served an empty list. Narrows within needs_input, so it returns nothing alongside a terminal status bucket.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
    • ChangedmarkNotificationBatchRead1 field changed
      • addedInput schema / properties / openedFrom
        Added value: +{
        +  "enum": [
        +    "in_app",
        +    "email",
        +    "slack",
        +    "teams"
        +  ],
        +  "type": "string"
        +}
    • ChangedmarkNotificationRead1 field changed
      • addedInput schema / properties / openedFrom
        Added value: +{
        +  "enum": [
        +    "in_app",
        +    "email",
        +    "slack",
        +    "teams"
        +  ],
        +  "type": "string"
        +}
    • AddedremoveAutomationAgent
    • AddedremoveAutomationQueue
    • AddedremoveAutomationRevisionAgent
    • AddedremoveAutomationRevisionQueue
    • ChangedsearchCases1 field changed
      • addedInput schema / properties / filters / properties / awaiting_my_approval
        Added value: +{
        +  "type": "boolean"
        +}
    • AddedsetAutomationRevisionAgent
    • AddedsetAutomationRevisionQueue
    • AddedupdateAutomationTabs
    • AddedupdateConfigField
    • ChangedupsertAgentTrigger1 field changed
      • changedInput schema / properties / trigger_type / description
        Previous value: -"Trigger type within the integration (e.g. `email_received`). Discover valid values via the trigger types endpoint."New value: +"Trigger type within the integration (e.g. `email_received`). Discover valid values via the trigger types endpoint. Integrations that enumerate their trigger types (Microsoft Teams, Google Drive, Google Sheets) reject anything else with 400 (`trigger_type_unsupported`), except a save that pauses a trigger already carrying that type."
  9. 1 tool update
    • ChangedupdateClarityTeamSettings1 field changed
      • changedInput schema / properties / language / enum
        Previous value: -[
        -  "cs",
        -  "de",
        -  "en",
        -  "es",
        -  "es-MX",
        -  "fr",
        -  "hu",
        -  "pl",
        -  "pt",
        -  "pt-BR",
        -  "sk",
        -  "uk"
        -]New value: +[
        +  "cs",
        +  "de",
        +  "en",
        +  "en-GB",
        +  "es",
        +  "es-MX",
        +  "fr",
        +  "hu",
        +  "pl",
        +  "pt",
        +  "pt-BR",
        +  "sk",
        +  "uk"
        +]
  10. 3 tool updates
    • AddedlistOrgRuns
    • ChangedlistRuns1 field changed
      • changedInput schema / properties / has_issues / description
        Previous value: -"If true, only return runs that have evaluation issues"New value: +"Filter on the run's latest successful evaluation: true returns only runs it flagged, false only runs it did not. Only the latest evaluation counts — an older flag does not match — and a run whose latest evaluation errored, or that has none, counts as unflagged. Omit to return both."
    • ChangedupdateCase2 fields changed
      • changedInput schema / properties / data / description
        Previous value: -"New free-form data payload handed to the agent when the case is claimed."New value: +"New free-form data payload handed to the agent when the case is claimed. Mutually exclusive with `json_data`."
      • addedInput schema / properties / json_data
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "New structured payload for a case on a queue that has a Case schema. Validated against that schema and mutually exclusive with `data`.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  11. 5 tool updates
    • ChangedcreateCases2 fields changed
      • addedInput schema / properties / case / properties / json_data
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Structured payload for a queue that has a Case schema. Validated against that schema and mutually exclusive with `data` — send this instead of free-text `data` on a schema-guarded queue. Within one request, either every case is structured or every case is free-text.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / cases / items / properties / json_data
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Structured payload for a queue that has a Case schema. Validated against that schema and mutually exclusive with `data` — send this instead of free-text `data` on a schema-guarded queue. Within one request, either every case is structured or every case is free-text.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • AddedlistConfigFields
    • AddedlistOrgAgents
    • ChangedsaveClarityProcessSnapshot2 fields changed
      • addedInput schema / properties / steps / items / anyOf
        Added value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Always null on events; included for shape compatibility across variants."
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional prose describing what happens at this event. May be null for structural markers."
        +          },
        +          "exceptions": {
        +            "description": "Distinct failure modes for this step in display order. Use an empty array when none are documented. Preserve each id when the same exception is edited or regenerated.",
        +            "items": {
        +              "properties": {
        +                "exception": {
        +                  "description": "A distinct failure mode that can happen at this step.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "frequency": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "rare",
        +                        "occasional",
        +                        "frequent"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Observed frequency. Null unless evidence explicitly supports rare, occasional, or frequent."
        +                },
        +                "handling": {
        +                  "anyOf": [
        +                    {
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "How the team responds to this exception. Null when the response was not documented."
        +                },
        +                "id": {
        +                  "description": "Stable identifier for this exception. Preserve it when the same exception is edited or regenerated. Example: \"exception-po-mismatch\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "exception",
        +                "handling",
        +                "frequency"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN event subtype. \"start\" (entry trigger), \"end\" (terminal state), \"timer\" (time-based wait), \"message\" (external communication), \"escalation\" (route to higher authority).",
        +            "enum": [
        +              "start",
        +              "end",
        +              "timer",
        +              "message",
        +              "escalation"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "event",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional reason for the event's existence. May be null for structural markers."
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting this event. Empty array allowed (structural markers carry no evidence); non-empty values must follow the source schema.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exceptions",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional precondition that gates this task. Null when the task is unconditional. Example: \"Only when invoice total exceeds $10,000\""
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "description": "Full prose paragraph describing what happens in this step in natural language. Used for documentation reconstruction. Example: \"Finance reviews the invoice in NetSuite, checking line item accuracy and matching against the purchase order before flagging for approval.\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "exceptions": {
        +            "description": "Distinct failure modes for this step in display order. Use an empty array when none are documented. Preserve each id when the same exception is edited or regenerated.",
        +            "items": {
        +              "properties": {
        +                "exception": {
        +                  "description": "A distinct failure mode that can happen at this step.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "frequency": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "rare",
        +                        "occasional",
        +                        "frequent"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Observed frequency. Null unless evidence explicitly supports rare, occasional, or frequent."
        +                },
        +                "handling": {
        +                  "anyOf": [
        +                    {
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "How the team responds to this exception. Null when the response was not documented."
        +                },
        +                "id": {
        +                  "description": "Stable identifier for this exception. Preserve it when the same exception is edited or regenerated. Example: \"exception-po-mismatch\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "exception",
        +                "handling",
        +                "frequency"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN task subtype. \"user\" (human work), \"service\" (automated/API call), \"send\"/\"receive\" (messaging), \"manual\" (offline physical work), \"businessRule\" (rule engine), \"script\" (code execution).",
        +            "enum": [
        +              "user",
        +              "service",
        +              "send",
        +              "receive",
        +              "manual",
        +              "businessRule",
        +              "script"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "task",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "description": "Why this step exists in the process — its purpose or business reason. Used by downstream agents to assess whether the step is essential or removable. Example: \"Catches mispriced line items before they reach the customer and prevents downstream credit notes.\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting this step's existence and details. At least one source is required — every step must trace back to something in the captures.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exceptions",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "description": "Decision criteria evaluated at this gateway. BPMN requires this on every branching gateway. Existing rows persisted with null/empty values parse as \"unknown\" via a read-side preprocess; producers should write a real condition string going forward.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "description": "Full prose describing the decision logic at this gateway.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "exceptions": {
        +            "description": "Distinct failure modes for this step in display order. Use an empty array when none are documented. Preserve each id when the same exception is edited or regenerated.",
        +            "items": {
        +              "properties": {
        +                "exception": {
        +                  "description": "A distinct failure mode that can happen at this step.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "frequency": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "rare",
        +                        "occasional",
        +                        "frequent"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Observed frequency. Null unless evidence explicitly supports rare, occasional, or frequent."
        +                },
        +                "handling": {
        +                  "anyOf": [
        +                    {
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "How the team responds to this exception. Null when the response was not documented."
        +                },
        +                "id": {
        +                  "description": "Stable identifier for this exception. Preserve it when the same exception is edited or regenerated. Example: \"exception-po-mismatch\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "exception",
        +                "handling",
        +                "frequency"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN gateway subtype. \"exclusive\" (XOR — exactly one branch taken), \"parallel\" (AND — all branches taken), \"inclusive\" (OR — one or more branches taken).",
        +            "enum": [
        +              "exclusive",
        +              "parallel",
        +              "inclusive"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "gateway",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "description": "Why this branching decision exists in the process.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting the decision criteria.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exceptions",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "oneOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Always null on events; included for shape compatibility across variants."
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional prose describing what happens at this event. May be null for structural markers."
        +          },
        +          "exception": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "handling": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN event subtype. \"start\" (entry trigger), \"end\" (terminal state), \"timer\" (time-based wait), \"message\" (external communication), \"escalation\" (route to higher authority).",
        +            "enum": [
        +              "start",
        +              "end",
        +              "timer",
        +              "message",
        +              "escalation"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "event",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional reason for the event's existence. May be null for structural markers."
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting this event. Empty array allowed (structural markers carry no evidence); non-empty values must follow the source schema.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exception",
        +          "handling",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional precondition that gates this task. Null when the task is unconditional. Example: \"Only when invoice total exceeds $10,000\""
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "description": "Full prose paragraph describing what happens in this step in natural language. Used for documentation reconstruction. Example: \"Finance reviews the invoice in NetSuite, checking line item accuracy and matching against the purchase order before flagging for approval.\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "exception": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "handling": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN task subtype. \"user\" (human work), \"service\" (automated/API call), \"send\"/\"receive\" (messaging), \"manual\" (offline physical work), \"businessRule\" (rule engine), \"script\" (code execution).",
        +            "enum": [
        +              "user",
        +              "service",
        +              "send",
        +              "receive",
        +              "manual",
        +              "businessRule",
        +              "script"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "task",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "description": "Why this step exists in the process — its purpose or business reason. Used by downstream agents to assess whether the step is essential or removable. Example: \"Catches mispriced line items before they reach the customer and prevents downstream credit notes.\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting this step's existence and details. At least one source is required — every step must trace back to something in the captures.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exception",
        +          "handling",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        +          },
        +          "assumptions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        +          },
        +          "condition": {
        +            "description": "Decision criteria evaluated at this gateway. BPMN requires this on every branching gateway. Existing rows persisted with null/empty values parse as \"unknown\" via a read-side preprocess; producers should write a real condition string going forward.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "confidence": {
        +            "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "description": {
        +            "description": "Full prose describing the decision logic at this gateway.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "exception": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        +          },
        +          "extraCaptureNeeded": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "gap": {
        +                    "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        +                    "format": "uuid",
        +                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                    "type": "string"
        +                  },
        +                  "proposal": {
        +                    "anyOf": [
        +                      {
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "gap"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "handling": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        +          },
        +          "id": {
        +            "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        +          },
        +          "linkedAgentId": {
        +            "anyOf": [
        +              {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        +          },
        +          "nodeSubtype": {
        +            "description": "BPMN gateway subtype. \"exclusive\" (XOR — exactly one branch taken), \"parallel\" (AND — all branches taken), \"inclusive\" (OR — one or more branches taken).",
        +            "enum": [
        +              "exclusive",
        +              "parallel",
        +              "inclusive"
        +            ],
        +            "type": "string"
        +          },
        +          "nodeType": {
        +            "const": "gateway",
        +            "type": "string"
        +          },
        +          "openQuestions": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        +          },
        +          "output": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        +          },
        +          "rationale": {
        +            "description": "Why this branching decision exists in the process.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "readiness": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "low",
        +                  "medium",
        +                  "high"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        +          },
        +          "readinessRationale": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        +          },
        +          "role": {
        +            "anyOf": [
        +              {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        +          },
        +          "sources": {
        +            "description": "Evidence supporting the decision criteria.",
        +            "items": {
        +              "properties": {
        +                "attribution": {
        +                  "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "captureId": {
        +                  "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "evidenceId": {
        +                  "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "excerpt": {
        +                  "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "locator": {
        +                  "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        +                  "oneOf": [
        +                    {
        +                      "properties": {
        +                        "messageIndex": {
        +                          "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "timestampMs": {
        +                          "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "transcript_message",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "messageIndex"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "endLine": {
        +                          "description": "Optional one-based line number where the cited text ends on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "endOffset": {
        +                          "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "pageNumber": {
        +                          "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startLine": {
        +                          "description": "Optional one-based line number where the cited text starts on pageNumber.",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "startOffset": {
        +                          "description": "Zero-based character offset into the stored capture text.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "document_text_range",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "startOffset",
        +                        "endOffset"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "BPMN XML element id within an uploaded .bpmn document.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "elementType": {
        +                          "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "bpmn_element",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "elementId"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "timestampMs": {
        +                          "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "screenshare_frame",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type",
        +                        "timestampMs"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "type": {
        +                          "const": "manual",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "properties": {
        +                        "reason": {
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "unresolved",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "resolutionStatus": {
        +                  "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        +                  "enum": [
        +                    "resolved",
        +                    "unresolved",
        +                    "legacy",
        +                    "manual"
        +                  ],
        +                  "type": "string"
        +                },
        +                "sourceConfidence": {
        +                  "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        +                  "enum": [
        +                    "low",
        +                    "medium",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "attribution",
        +                "excerpt"
        +              ],
        +              "type": "object"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "system": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        +          },
        +          "targetSteps": {
        +            "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        +            "items": {
        +              "properties": {
        +                "isDefault": {
        +                  "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        +                },
        +                "stepId": {
        +                  "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "stepId",
        +                "label",
        +                "isDefault"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "title": {
        +            "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "targetSteps",
        +          "title",
        +          "action",
        +          "role",
        +          "system",
        +          "input",
        +          "output",
        +          "exception",
        +          "handling",
        +          "assumptions",
        +          "openQuestions",
        +          "confidence",
        +          "nodeType",
        +          "nodeSubtype",
        +          "description",
        +          "rationale",
        +          "sources",
        +          "condition"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  }
        +]
      • removedInput schema / properties / steps / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "action": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        -      },
        -      "assumptions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        -      },
        -      "condition": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Always null on events; included for shape compatibility across variants."
        -      },
        -      "confidence": {
        -        "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        -        "enum": [
        -          "low",
        -          "medium",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "description": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Optional prose describing what happens at this event. May be null for structural markers."
        -      },
        -      "exception": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        -      },
        -      "extraCaptureNeeded": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "gap": {
        -                "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "id": {
        -                "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        -                "format": "uuid",
        -                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -                "type": "string"
        -              },
        -              "proposal": {
        -                "anyOf": [
        -                  {
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "gap"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "handling": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        -      },
        -      "id": {
        -        "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "input": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        -      },
        -      "linkedAgentId": {
        -        "anyOf": [
        -          {
        -            "format": "uuid",
        -            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        -      },
        -      "nodeSubtype": {
        -        "description": "BPMN event subtype. \"start\" (entry trigger), \"end\" (terminal state), \"timer\" (time-based wait), \"message\" (external communication), \"escalation\" (route to higher authority).",
        -        "enum": [
        -          "start",
        -          "end",
        -          "timer",
        -          "message",
        -          "escalation"
        -        ],
        -        "type": "string"
        -      },
        -      "nodeType": {
        -        "const": "event",
        -        "type": "string"
        -      },
        -      "openQuestions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        -      },
        -      "output": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        -      },
        -      "rationale": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Optional reason for the event's existence. May be null for structural markers."
        -      },
        -      "readiness": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "low",
        -              "medium",
        -              "high"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        -      },
        -      "readinessRationale": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        -      },
        -      "sources": {
        -        "description": "Evidence supporting this event. Empty array allowed (structural markers carry no evidence); non-empty values must follow the source schema.",
        -        "items": {
        -          "properties": {
        -            "attribution": {
        -              "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "captureId": {
        -              "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "evidenceId": {
        -              "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "excerpt": {
        -              "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "locator": {
        -              "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        -              "oneOf": [
        -                {
        -                  "properties": {
        -                    "messageIndex": {
        -                      "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "timestampMs": {
        -                      "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "transcript_message",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "messageIndex"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "endLine": {
        -                      "description": "Optional one-based line number where the cited text ends on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "endOffset": {
        -                      "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "pageNumber": {
        -                      "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startLine": {
        -                      "description": "Optional one-based line number where the cited text starts on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startOffset": {
        -                      "description": "Zero-based character offset into the stored capture text.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "document_text_range",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "startOffset",
        -                    "endOffset"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "elementId": {
        -                      "description": "BPMN XML element id within an uploaded .bpmn document.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "elementType": {
        -                      "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "name": {
        -                      "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "bpmn_element",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "elementId"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "timestampMs": {
        -                      "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "screenshare_frame",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "timestampMs"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "type": {
        -                      "const": "manual",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "reason": {
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "unresolved",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "resolutionStatus": {
        -              "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        -              "enum": [
        -                "resolved",
        -                "unresolved",
        -                "legacy",
        -                "manual"
        -              ],
        -              "type": "string"
        -            },
        -            "sourceConfidence": {
        -              "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        -              "enum": [
        -                "low",
        -                "medium",
        -                "high"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "attribution",
        -            "excerpt"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "system": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        -      },
        -      "targetSteps": {
        -        "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        -        "items": {
        -          "properties": {
        -            "isDefault": {
        -              "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        -              "type": "boolean"
        -            },
        -            "label": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        -            },
        -            "stepId": {
        -              "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "stepId",
        -            "label",
        -            "isDefault"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "title": {
        -        "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "targetSteps",
        -      "title",
        -      "action",
        -      "role",
        -      "system",
        -      "input",
        -      "output",
        -      "exception",
        -      "handling",
        -      "assumptions",
        -      "openQuestions",
        -      "confidence",
        -      "nodeType",
        -      "nodeSubtype",
        -      "description",
        -      "rationale",
        -      "sources",
        -      "condition"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "action": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        -      },
        -      "assumptions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        -      },
        -      "condition": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Optional precondition that gates this task. Null when the task is unconditional. Example: \"Only when invoice total exceeds $10,000\""
        -      },
        -      "confidence": {
        -        "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        -        "enum": [
        -          "low",
        -          "medium",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "description": {
        -        "description": "Full prose paragraph describing what happens in this step in natural language. Used for documentation reconstruction. Example: \"Finance reviews the invoice in NetSuite, checking line item accuracy and matching against the purchase order before flagging for approval.\"",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "exception": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        -      },
        -      "extraCaptureNeeded": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "gap": {
        -                "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "id": {
        -                "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        -                "format": "uuid",
        -                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -                "type": "string"
        -              },
        -              "proposal": {
        -                "anyOf": [
        -                  {
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "gap"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "handling": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        -      },
        -      "id": {
        -        "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "input": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        -      },
        -      "linkedAgentId": {
        -        "anyOf": [
        -          {
        -            "format": "uuid",
        -            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        -      },
        -      "nodeSubtype": {
        -        "description": "BPMN task subtype. \"user\" (human work), \"service\" (automated/API call), \"send\"/\"receive\" (messaging), \"manual\" (offline physical work), \"businessRule\" (rule engine), \"script\" (code execution).",
        -        "enum": [
        -          "user",
        -          "service",
        -          "send",
        -          "receive",
        -          "manual",
        -          "businessRule",
        -          "script"
        -        ],
        -        "type": "string"
        -      },
        -      "nodeType": {
        -        "const": "task",
        -        "type": "string"
        -      },
        -      "openQuestions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        -      },
        -      "output": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        -      },
        -      "rationale": {
        -        "description": "Why this step exists in the process — its purpose or business reason. Used by downstream agents to assess whether the step is essential or removable. Example: \"Catches mispriced line items before they reach the customer and prevents downstream credit notes.\"",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "readiness": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "low",
        -              "medium",
        -              "high"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        -      },
        -      "readinessRationale": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        -      },
        -      "sources": {
        -        "description": "Evidence supporting this step's existence and details. At least one source is required — every step must trace back to something in the captures.",
        -        "items": {
        -          "properties": {
        -            "attribution": {
        -              "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "captureId": {
        -              "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "evidenceId": {
        -              "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "excerpt": {
        -              "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "locator": {
        -              "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        -              "oneOf": [
        -                {
        -                  "properties": {
        -                    "messageIndex": {
        -                      "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "timestampMs": {
        -                      "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "transcript_message",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "messageIndex"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "endLine": {
        -                      "description": "Optional one-based line number where the cited text ends on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "endOffset": {
        -                      "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "pageNumber": {
        -                      "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startLine": {
        -                      "description": "Optional one-based line number where the cited text starts on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startOffset": {
        -                      "description": "Zero-based character offset into the stored capture text.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "document_text_range",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "startOffset",
        -                    "endOffset"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "elementId": {
        -                      "description": "BPMN XML element id within an uploaded .bpmn document.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "elementType": {
        -                      "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "name": {
        -                      "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "bpmn_element",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "elementId"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "timestampMs": {
        -                      "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "screenshare_frame",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "timestampMs"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "type": {
        -                      "const": "manual",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "reason": {
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "unresolved",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "resolutionStatus": {
        -              "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        -              "enum": [
        -                "resolved",
        -                "unresolved",
        -                "legacy",
        -                "manual"
        -              ],
        -              "type": "string"
        -            },
        -            "sourceConfidence": {
        -              "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        -              "enum": [
        -                "low",
        -                "medium",
        -                "high"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "attribution",
        -            "excerpt"
        -          ],
        -          "type": "object"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "system": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        -      },
        -      "targetSteps": {
        -        "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        -        "items": {
        -          "properties": {
        -            "isDefault": {
        -              "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        -              "type": "boolean"
        -            },
        -            "label": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        -            },
        -            "stepId": {
        -              "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "stepId",
        -            "label",
        -            "isDefault"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "title": {
        -        "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "targetSteps",
        -      "title",
        -      "action",
        -      "role",
        -      "system",
        -      "input",
        -      "output",
        -      "exception",
        -      "handling",
        -      "assumptions",
        -      "openQuestions",
        -      "confidence",
        -      "nodeType",
        -      "nodeSubtype",
        -      "description",
        -      "rationale",
        -      "sources",
        -      "condition"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "action": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\""
        -      },
        -      "assumptions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]"
        -      },
        -      "condition": {
        -        "description": "Decision criteria evaluated at this gateway. BPMN requires this on every branching gateway. Existing rows persisted with null/empty values parse as \"unknown\" via a read-side preprocess; producers should write a real condition string going forward.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "confidence": {
        -        "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.",
        -        "enum": [
        -          "low",
        -          "medium",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "description": {
        -        "description": "Full prose describing the decision logic at this gateway.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "exception": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\""
        -      },
        -      "extraCaptureNeeded": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "gap": {
        -                "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"",
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "id": {
        -                "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.",
        -                "format": "uuid",
        -                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -                "type": "string"
        -              },
        -              "proposal": {
        -                "anyOf": [
        -                  {
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\""
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "gap"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "handling": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\""
        -      },
        -      "id": {
        -        "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "input": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\""
        -      },
        -      "linkedAgentId": {
        -        "anyOf": [
        -          {
        -            "format": "uuid",
        -            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team."
        -      },
        -      "nodeSubtype": {
        -        "description": "BPMN gateway subtype. \"exclusive\" (XOR — exactly one branch taken), \"parallel\" (AND — all branches taken), \"inclusive\" (OR — one or more branches taken).",
        -        "enum": [
        -          "exclusive",
        -          "parallel",
        -          "inclusive"
        -        ],
        -        "type": "string"
        -      },
        -      "nodeType": {
        -        "const": "gateway",
        -        "type": "string"
        -      },
        -      "openQuestions": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]"
        -      },
        -      "output": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\""
        -      },
        -      "rationale": {
        -        "description": "Why this branching decision exists in the process.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "readiness": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "low",
        -              "medium",
        -              "high"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data."
        -      },
        -      "readinessRationale": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\""
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\""
        -      },
        -      "sources": {
        -        "description": "Evidence supporting the decision criteria.",
        -        "items": {
        -          "properties": {
        -            "attribution": {
        -              "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "captureId": {
        -              "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "evidenceId": {
        -              "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "excerpt": {
        -              "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"",
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "locator": {
        -              "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.",
        -              "oneOf": [
        -                {
        -                  "properties": {
        -                    "messageIndex": {
        -                      "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "timestampMs": {
        -                      "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "transcript_message",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "messageIndex"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "endLine": {
        -                      "description": "Optional one-based line number where the cited text ends on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "endOffset": {
        -                      "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "pageNumber": {
        -                      "description": "Optional one-based PDF page number when the stored capture has page metadata.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startLine": {
        -                      "description": "Optional one-based line number where the cited text starts on pageNumber.",
        -                      "exclusiveMinimum": 0,
        -                      "maximum": 9007199254740991,
        -                      "type": "integer"
        -                    },
        -                    "startOffset": {
        -                      "description": "Zero-based character offset into the stored capture text.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "document_text_range",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "startOffset",
        -                    "endOffset"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "elementId": {
        -                      "description": "BPMN XML element id within an uploaded .bpmn document.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "elementType": {
        -                      "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "name": {
        -                      "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.",
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "bpmn_element",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "elementId"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "timestampMs": {
        -                      "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.",
        -                      "maximum": 9007199254740991,
        -                      "minimum": 0,
        -                      "type": "integer"
        -                    },
        -                    "type": {
        -                      "const": "screenshare_frame",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type",
        -                    "timestampMs"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "type": {
        -                      "const": "manual",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "properties": {
        -                    "reason": {
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "const": "unresolved",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "type"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "resolutionStatus": {
        -              "description": "Resolution status for the structured source link. Legacy sources may omit this field.",
        -              "enum": [
        -                "resolved",
        -                "unresolved",
        -                "legacy",
        -                "manual"
        -              ],
        -              "type": "string"
        -            },
        -            "sourceConfidence": {
        -              "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.",
        -              "enum": [
        -                "low",
        -                "medium",
        -                "high"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "attribution",
        -            "excerpt"
        -          ],
        -          "type": "object"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "system": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null"
        -      },
        -      "targetSteps": {
        -        "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.",
        -        "items": {
        -          "properties": {
        -            "isDefault": {
        -              "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.",
        -              "type": "boolean"
        -            },
        -            "label": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\""
        -            },
        -            "stepId": {
        -              "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"",
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "stepId",
        -            "label",
        -            "isDefault"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "title": {
        -        "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "targetSteps",
        -      "title",
        -      "action",
        -      "role",
        -      "system",
        -      "input",
        -      "output",
        -      "exception",
        -      "handling",
        -      "assumptions",
        -      "openQuestions",
        -      "confidence",
        -      "nodeType",
        -      "nodeSubtype",
        -      "description",
        -      "rationale",
        -      "sources",
        -      "condition"
        -    ],
        -    "type": "object"
        -  }
        -]
    • ChangedupsertAgentTrigger1 field changed
      • changedInput schema / properties / filter_config / description
        Previous value: -"Integration-specific filter config (e.g. sender/subject filters). Shape comes from the integration's filter schema."New value: +"Integration-specific filter config (e.g. sender/subject filters). Shape comes from the integration's filter schema. Replaces the trigger's current config, so send the whole object — except on an @mention trigger, whose config is managed from the agent's mention setting and is left as it is."
  12. 16 tool updates
    • ChangedbulkReprocessCases3 fields changed
      • addedInput schema / properties / filters / properties / created_at_to
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / json_data
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "operator": {
        +        "enum": [
        +          "equals",
        +          "notEquals",
        +          "in",
        +          "notIn",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "contains",
        +          "isSet",
        +          "isNotSet"
        +        ],
        +        "type": "string"
        +      },
        +      "path": {
        +        "pattern": "^\\$(\\.[A-Za-z_][A-Za-z0-9_]{0,63})+$",
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "boolean"
        +              }
        +            ]
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "boolean"
        +                }
        +              ]
        +            },
        +            "maxItems": 100,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "operator"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / updated_at_to
        Added value: +{
        +  "type": "string"
        +}
    • ChangedbulkUpdateCasePriority3 fields changed
      • addedInput schema / properties / filters / properties / created_at_to
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / json_data
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "operator": {
        +        "enum": [
        +          "equals",
        +          "notEquals",
        +          "in",
        +          "notIn",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "contains",
        +          "isSet",
        +          "isNotSet"
        +        ],
        +        "type": "string"
        +      },
        +      "path": {
        +        "pattern": "^\\$(\\.[A-Za-z_][A-Za-z0-9_]{0,63})+$",
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "boolean"
        +              }
        +            ]
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "boolean"
        +                }
        +              ]
        +            },
        +            "maxItems": 100,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "operator"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / updated_at_to
        Added value: +{
        +  "type": "string"
        +}
    • ChangedbulkUpdateCaseStatus3 fields changed
      • addedInput schema / properties / filters / properties / created_at_to
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / json_data
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "operator": {
        +        "enum": [
        +          "equals",
        +          "notEquals",
        +          "in",
        +          "notIn",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "contains",
        +          "isSet",
        +          "isNotSet"
        +        ],
        +        "type": "string"
        +      },
        +      "path": {
        +        "pattern": "^\\$(\\.[A-Za-z_][A-Za-z0-9_]{0,63})+$",
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "boolean"
        +              }
        +            ]
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "boolean"
        +                }
        +              ]
        +            },
        +            "maxItems": 100,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "operator"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / updated_at_to
        Added value: +{
        +  "type": "string"
        +}
    • AddedcreatePulseDashboardComment
    • AddedcreatePulseDashboardCommentReply
    • ChangedcreateRevision1 field changed
      • changedInput schema / properties / config / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Agent configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        -          },
        -          "input": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "items": {
        -                  "properties": {
        -                    "content": {
        -                      "anyOf": [
        -                        {
        -                          "type": "string"
        -                        },
        -                        {
        -                          "items": {
        -                            "anyOf": [
        -                              {
        -                                "properties": {
        -                                  "text": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_text",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "text"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "detail": {
        -                                    "anyOf": [
        -                                      {
        -                                        "enum": [
        -                                          "low",
        -                                          "high",
        -                                          "auto"
        -                                        ],
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "file_id": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "type": {
        -                                    "const": "input_image",
        -                                    "type": "string"
        -                                  },
        -                                  "url": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "file_id": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_file",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "file_id"
        -                                ],
        -                                "type": "object"
        -                              }
        -                            ]
        -                          },
        -                          "type": "array"
        -                        }
        -                      ]
        -                    },
        -                    "role": {
        -                      "enum": [
        -                        "system",
        -                        "user",
        -                        "assistant"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "anyOf": [
        -                        {
        -                          "const": "message",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    }
        -                  },
        -                  "required": [
        -                    "role",
        -                    "content"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              }
        -            ],
        -            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        -          },
        -          "models": {
        -            "description": "Model configuration for each capability the agent uses",
        -            "properties": {
        -              "agent": {
        -                "description": "Primary agent model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        -                    "enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ],
        -                    "type": "string",
        -                    "x-extensible-enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ]
        -                  }
        -                },
        -                "required": [
        -                  "model"
        -                ],
        -                "type": "object"
        -              },
        -              "browsing": {
        -                "description": "Browsing/computer-use model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier for the browsing provider",
        -                    "enum": [
        -                      "gemini-2.5-pro",
        -                      "gemini-2.5-flash",
        -                      "gemini-3-pro-preview",
        -                      "claude-haiku-4-5",
        -                      "claude-sonnet-4-5",
        -                      "claude-opus-4-1"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "provider": {
        -                    "description": "Provider backing the browsing/computer-use model",
        -                    "enum": [
        -                      "google",
        -                      "anthropic"
        -                    ],
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "provider",
        -                  "model"
        -                ],
        -                "type": "object"
        -              }
        -            },
        -            "required": [
        -              "agent",
        -              "browsing"
        -            ],
        -            "type": "object"
        -          },
        -          "options": {
        -            "additionalProperties": {},
        -            "description": "Optional runtime options controlling how the agent executes",
        -            "properties": {
        -              "benchmarkExpectedOutcomes": {
        -                "description": "Expected outcomes used when running benchmark scenarios",
        -                "items": {
        -                  "properties": {
        -                    "criteria": {
        -                      "description": "Pass/fail criteria used to evaluate the outcome",
        -                      "type": "string"
        -                    },
        -                    "description": {
        -                      "description": "Human-readable description of the expected outcome",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "description",
        -                    "criteria"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "browserProvider": {
        -                "description": "Browser infrastructure provider",
        -                "enum": [
        -                  "browserbase",
        -                  "browser-use"
        -                ],
        -                "type": "string"
        -              },
        -              "evaluationSchemaId": {
        -                "description": "ID of the evaluation schema to apply to runs of this agent",
        -                "type": "string"
        -              },
        -              "supervisedMode": {
        -                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        -                "type": "boolean"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "plugins": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        -          },
        -          "skills": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "IDs of skills (team or system) that should be available to the agent"
        -          },
        -          "subAgents": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "format": "uuid",
        -                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
        -          }
        -        },
        -        "required": [
        -          "models",
        -          "input"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v2",
        -        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Code step configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team file paths this step can read at run time"
        -          },
        -          "language": {
        -            "description": "Language the step's program is written in",
        -            "enum": [
        -              "python"
        -            ],
        -            "type": "string"
        -          },
        -          "source": {
        -            "description": "Where the step's program comes from",
        -            "oneOf": [
        -              {
        -                "properties": {
        -                  "code": {
        -                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "kind": {
        -                    "const": "inline",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "code"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "kind": {
        -                    "const": "files",
        -                    "type": "string"
        -                  },
        -                  "startCommand": {
        -                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        -                    "maxLength": 2000,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "startCommand"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "timeoutMs": {
        -            "default": 600000,
        -            "description": "Wall-clock budget for one execution of the step",
        -            "exclusiveMinimum": 0,
        -            "maximum": 3600000,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "language",
        -          "source"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v1",
        -        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Agent configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "items": {
        +                  "properties": {
        +                    "content": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "items": {
        +                            "anyOf": [
        +                              {
        +                                "properties": {
        +                                  "text": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_text",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "text"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "detail": {
        +                                    "anyOf": [
        +                                      {
        +                                        "enum": [
        +                                          "low",
        +                                          "high",
        +                                          "auto"
        +                                        ],
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "file_id": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "type": {
        +                                    "const": "input_image",
        +                                    "type": "string"
        +                                  },
        +                                  "url": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "file_id": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_file",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "file_id"
        +                                ],
        +                                "type": "object"
        +                              }
        +                            ]
        +                          },
        +                          "type": "array"
        +                        }
        +                      ]
        +                    },
        +                    "role": {
        +                      "enum": [
        +                        "system",
        +                        "user",
        +                        "assistant"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "anyOf": [
        +                        {
        +                          "const": "message",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    }
        +                  },
        +                  "required": [
        +                    "role",
        +                    "content"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            ],
        +            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        +          },
        +          "models": {
        +            "description": "Model configuration for each capability the agent uses",
        +            "properties": {
        +              "agent": {
        +                "description": "Primary agent model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        +                    "enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ],
        +                    "type": "string",
        +                    "x-extensible-enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ]
        +                  }
        +                },
        +                "required": [
        +                  "model"
        +                ],
        +                "type": "object"
        +              },
        +              "browsing": {
        +                "description": "Browsing/computer-use model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier for the browsing provider",
        +                    "enum": [
        +                      "gemini-2.5-pro",
        +                      "gemini-2.5-flash",
        +                      "gemini-3-pro-preview",
        +                      "claude-haiku-4-5",
        +                      "claude-sonnet-4-5",
        +                      "claude-opus-4-1"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "provider": {
        +                    "description": "Provider backing the browsing/computer-use model",
        +                    "enum": [
        +                      "google",
        +                      "anthropic"
        +                    ],
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "provider",
        +                  "model"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "agent",
        +              "browsing"
        +            ],
        +            "type": "object"
        +          },
        +          "options": {
        +            "additionalProperties": {},
        +            "description": "Optional runtime options controlling how the agent executes",
        +            "properties": {
        +              "benchmarkExpectedOutcomes": {
        +                "description": "Expected outcomes used when running benchmark scenarios",
        +                "items": {
        +                  "properties": {
        +                    "criteria": {
        +                      "description": "Pass/fail criteria used to evaluate the outcome",
        +                      "type": "string"
        +                    },
        +                    "description": {
        +                      "description": "Human-readable description of the expected outcome",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "description",
        +                    "criteria"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "browserProvider": {
        +                "description": "Browser infrastructure provider",
        +                "enum": [
        +                  "browserbase",
        +                  "browser-use"
        +                ],
        +                "type": "string"
        +              },
        +              "evaluationSchemaId": {
        +                "description": "ID of the evaluation schema to apply to runs of this agent",
        +                "type": "string"
        +              },
        +              "supervisedMode": {
        +                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "plugins": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        +          },
        +          "skills": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "IDs of skills (team or system) that should be available to the agent"
        +          },
        +          "subAgents": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "format": "uuid",
        +                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
        +          }
        +        },
        +        "required": [
        +          "models",
        +          "input"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v2",
        +        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Code step configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team file paths this step can read at run time"
        +          },
        +          "language": {
        +            "description": "Language the step's program is written in",
        +            "enum": [
        +              "python"
        +            ],
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "Where the step's program comes from",
        +            "oneOf": [
        +              {
        +                "properties": {
        +                  "code": {
        +                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "kind": {
        +                    "const": "inline",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "code"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "bundle": {
        +                    "description": "The program's files, as a content-addressed manifest",
        +                    "properties": {
        +                      "bucket": {
        +                        "description": "GCS bucket the bundle's blobs are stored in",
        +                        "minLength": 1,
        +                        "type": "string"
        +                      },
        +                      "files": {
        +                        "description": "The program's files, one manifest entry each",
        +                        "items": {
        +                          "properties": {
        +                            "path": {
        +                              "description": "Path the file is materialised at, relative to the work dir",
        +                              "minLength": 1,
        +                              "type": "string"
        +                            },
        +                            "sha256": {
        +                              "description": "Digest of the file's bytes, and the key its blob is stored at",
        +                              "maxLength": 64,
        +                              "minLength": 64,
        +                              "pattern": "^[0-9a-f]{64}$",
        +                              "type": "string"
        +                            },
        +                            "sizeBytes": {
        +                              "description": "UTF-8 byte length of the file's contents",
        +                              "maximum": 131072,
        +                              "minimum": 0,
        +                              "type": "integer"
        +                            }
        +                          },
        +                          "required": [
        +                            "path",
        +                            "sha256",
        +                            "sizeBytes"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        "maxItems": 200,
        +                        "type": "array"
        +                      }
        +                    },
        +                    "required": [
        +                      "bucket",
        +                      "files"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "kind": {
        +                    "const": "files",
        +                    "type": "string"
        +                  },
        +                  "startCommand": {
        +                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        +                    "maxLength": 2000,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "startCommand"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "timeoutMs": {
        +            "default": 600000,
        +            "description": "Wall-clock budget for one execution of the step",
        +            "exclusiveMinimum": 0,
        +            "maximum": 3600000,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "language",
        +          "source"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v1",
        +        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  }
        +]
    • AddeddeleteAgentTrigger
    • AddeddeletePulseDashboardComment
    • ChangedexportCases3 fields changed
      • addedInput schema / properties / filters / properties / created_at_to
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / json_data
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "operator": {
        +        "enum": [
        +          "equals",
        +          "notEquals",
        +          "in",
        +          "notIn",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "contains",
        +          "isSet",
        +          "isNotSet"
        +        ],
        +        "type": "string"
        +      },
        +      "path": {
        +        "pattern": "^\\$(\\.[A-Za-z_][A-Za-z0-9_]{0,63})+$",
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "boolean"
        +              }
        +            ]
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "boolean"
        +                }
        +              ]
        +            },
        +            "maxItems": 100,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "operator"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / updated_at_to
        Added value: +{
        +  "type": "string"
        +}
    • ChangedlistCases1 field changed
      • addedInput schema / properties / field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Filter on a field of a typed queue's json_data, as <path>:<operator>[:<value>] (e.g. $.invoice.amount:gte:5000). Repeat the param to require several; all must match, so two comparisons on one path express a range. Operators: equals, notEquals, in, notIn, gt, gte, lt, lte, contains, isSet, isNotSet. in/notIn take a comma-separated list; isSet/isNotSet take no value. A value is typed by shape (5000 is a number, true a boolean, 00123 a string so a leading zero survives). A path the queue's Case schema does not declare is rejected rather than ignored."
        +}
    • AddedlistClarityStepFrames
    • AddedlistPulseDashboardComments
    • ChangedprobeMcpServer1 field changed
      • changedInput schema / properties / integration_slug / enum
        Previous value: -[
        -  "googlecalendar",
        -  "google-calendar",
        -  "gmail",
        -  "slack",
        -  "googledocs",
        -  "googlesheets",
        -  "googledrive",
        -  "firecrawl",
        -  "exa",
        -  "exa-search",
        -  "exa-company-search",
        -  "exa-people-search",
        -  "deep-research",
        -  "system",
        -  "browser-agent",
        -  "browser-agent-devtools",
        -  "notion",
        -  "linear",
        -  "confluence",
        -  "custom_mcp",
        -  "user_mcp",
        -  "snowflake",
        -  "sharepoint",
        -  "teams",
        -  "onedrive",
        -  "bigquery",
        -  "databricks",
        -  "netsuite",
        -  "outlook",
        -  "microsoft-calendar",
        -  "excel",
        -  "word",
        -  "saps4hana",
        -  "md365",
        -  "businesscentral",
        -  "oraclefusion",
        -  "workday",
        -  "coupa",
        -  "signavio",
        -  "sap-ecc",
        -  "msteams",
        -  "human-in-the-loop",
        -  "email-attachments-reader",
        -  "document-processor",
        -  "google-docs",
        -  "google-sheets",
        -  "google-drive",
        -  "outbound-call",
        -  "case-queue-producer",
        -  "case-queue-consumer",
        -  "handover",
        -  "shopify",
        -  "hubspot",
        -  "zendesk",
        -  "intercom",
        -  "powerbi",
        -  "salesforce",
        -  "pipedrive",
        -  "tableau",
        -  "image-generation",
        -  "forecasting",
        -  "supabase",
        -  "attio",
        -  "amplitude",
        -  "websets",
        -  "firecrawl-platform",
        -  "duvo-computer-use",
        -  "duvo-computer-use-rdp",
        -  "eu-commodity-prices",
        -  "asana",
        -  "ssh",
        -  "scheduling",
        -  "github",
        -  "linear-native",
        -  "notion-native",
        -  "granola",
        -  "apify",
        -  "bamboohr",
        -  "edi",
        -  "maersk",
        -  "dhl",
        -  "fedex",
        -  "ups",
        -  "dsv",
        -  "trinity-logistics",
        -  "ontrac",
        -  "dachser",
        -  "hellmann",
        -  "omni-logistics",
        -  "ceva-logistics",
        -  "dpd",
        -  "canada-post"
        -]New value: +[
        +  "googlecalendar",
        +  "google-calendar",
        +  "gmail",
        +  "slack",
        +  "googledocs",
        +  "googlesheets",
        +  "googledrive",
        +  "firecrawl",
        +  "exa",
        +  "exa-search",
        +  "exa-company-search",
        +  "exa-people-search",
        +  "deep-research",
        +  "system",
        +  "browser-agent",
        +  "browser-agent-devtools",
        +  "notion",
        +  "linear",
        +  "confluence",
        +  "custom_mcp",
        +  "user_mcp",
        +  "snowflake",
        +  "sharepoint",
        +  "teams",
        +  "onedrive",
        +  "bigquery",
        +  "databricks",
        +  "netsuite",
        +  "outlook",
        +  "microsoft-calendar",
        +  "excel",
        +  "word",
        +  "saps4hana",
        +  "md365",
        +  "businesscentral",
        +  "oraclefusion",
        +  "workday",
        +  "coupa",
        +  "signavio",
        +  "sap-ecc",
        +  "msteams",
        +  "human-in-the-loop",
        +  "email-attachments-reader",
        +  "document-processor",
        +  "google-docs",
        +  "google-sheets",
        +  "google-drive",
        +  "outbound-call",
        +  "case-queue-producer",
        +  "case-queue-consumer",
        +  "handover",
        +  "shopify",
        +  "hubspot",
        +  "zendesk",
        +  "intercom",
        +  "powerbi",
        +  "salesforce",
        +  "pipedrive",
        +  "tableau",
        +  "image-generation",
        +  "forecasting",
        +  "supabase",
        +  "attio",
        +  "amplitude",
        +  "websets",
        +  "firecrawl-platform",
        +  "duvo-computer-use",
        +  "duvo-computer-use-rdp",
        +  "eu-commodity-prices",
        +  "asana",
        +  "ssh",
        +  "scheduling",
        +  "github",
        +  "linear-native",
        +  "notion-native",
        +  "granola",
        +  "apify",
        +  "bamboohr",
        +  "edi",
        +  "maersk",
        +  "infor-nexus",
        +  "dhl",
        +  "fedex",
        +  "ups",
        +  "dsv",
        +  "trinity-logistics",
        +  "ontrac",
        +  "dachser",
        +  "hellmann",
        +  "omni-logistics",
        +  "ceva-logistics",
        +  "dpd",
        +  "canada-post"
        +]
    • ChangedsearchCases3 fields changed
      • addedInput schema / properties / filters / properties / created_at_to
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / json_data
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "operator": {
        +        "enum": [
        +          "equals",
        +          "notEquals",
        +          "in",
        +          "notIn",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "contains",
        +          "isSet",
        +          "isNotSet"
        +        ],
        +        "type": "string"
        +      },
        +      "path": {
        +        "pattern": "^\\$(\\.[A-Za-z_][A-Za-z0-9_]{0,63})+$",
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "boolean"
        +              }
        +            ]
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "boolean"
        +                }
        +              ]
        +            },
        +            "maxItems": 100,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "operator"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / updated_at_to
        Added value: +{
        +  "type": "string"
        +}
    • ChangedsendPulseDashboardMessage1 field changed
      • addedInput schema / properties / selected_element / properties / point
        Added value: +{
        +  "properties": {
        +    "x_ratio": {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "y_ratio": {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "x_ratio",
        +    "y_ratio"
        +  ],
        +  "type": "object"
        +}
    • AddedsetPulseDashboardCommentResolution
  13. 2 tool updates
    • ChangedgetNotificationCounts1 field changed
      • addedInput schema / properties / important
        Added value: +{
        +  "description": "If true, only count notifications pinned to Important for you: unresolved, undismissed connection_broken rows you can reconnect yourself. Use it to size the sidebar alert without paging the list.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
    • ChangedlistPulseDashboards3 fields changed
      • addedInput schema / properties / after_id
        Added value: +{
        +  "description": "Keyset cursor for reading the whole 'automation' scope: the id of the last dashboard you received; returns the page after it in (created_at, id) order. Use this instead of 'offset' when reading every page, so a dashboard created, updated or deleted between requests cannot shift a page boundary you have already passed. 400 when the id no longer names a dashboard (restart from the first page). Only valid with scope=automation.",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Which dashboards to return: 'created' (yours, the default), 'team' (published to your whole team by a teammate), or 'shared' (shared with you individually by a teammate)."New value: +"Which dashboards to return: 'created' (yours, the default), 'team' (published to your whole team by a teammate), 'shared' (shared with you individually by a teammate), or 'automation' (owned by one of your team's automations, each carrying its automation's name)."
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "created",
        -  "shared",
        -  "team"
        -]New value: +[
        +  "created",
        +  "shared",
        +  "team",
        +  "automation"
        +]
  14. 10 tool updates
    • AddedcreateQueueAggregation
    • AddeddeleteQueueAggregation
    • AddedevaluateQueueAggregation
    • ChangedgetNotificationBatch1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "case_failed",
        -  "critical_case_issue",
        -  "case_issue",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue",
        +  "config_proposal"
        +]
    • ChangedgetNotificationFeed1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "case_failed",
        -  "critical_case_issue",
        -  "case_issue",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue",
        +  "config_proposal"
        +]
    • AddedgetQueueAggregationResult
    • ChangedlistNotifications2 fields changed
      • changedInput schema / properties / type / description
        Previous value: -"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue."New value: +"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue, config_proposal."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "case_failed",
        -  "critical_case_issue",
        -  "case_issue",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue",
        +  "config_proposal"
        +]
    • AddedlistQueueAggregations
    • ChangedmarkNotificationBatchRead2 fields changed
      • changedInput schema / properties / types / items / enum
        Previous value: -[
        -  "connection_broken",
        -  "case_failed",
        -  "critical_case_issue",
        -  "case_issue",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue",
        +  "config_proposal"
        +]
      • changedInput schema / properties / types / maxItems
        Previous value: -10New value: +11
    • AddedrefreshQueueAggregation
  15. 30 tool updates
    • ChangedassignClarityExtraCaptureRequest1 field changed
      • changedInput schema / properties / transformation_proposal_id / description
        Previous value: -"The transformation proposal id"New value: +"The automation proposal id"
    • AddedattachQueueJsonSchema
    • ChangedbuildClarityAutomation1 field changed
      • changedInput schema / properties / transformation_proposal_id / description
        Previous value: -"Transformation-proposal snapshot to build the automation from. Defaults to the process's live proposal."New value: +"Automation-proposal snapshot to build the automation from. Defaults to the process's live proposal."
    • ChangedcreateAgent1 field changed
      • changedInput schema / properties / build / properties / config / properties / data / properties / subAgents / description
        Previous value: -"IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool."New value: +"Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
    • AddedcreateAutomation
    • ChangedcreateClarityGuidance1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"Transformation guidance to add to the process."New value: +"Automation guidance to add to the process."
    • AddedcreateQueueJsonSchema
    • ChangedcreateRevision2 fields changed
      • changedInput schema / properties / config / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Agent configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        -          },
        -          "input": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "items": {
        -                  "properties": {
        -                    "content": {
        -                      "anyOf": [
        -                        {
        -                          "type": "string"
        -                        },
        -                        {
        -                          "items": {
        -                            "anyOf": [
        -                              {
        -                                "properties": {
        -                                  "text": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_text",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "text"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "detail": {
        -                                    "anyOf": [
        -                                      {
        -                                        "enum": [
        -                                          "low",
        -                                          "high",
        -                                          "auto"
        -                                        ],
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "file_id": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  },
        -                                  "type": {
        -                                    "const": "input_image",
        -                                    "type": "string"
        -                                  },
        -                                  "url": {
        -                                    "anyOf": [
        -                                      {
        -                                        "type": "string"
        -                                      },
        -                                      {
        -                                        "type": "null"
        -                                      }
        -                                    ]
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type"
        -                                ],
        -                                "type": "object"
        -                              },
        -                              {
        -                                "properties": {
        -                                  "file_id": {
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "input_file",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "file_id"
        -                                ],
        -                                "type": "object"
        -                              }
        -                            ]
        -                          },
        -                          "type": "array"
        -                        }
        -                      ]
        -                    },
        -                    "role": {
        -                      "enum": [
        -                        "system",
        -                        "user",
        -                        "assistant"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "type": {
        -                      "anyOf": [
        -                        {
        -                          "const": "message",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    }
        -                  },
        -                  "required": [
        -                    "role",
        -                    "content"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              }
        -            ],
        -            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        -          },
        -          "models": {
        -            "description": "Model configuration for each capability the agent uses",
        -            "properties": {
        -              "agent": {
        -                "description": "Primary agent model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        -                    "enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ],
        -                    "type": "string",
        -                    "x-extensible-enum": [
        -                      "claude-haiku-4-5-20251001",
        -                      "claude-sonnet-5",
        -                      "claude-sonnet-5[1m]",
        -                      "claude-opus-5",
        -                      "claude-opus-5[1m]",
        -                      "kimi-k3",
        -                      "kimi-k3-duvo",
        -                      "glm-5.2",
        -                      "glm-5.3-flash",
        -                      "deepseek-v4-flash",
        -                      "minimax-m3",
        -                      "qwen3.6-27b",
        -                      "d1-max",
        -                      "duvo-1-max",
        -                      "duvo-1-max-sonnet-1m",
        -                      "duvo-1-max-sonnet-4.5",
        -                      "duvo-1-max-sonnet-4.5-1m",
        -                      "duvo-1-max-opus",
        -                      "duvo-1-max-opus-4.5",
        -                      "gpt-4.1",
        -                      "gpt-4o",
        -                      "gpt-4o-mini",
        -                      "gpt-5",
        -                      "gpt-5.1",
        -                      "claude-sonnet-4-20250514",
        -                      "claude-sonnet-4-20250514[1m]",
        -                      "claude-sonnet-4-5-20250929",
        -                      "claude-sonnet-4-5-20250929[1m]",
        -                      "claude-sonnet-4-6",
        -                      "claude-sonnet-4-6[1m]",
        -                      "claude-opus-4-1-20250805",
        -                      "claude-opus-4-5-20251101",
        -                      "claude-opus-4-6",
        -                      "claude-opus-4-6[1m]",
        -                      "claude-opus-4-7",
        -                      "claude-opus-4-7[1m]",
        -                      "claude-opus-4-8",
        -                      "claude-opus-4-8[1m]"
        -                    ]
        -                  }
        -                },
        -                "required": [
        -                  "model"
        -                ],
        -                "type": "object"
        -              },
        -              "browsing": {
        -                "description": "Browsing/computer-use model configuration",
        -                "properties": {
        -                  "model": {
        -                    "description": "Model identifier for the browsing provider",
        -                    "enum": [
        -                      "gemini-2.5-pro",
        -                      "gemini-2.5-flash",
        -                      "gemini-3-pro-preview",
        -                      "claude-haiku-4-5",
        -                      "claude-sonnet-4-5",
        -                      "claude-opus-4-1"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "provider": {
        -                    "description": "Provider backing the browsing/computer-use model",
        -                    "enum": [
        -                      "google",
        -                      "anthropic"
        -                    ],
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "provider",
        -                  "model"
        -                ],
        -                "type": "object"
        -              }
        -            },
        -            "required": [
        -              "agent",
        -              "browsing"
        -            ],
        -            "type": "object"
        -          },
        -          "options": {
        -            "additionalProperties": {},
        -            "description": "Optional runtime options controlling how the agent executes",
        -            "properties": {
        -              "benchmarkExpectedOutcomes": {
        -                "description": "Expected outcomes used when running benchmark scenarios",
        -                "items": {
        -                  "properties": {
        -                    "criteria": {
        -                      "description": "Pass/fail criteria used to evaluate the outcome",
        -                      "type": "string"
        -                    },
        -                    "description": {
        -                      "description": "Human-readable description of the expected outcome",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "description",
        -                    "criteria"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "browserProvider": {
        -                "description": "Browser infrastructure provider",
        -                "enum": [
        -                  "browserbase",
        -                  "browser-use"
        -                ],
        -                "type": "string"
        -              },
        -              "evaluationSchemaId": {
        -                "description": "ID of the evaluation schema to apply to runs of this agent",
        -                "type": "string"
        -              },
        -              "supervisedMode": {
        -                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        -                "type": "boolean"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "plugins": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        -          },
        -          "skills": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "IDs of skills (team or system) that should be available to the agent"
        -          },
        -          "subAgents": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "format": "uuid",
        -                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool."
        -          }
        -        },
        -        "required": [
        -          "models",
        -          "input"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v2",
        -        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "data": {
        -        "description": "Code step configuration payload",
        -        "properties": {
        -          "files": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": [],
        -            "description": "Team file paths this step can read at run time"
        -          },
        -          "language": {
        -            "description": "Language the step's program is written in",
        -            "enum": [
        -              "python"
        -            ],
        -            "type": "string"
        -          },
        -          "source": {
        -            "description": "Where the step's program comes from",
        -            "oneOf": [
        -              {
        -                "properties": {
        -                  "code": {
        -                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "kind": {
        -                    "const": "inline",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "code"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "kind": {
        -                    "const": "files",
        -                    "type": "string"
        -                  },
        -                  "startCommand": {
        -                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        -                    "maxLength": 2000,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "startCommand"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "timeoutMs": {
        -            "default": 600000,
        -            "description": "Wall-clock budget for one execution of the step",
        -            "exclusiveMinimum": 0,
        -            "maximum": 3600000,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "language",
        -          "source"
        -        ],
        -        "type": "object"
        -      },
        -      "version": {
        -        "const": "v1",
        -        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "version",
        -      "data"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Agent configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "items": {
        +                  "properties": {
        +                    "content": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "items": {
        +                            "anyOf": [
        +                              {
        +                                "properties": {
        +                                  "text": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_text",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "text"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "detail": {
        +                                    "anyOf": [
        +                                      {
        +                                        "enum": [
        +                                          "low",
        +                                          "high",
        +                                          "auto"
        +                                        ],
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "file_id": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "type": {
        +                                    "const": "input_image",
        +                                    "type": "string"
        +                                  },
        +                                  "url": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "file_id": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_file",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "file_id"
        +                                ],
        +                                "type": "object"
        +                              }
        +                            ]
        +                          },
        +                          "type": "array"
        +                        }
        +                      ]
        +                    },
        +                    "role": {
        +                      "enum": [
        +                        "system",
        +                        "user",
        +                        "assistant"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "anyOf": [
        +                        {
        +                          "const": "message",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    }
        +                  },
        +                  "required": [
        +                    "role",
        +                    "content"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            ],
        +            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        +          },
        +          "models": {
        +            "description": "Model configuration for each capability the agent uses",
        +            "properties": {
        +              "agent": {
        +                "description": "Primary agent model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        +                    "enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ],
        +                    "type": "string",
        +                    "x-extensible-enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ]
        +                  }
        +                },
        +                "required": [
        +                  "model"
        +                ],
        +                "type": "object"
        +              },
        +              "browsing": {
        +                "description": "Browsing/computer-use model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier for the browsing provider",
        +                    "enum": [
        +                      "gemini-2.5-pro",
        +                      "gemini-2.5-flash",
        +                      "gemini-3-pro-preview",
        +                      "claude-haiku-4-5",
        +                      "claude-sonnet-4-5",
        +                      "claude-opus-4-1"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "provider": {
        +                    "description": "Provider backing the browsing/computer-use model",
        +                    "enum": [
        +                      "google",
        +                      "anthropic"
        +                    ],
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "provider",
        +                  "model"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "agent",
        +              "browsing"
        +            ],
        +            "type": "object"
        +          },
        +          "options": {
        +            "additionalProperties": {},
        +            "description": "Optional runtime options controlling how the agent executes",
        +            "properties": {
        +              "benchmarkExpectedOutcomes": {
        +                "description": "Expected outcomes used when running benchmark scenarios",
        +                "items": {
        +                  "properties": {
        +                    "criteria": {
        +                      "description": "Pass/fail criteria used to evaluate the outcome",
        +                      "type": "string"
        +                    },
        +                    "description": {
        +                      "description": "Human-readable description of the expected outcome",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "description",
        +                    "criteria"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "browserProvider": {
        +                "description": "Browser infrastructure provider",
        +                "enum": [
        +                  "browserbase",
        +                  "browser-use"
        +                ],
        +                "type": "string"
        +              },
        +              "evaluationSchemaId": {
        +                "description": "ID of the evaluation schema to apply to runs of this agent",
        +                "type": "string"
        +              },
        +              "supervisedMode": {
        +                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "plugins": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        +          },
        +          "skills": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "IDs of skills (team or system) that should be available to the agent"
        +          },
        +          "subAgents": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "format": "uuid",
        +                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
        +          }
        +        },
        +        "required": [
        +          "models",
        +          "input"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v2",
        +        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Code step configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team file paths this step can read at run time"
        +          },
        +          "language": {
        +            "description": "Language the step's program is written in",
        +            "enum": [
        +              "python"
        +            ],
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "Where the step's program comes from",
        +            "oneOf": [
        +              {
        +                "properties": {
        +                  "code": {
        +                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "kind": {
        +                    "const": "inline",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "code"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "kind": {
        +                    "const": "files",
        +                    "type": "string"
        +                  },
        +                  "startCommand": {
        +                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        +                    "maxLength": 2000,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "startCommand"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "timeoutMs": {
        +            "default": 600000,
        +            "description": "Wall-clock budget for one execution of the step",
        +            "exclusiveMinimum": 0,
        +            "maximum": 3600000,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "language",
        +          "source"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v1",
        +        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / handover_to
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "uuid",
        +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The single agent or code step to run after this one completes (\"Handover to\"). Mutually exclusive with handover_target_ids."
        +}
    • AddeddeleteAutomation
    • AddeddetachQueueJsonSchema
    • AddedexportCases
    • ChangedgenerateClarityProcessSnapshot4 fields changed
      • changedInput schema / properties / custom_guidance / description
        Previous value: -"Transformation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence."New value: +"Automation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence."
      • changedInput schema / properties / regenerate_from / description
        Previous value: -"Transformation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since."New value: +"Automation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since."
      • changedInput schema / properties / source_snapshot_id / description
        Previous value: -"Transformation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process."New value: +"Automation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process."
      • changedInput schema / properties / transformation_aggressiveness / description
        Previous value: -"Transformation proposals only: controls how much the generated proposal should change the current process structure."New value: +"Automation proposals only: controls how much the generated proposal should change the current process structure."
    • AddedgetAutomation
    • AddedgetAutomationCurrent
    • AddedgetAutomationCurrentFlow
    • AddedgetAutomationTabs
    • ChangedgetNotificationBatch1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue"
        +]
    • ChangedgetNotificationFeed1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue"
        +]
    • AddedgetQueueJsonSchema
    • RemovedinitiateClarityPhoneInterview
    • AddedlistAutomations
    • ChangedlistClarityExtraCaptureRequests1 field changed
      • changedInput schema / properties / transformation_proposal_id / description
        Previous value: -"The transformation proposal id"New value: +"The automation proposal id"
    • ChangedlistNotifications2 fields changed
      • changedInput schema / properties / type / description
        Previous value: -"Only return notifications of this type. One of: connection_broken, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue."New value: +"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "connection_broken",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue"
        +]
    • ChangedmarkNotificationBatchRead2 fields changed
      • changedInput schema / properties / types / items / enum
        Previous value: -[
        -  "connection_broken",
        -  "critical_eval_issue",
        -  "eval_issue",
        -  "job_issue",
        -  "job_done",
        -  "background_job",
        -  "schedule_issue"
        -]New value: +[
        +  "connection_broken",
        +  "case_failed",
        +  "critical_case_issue",
        +  "case_issue",
        +  "critical_eval_issue",
        +  "eval_issue",
        +  "job_issue",
        +  "job_done",
        +  "background_job",
        +  "schedule_issue"
        +]
      • changedInput schema / properties / types / maxItems
        Previous value: -7New value: +10
    • AddedreplaceQueueJsonSchema
    • AddedupdateAutomation
    • ChangedupdateClarityGuidance1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"Replacement transformation guidance for the process."New value: +"Replacement automation guidance for the process."
    • ChangedupdateClarityProcessSharing1 field changed
      • changedInput schema / properties / proposalShareEnabled / description
        Previous value: -"Whether the transformation proposal is included. Public sharing must already be enabled when only changing this setting."New value: +"Whether the automation proposal is included. Public sharing must already be enabled when only changing this setting."
    • AddedupdateQueueJsonSchemaSettings
    • ChangedupdateRevision1 field changed
      • addedInput schema / properties / handoverTo
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "uuid",
        +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The single agent or code step to run after this one completes (\"Handover to\"). Null clears it; omit to leave it unchanged. Mutually exclusive with @-mention handovers in the AOP."
        +}
  16. 1 tool update
    • ChangedcreateClarityDocumentUploadUrl1 field changed
      • changedInput schema / properties / contentType / enum
        Previous value: -[
        -  "application/pdf",
        -  "text/plain",
        -  "text/markdown",
        -  "application/xml"
        -]New value: +[
        +  "application/pdf",
        +  "text/plain",
        +  "text/markdown",
        +  "application/xml",
        +  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        +  "text/csv",
        +  "application/vnd.ms-excel"
        +]
  17. 2 tool updates
    • ChangedcreateAgent3 fields changed
      • changedInput schema / properties / build / description
        Previous value: -"Optional inline build. When present, a first build is created alongside the agent."New value: +"Optional inline build. When present, a first build is created alongside the agent. Only valid for an agent step."
      • changedInput schema / properties / build / properties / config / description
        Previous value: -"Build configuration (latest schema version only; legacy v1 configs are not accepted)"New value: +"Build configuration (latest schema version only; legacy v1 configs are not accepted). Agent steps only — a code step's first build is created via `POST /v2/agents/{agent_id}/revisions`, which accepts a code-step config."
      • addedInput schema / properties / type
        Added value: +{
        +  "default": "agent",
        +  "description": "Flavour of the step to create. Fixed at creation — it selects the config family every build of this step must use, and the two cannot be mixed.",
        +  "enum": [
        +    "agent",
        +    "code"
        +  ],
        +  "type": "string"
        +}
    • ChangedcreateRevision5 fields changed
      • addedInput schema / properties / config / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Agent configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        +          },
        +          "input": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "items": {
        +                  "properties": {
        +                    "content": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "items": {
        +                            "anyOf": [
        +                              {
        +                                "properties": {
        +                                  "text": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_text",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "text"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "detail": {
        +                                    "anyOf": [
        +                                      {
        +                                        "enum": [
        +                                          "low",
        +                                          "high",
        +                                          "auto"
        +                                        ],
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "file_id": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  },
        +                                  "type": {
        +                                    "const": "input_image",
        +                                    "type": "string"
        +                                  },
        +                                  "url": {
        +                                    "anyOf": [
        +                                      {
        +                                        "type": "string"
        +                                      },
        +                                      {
        +                                        "type": "null"
        +                                      }
        +                                    ]
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "properties": {
        +                                  "file_id": {
        +                                    "type": "string"
        +                                  },
        +                                  "type": {
        +                                    "const": "input_file",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "type",
        +                                  "file_id"
        +                                ],
        +                                "type": "object"
        +                              }
        +                            ]
        +                          },
        +                          "type": "array"
        +                        }
        +                      ]
        +                    },
        +                    "role": {
        +                      "enum": [
        +                        "system",
        +                        "user",
        +                        "assistant"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "anyOf": [
        +                        {
        +                          "const": "message",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    }
        +                  },
        +                  "required": [
        +                    "role",
        +                    "content"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            ],
        +            "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        +          },
        +          "models": {
        +            "description": "Model configuration for each capability the agent uses",
        +            "properties": {
        +              "agent": {
        +                "description": "Primary agent model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        +                    "enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ],
        +                    "type": "string",
        +                    "x-extensible-enum": [
        +                      "claude-haiku-4-5-20251001",
        +                      "claude-sonnet-5",
        +                      "claude-sonnet-5[1m]",
        +                      "claude-opus-5",
        +                      "claude-opus-5[1m]",
        +                      "kimi-k3",
        +                      "kimi-k3-duvo",
        +                      "glm-5.2",
        +                      "glm-5.3-flash",
        +                      "deepseek-v4-flash",
        +                      "minimax-m3",
        +                      "qwen3.6-27b",
        +                      "d1-max",
        +                      "duvo-1-max",
        +                      "duvo-1-max-sonnet-1m",
        +                      "duvo-1-max-sonnet-4.5",
        +                      "duvo-1-max-sonnet-4.5-1m",
        +                      "duvo-1-max-opus",
        +                      "duvo-1-max-opus-4.5",
        +                      "gpt-4.1",
        +                      "gpt-4o",
        +                      "gpt-4o-mini",
        +                      "gpt-5",
        +                      "gpt-5.1",
        +                      "claude-sonnet-4-20250514",
        +                      "claude-sonnet-4-20250514[1m]",
        +                      "claude-sonnet-4-5-20250929",
        +                      "claude-sonnet-4-5-20250929[1m]",
        +                      "claude-sonnet-4-6",
        +                      "claude-sonnet-4-6[1m]",
        +                      "claude-opus-4-1-20250805",
        +                      "claude-opus-4-5-20251101",
        +                      "claude-opus-4-6",
        +                      "claude-opus-4-6[1m]",
        +                      "claude-opus-4-7",
        +                      "claude-opus-4-7[1m]",
        +                      "claude-opus-4-8",
        +                      "claude-opus-4-8[1m]"
        +                    ]
        +                  }
        +                },
        +                "required": [
        +                  "model"
        +                ],
        +                "type": "object"
        +              },
        +              "browsing": {
        +                "description": "Browsing/computer-use model configuration",
        +                "properties": {
        +                  "model": {
        +                    "description": "Model identifier for the browsing provider",
        +                    "enum": [
        +                      "gemini-2.5-pro",
        +                      "gemini-2.5-flash",
        +                      "gemini-3-pro-preview",
        +                      "claude-haiku-4-5",
        +                      "claude-sonnet-4-5",
        +                      "claude-opus-4-1"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "provider": {
        +                    "description": "Provider backing the browsing/computer-use model",
        +                    "enum": [
        +                      "google",
        +                      "anthropic"
        +                    ],
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "provider",
        +                  "model"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "agent",
        +              "browsing"
        +            ],
        +            "type": "object"
        +          },
        +          "options": {
        +            "additionalProperties": {},
        +            "description": "Optional runtime options controlling how the agent executes",
        +            "properties": {
        +              "benchmarkExpectedOutcomes": {
        +                "description": "Expected outcomes used when running benchmark scenarios",
        +                "items": {
        +                  "properties": {
        +                    "criteria": {
        +                      "description": "Pass/fail criteria used to evaluate the outcome",
        +                      "type": "string"
        +                    },
        +                    "description": {
        +                      "description": "Human-readable description of the expected outcome",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "description",
        +                    "criteria"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "browserProvider": {
        +                "description": "Browser infrastructure provider",
        +                "enum": [
        +                  "browserbase",
        +                  "browser-use"
        +                ],
        +                "type": "string"
        +              },
        +              "evaluationSchemaId": {
        +                "description": "ID of the evaluation schema to apply to runs of this agent",
        +                "type": "string"
        +              },
        +              "supervisedMode": {
        +                "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "plugins": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        +          },
        +          "skills": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "IDs of skills (team or system) that should be available to the agent"
        +          },
        +          "subAgents": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "format": "uuid",
        +                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool."
        +          }
        +        },
        +        "required": [
        +          "models",
        +          "input"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v2",
        +        "description": "Schema version discriminator — must be \"v2\" for the current schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "Code step configuration payload",
        +        "properties": {
        +          "files": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": [],
        +            "description": "Team file paths this step can read at run time"
        +          },
        +          "language": {
        +            "description": "Language the step's program is written in",
        +            "enum": [
        +              "python"
        +            ],
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "Where the step's program comes from",
        +            "oneOf": [
        +              {
        +                "properties": {
        +                  "code": {
        +                    "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "kind": {
        +                    "const": "inline",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "code"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "kind": {
        +                    "const": "files",
        +                    "type": "string"
        +                  },
        +                  "startCommand": {
        +                    "description": "Command run from the root of the step's file system, e.g. \"python main.py\".",
        +                    "maxLength": 2000,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "startCommand"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "timeoutMs": {
        +            "default": 600000,
        +            "description": "Wall-clock budget for one execution of the step",
        +            "exclusiveMinimum": 0,
        +            "maximum": 3600000,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "language",
        +          "source"
        +        ],
        +        "type": "object"
        +      },
        +      "version": {
        +        "const": "v1",
        +        "description": "Schema version discriminator — must be \"v1\" for the current code-step schema",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "version",
        +      "data"
        +    ],
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / config / description
        Previous value: -"Build configuration (latest schema version only; legacy v1 configs are not accepted)"New value: +"Build configuration. An agent step takes the latest agent schema (legacy v1 agent configs are not accepted); a code step takes a code-step config. Omit it to get the step family's default first build."
      • removedInput schema / properties / config / properties
        Removed value: -{
        -  "data": {
        -    "description": "Agent configuration payload",
        -    "properties": {
        -      "files": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": [],
        -        "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
        -      },
        -      "input": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "items": {
        -              "properties": {
        -                "content": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "items": {
        -                        "anyOf": [
        -                          {
        -                            "properties": {
        -                              "text": {
        -                                "type": "string"
        -                              },
        -                              "type": {
        -                                "const": "input_text",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "type",
        -                              "text"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "properties": {
        -                              "detail": {
        -                                "anyOf": [
        -                                  {
        -                                    "enum": [
        -                                      "low",
        -                                      "high",
        -                                      "auto"
        -                                    ],
        -                                    "type": "string"
        -                                  },
        -                                  {
        -                                    "type": "null"
        -                                  }
        -                                ]
        -                              },
        -                              "file_id": {
        -                                "anyOf": [
        -                                  {
        -                                    "type": "string"
        -                                  },
        -                                  {
        -                                    "type": "null"
        -                                  }
        -                                ]
        -                              },
        -                              "type": {
        -                                "const": "input_image",
        -                                "type": "string"
        -                              },
        -                              "url": {
        -                                "anyOf": [
        -                                  {
        -                                    "type": "string"
        -                                  },
        -                                  {
        -                                    "type": "null"
        -                                  }
        -                                ]
        -                              }
        -                            },
        -                            "required": [
        -                              "type"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "properties": {
        -                              "file_id": {
        -                                "type": "string"
        -                              },
        -                              "type": {
        -                                "const": "input_file",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "type",
        -                              "file_id"
        -                            ],
        -                            "type": "object"
        -                          }
        -                        ]
        -                      },
        -                      "type": "array"
        -                    }
        -                  ]
        -                },
        -                "role": {
        -                  "enum": [
        -                    "system",
        -                    "user",
        -                    "assistant"
        -                  ],
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "anyOf": [
        -                    {
        -                      "const": "message",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "role",
        -                "content"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          }
        -        ],
        -        "description": "Initial agent instructions — either a single system prompt string or a list of structured messages"
        -      },
        -      "models": {
        -        "description": "Model configuration for each capability the agent uses",
        -        "properties": {
        -          "agent": {
        -            "description": "Primary agent model configuration",
        -            "properties": {
        -              "model": {
        -                "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)",
        -                "enum": [
        -                  "claude-haiku-4-5-20251001",
        -                  "claude-sonnet-5",
        -                  "claude-sonnet-5[1m]",
        -                  "claude-opus-5",
        -                  "claude-opus-5[1m]",
        -                  "kimi-k3",
        -                  "kimi-k3-duvo",
        -                  "glm-5.2",
        -                  "glm-5.3-flash",
        -                  "deepseek-v4-flash",
        -                  "minimax-m3",
        -                  "qwen3.6-27b",
        -                  "d1-max",
        -                  "duvo-1-max",
        -                  "duvo-1-max-sonnet-1m",
        -                  "duvo-1-max-sonnet-4.5",
        -                  "duvo-1-max-sonnet-4.5-1m",
        -                  "duvo-1-max-opus",
        -                  "duvo-1-max-opus-4.5",
        -                  "gpt-4.1",
        -                  "gpt-4o",
        -                  "gpt-4o-mini",
        -                  "gpt-5",
        -                  "gpt-5.1",
        -                  "claude-sonnet-4-20250514",
        -                  "claude-sonnet-4-20250514[1m]",
        -                  "claude-sonnet-4-5-20250929",
        -                  "claude-sonnet-4-5-20250929[1m]",
        -                  "claude-sonnet-4-6",
        -                  "claude-sonnet-4-6[1m]",
        -                  "claude-opus-4-1-20250805",
        -                  "claude-opus-4-5-20251101",
        -                  "claude-opus-4-6",
        -                  "claude-opus-4-6[1m]",
        -                  "claude-opus-4-7",
        -                  "claude-opus-4-7[1m]",
        -                  "claude-opus-4-8",
        -                  "claude-opus-4-8[1m]"
        -                ],
        -                "type": "string",
        -                "x-extensible-enum": [
        -                  "claude-haiku-4-5-20251001",
        -                  "claude-sonnet-5",
        -                  "claude-sonnet-5[1m]",
        -                  "claude-opus-5",
        -                  "claude-opus-5[1m]",
        -                  "kimi-k3",
        -                  "kimi-k3-duvo",
        -                  "glm-5.2",
        -                  "glm-5.3-flash",
        -                  "deepseek-v4-flash",
        -                  "minimax-m3",
        -                  "qwen3.6-27b",
        -                  "d1-max",
        -                  "duvo-1-max",
        -                  "duvo-1-max-sonnet-1m",
        -                  "duvo-1-max-sonnet-4.5",
        -                  "duvo-1-max-sonnet-4.5-1m",
        -                  "duvo-1-max-opus",
        -                  "duvo-1-max-opus-4.5",
        -                  "gpt-4.1",
        -                  "gpt-4o",
        -                  "gpt-4o-mini",
        -                  "gpt-5",
        -                  "gpt-5.1",
        -                  "claude-sonnet-4-20250514",
        -                  "claude-sonnet-4-20250514[1m]",
        -                  "claude-sonnet-4-5-20250929",
        -                  "claude-sonnet-4-5-20250929[1m]",
        -                  "claude-sonnet-4-6",
        -                  "claude-sonnet-4-6[1m]",
        -                  "claude-opus-4-1-20250805",
        -                  "claude-opus-4-5-20251101",
        -                  "claude-opus-4-6",
        -                  "claude-opus-4-6[1m]",
        -                  "claude-opus-4-7",
        -                  "claude-opus-4-7[1m]",
        -                  "claude-opus-4-8",
        -                  "claude-opus-4-8[1m]"
        -                ]
        -              }
        -            },
        -            "required": [
        -              "model"
        -            ],
        -            "type": "object"
        -          },
        -          "browsing": {
        -            "description": "Browsing/computer-use model configuration",
        -            "properties": {
        -              "model": {
        -                "description": "Model identifier for the browsing provider",
        -                "enum": [
        -                  "gemini-2.5-pro",
        -                  "gemini-2.5-flash",
        -                  "gemini-3-pro-preview",
        -                  "claude-haiku-4-5",
        -                  "claude-sonnet-4-5",
        -                  "claude-opus-4-1"
        -                ],
        -                "type": "string"
        -              },
        -              "provider": {
        -                "description": "Provider backing the browsing/computer-use model",
        -                "enum": [
        -                  "google",
        -                  "anthropic"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "provider",
        -              "model"
        -            ],
        -            "type": "object"
        -          }
        -        },
        -        "required": [
        -          "agent",
        -          "browsing"
        -        ],
        -        "type": "object"
        -      },
        -      "options": {
        -        "additionalProperties": {},
        -        "description": "Optional runtime options controlling how the agent executes",
        -        "properties": {
        -          "benchmarkExpectedOutcomes": {
        -            "description": "Expected outcomes used when running benchmark scenarios",
        -            "items": {
        -              "properties": {
        -                "criteria": {
        -                  "description": "Pass/fail criteria used to evaluate the outcome",
        -                  "type": "string"
        -                },
        -                "description": {
        -                  "description": "Human-readable description of the expected outcome",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "description",
        -                "criteria"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "browserProvider": {
        -            "description": "Browser infrastructure provider",
        -            "enum": [
        -              "browserbase",
        -              "browser-use"
        -            ],
        -            "type": "string"
        -          },
        -          "evaluationSchemaId": {
        -            "description": "ID of the evaluation schema to apply to runs of this agent",
        -            "type": "string"
        -          },
        -          "supervisedMode": {
        -            "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.",
        -            "type": "boolean"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "plugins": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": [],
        -        "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")"
        -      },
        -      "skills": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": [],
        -        "description": "IDs of skills (team or system) that should be available to the agent"
        -      },
        -      "subAgents": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "format": "uuid",
        -              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": [],
        -        "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool."
        -      }
        -    },
        -    "required": [
        -      "models",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  "version": {
        -    "const": "v2",
        -    "description": "Schema version discriminator — must be \"v2\" for the current schema",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / config / required
        Removed value: -[
        -  "version",
        -  "data"
        -]
      • removedInput schema / properties / config / type
        Removed value: -"object"
  18. 8 tool updates
    • ChangedcreateAgent2 fields changed
      • changedInput schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / enum
        Previous value: -[
        -  "claude-haiku-4-5-20251001",
        -  "claude-sonnet-5",
        -  "claude-sonnet-5[1m]",
        -  "claude-opus-5",
        -  "claude-opus-5[1m]",
        -  "kimi-k3",
        -  "kimi-k3-duvo",
        -  "glm-5.2",
        -  "deepseek-v4-flash",
        -  "minimax-m3",
        -  "qwen3.6-27b",
        -  "d1-max",
        -  "duvo-1-max",
        -  "duvo-1-max-sonnet-1m",
        -  "duvo-1-max-sonnet-4.5",
        -  "duvo-1-max-sonnet-4.5-1m",
        -  "duvo-1-max-opus",
        -  "duvo-1-max-opus-4.5",
        -  "gpt-4.1",
        -  "gpt-4o",
        -  "gpt-4o-mini",
        -  "gpt-5",
        -  "gpt-5.1",
        -  "claude-sonnet-4-20250514",
        -  "claude-sonnet-4-20250514[1m]",
        -  "claude-sonnet-4-5-20250929",
        -  "claude-sonnet-4-5-20250929[1m]",
        -  "claude-sonnet-4-6",
        -  "claude-sonnet-4-6[1m]",
        -  "claude-opus-4-1-20250805",
        -  "claude-opus-4-5-20251101",
        -  "claude-opus-4-6",
        -  "claude-opus-4-6[1m]",
        -  "claude-opus-4-7",
        -  "claude-opus-4-7[1m]",
        -  "claude-opus-4-8",
        -  "claude-opus-4-8[1m]"
        -]New value: +[
        +  "claude-haiku-4-5-20251001",
        +  "claude-sonnet-5",
        +  "claude-sonnet-5[1m]",
        +  "claude-opus-5",
        +  "claude-opus-5[1m]",
        +  "kimi-k3",
        +  "kimi-k3-duvo",
        +  "glm-5.2",
        +  "glm-5.3-flash",
        +  "deepseek-v4-flash",
        +  "minimax-m3",
        +  "qwen3.6-27b",
        +  "d1-max",
        +  "duvo-1-max",
        +  "duvo-1-max-sonnet-1m",
        +  "duvo-1-max-sonnet-4.5",
        +  "duvo-1-max-sonnet-4.5-1m",
        +  "duvo-1-max-opus",
        +  "duvo-1-max-opus-4.5",
        +  "gpt-4.1",
        +  "gpt-4o",
        +  "gpt-4o-mini",
        +  "gpt-5",
        +  "gpt-5.1",
        +  "claude-sonnet-4-20250514",
        +  "claude-sonnet-4-20250514[1m]",
        +  "claude-sonnet-4-5-20250929",
        +  "claude-sonnet-4-5-20250929[1m]",
        +  "claude-sonnet-4-6",
        +  "claude-sonnet-4-6[1m]",
        +  "claude-opus-4-1-20250805",
        +  "claude-opus-4-5-20251101",
        +  "claude-opus-4-6",
        +  "claude-opus-4-6[1m]",
        +  "claude-opus-4-7",
        +  "claude-opus-4-7[1m]",
        +  "claude-opus-4-8",
        +  "claude-opus-4-8[1m]"
        +]
      • changedInput schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enum
        Previous value: -[
        -  "claude-haiku-4-5-20251001",
        -  "claude-sonnet-5",
        -  "claude-sonnet-5[1m]",
        -  "claude-opus-5",
        -  "claude-opus-5[1m]",
        -  "kimi-k3",
        -  "kimi-k3-duvo",
        -  "glm-5.2",
        -  "deepseek-v4-flash",
        -  "minimax-m3",
        -  "qwen3.6-27b",
        -  "d1-max",
        -  "duvo-1-max",
        -  "duvo-1-max-sonnet-1m",
        -  "duvo-1-max-sonnet-4.5",
        -  "duvo-1-max-sonnet-4.5-1m",
        -  "duvo-1-max-opus",
        -  "duvo-1-max-opus-4.5",
        -  "gpt-4.1",
        -  "gpt-4o",
        -  "gpt-4o-mini",
        -  "gpt-5",
        -  "gpt-5.1",
        -  "claude-sonnet-4-20250514",
        -  "claude-sonnet-4-20250514[1m]",
        -  "claude-sonnet-4-5-20250929",
        -  "claude-sonnet-4-5-20250929[1m]",
        -  "claude-sonnet-4-6",
        -  "claude-sonnet-4-6[1m]",
        -  "claude-opus-4-1-20250805",
        -  "claude-opus-4-5-20251101",
        -  "claude-opus-4-6",
        -  "claude-opus-4-6[1m]",
        -  "claude-opus-4-7",
        -  "claude-opus-4-7[1m]",
        -  "claude-opus-4-8",
        -  "claude-opus-4-8[1m]"
        -]New value: +[
        +  "claude-haiku-4-5-20251001",
        +  "claude-sonnet-5",
        +  "claude-sonnet-5[1m]",
        +  "claude-opus-5",
        +  "claude-opus-5[1m]",
        +  "kimi-k3",
        +  "kimi-k3-duvo",
        +  "glm-5.2",
        +  "glm-5.3-flash",
        +  "deepseek-v4-flash",
        +  "minimax-m3",
        +  "qwen3.6-27b",
        +  "d1-max",
        +  "duvo-1-max",
        +  "duvo-1-max-sonnet-1m",
        +  "duvo-1-max-sonnet-4.5",
        +  "duvo-1-max-sonnet-4.5-1m",
        +  "duvo-1-max-opus",
        +  "duvo-1-max-opus-4.5",
        +  "gpt-4.1",
        +  "gpt-4o",
        +  "gpt-4o-mini",
        +  "gpt-5",
        +  "gpt-5.1",
        +  "claude-sonnet-4-20250514",
        +  "claude-sonnet-4-20250514[1m]",
        +  "claude-sonnet-4-5-20250929",
        +  "claude-sonnet-4-5-20250929[1m]",
        +  "claude-sonnet-4-6",
        +  "claude-sonnet-4-6[1m]",
        +  "claude-opus-4-1-20250805",
        +  "claude-opus-4-5-20251101",
        +  "claude-opus-4-6",
        +  "claude-opus-4-6[1m]",
        +  "claude-opus-4-7",
        +  "claude-opus-4-7[1m]",
        +  "claude-opus-4-8",
        +  "claude-opus-4-8[1m]"
        +]
    • AddedcreateCaseQueueEvalRubric
    • ChangedcreateRevision2 fields changed
      • changedInput schema / properties / config / properties / data / properties / models / properties / agent / properties / model / enum
        Previous value: -[
        -  "claude-haiku-4-5-20251001",
        -  "claude-sonnet-5",
        -  "claude-sonnet-5[1m]",
        -  "claude-opus-5",
        -  "claude-opus-5[1m]",
        -  "kimi-k3",
        -  "kimi-k3-duvo",
        -  "glm-5.2",
        -  "deepseek-v4-flash",
        -  "minimax-m3",
        -  "qwen3.6-27b",
        -  "d1-max",
        -  "duvo-1-max",
        -  "duvo-1-max-sonnet-1m",
        -  "duvo-1-max-sonnet-4.5",
        -  "duvo-1-max-sonnet-4.5-1m",
        -  "duvo-1-max-opus",
        -  "duvo-1-max-opus-4.5",
        -  "gpt-4.1",
        -  "gpt-4o",
        -  "gpt-4o-mini",
        -  "gpt-5",
        -  "gpt-5.1",
        -  "claude-sonnet-4-20250514",
        -  "claude-sonnet-4-20250514[1m]",
        -  "claude-sonnet-4-5-20250929",
        -  "claude-sonnet-4-5-20250929[1m]",
        -  "claude-sonnet-4-6",
        -  "claude-sonnet-4-6[1m]",
        -  "claude-opus-4-1-20250805",
        -  "claude-opus-4-5-20251101",
        -  "claude-opus-4-6",
        -  "claude-opus-4-6[1m]",
        -  "claude-opus-4-7",
        -  "claude-opus-4-7[1m]",
        -  "claude-opus-4-8",
        -  "claude-opus-4-8[1m]"
        -]New value: +[
        +  "claude-haiku-4-5-20251001",
        +  "claude-sonnet-5",
        +  "claude-sonnet-5[1m]",
        +  "claude-opus-5",
        +  "claude-opus-5[1m]",
        +  "kimi-k3",
        +  "kimi-k3-duvo",
        +  "glm-5.2",
        +  "glm-5.3-flash",
        +  "deepseek-v4-flash",
        +  "minimax-m3",
        +  "qwen3.6-27b",
        +  "d1-max",
        +  "duvo-1-max",
        +  "duvo-1-max-sonnet-1m",
        +  "duvo-1-max-sonnet-4.5",
        +  "duvo-1-max-sonnet-4.5-1m",
        +  "duvo-1-max-opus",
        +  "duvo-1-max-opus-4.5",
        +  "gpt-4.1",
        +  "gpt-4o",
        +  "gpt-4o-mini",
        +  "gpt-5",
        +  "gpt-5.1",
        +  "claude-sonnet-4-20250514",
        +  "claude-sonnet-4-20250514[1m]",
        +  "claude-sonnet-4-5-20250929",
        +  "claude-sonnet-4-5-20250929[1m]",
        +  "claude-sonnet-4-6",
        +  "claude-sonnet-4-6[1m]",
        +  "claude-opus-4-1-20250805",
        +  "claude-opus-4-5-20251101",
        +  "claude-opus-4-6",
        +  "claude-opus-4-6[1m]",
        +  "claude-opus-4-7",
        +  "claude-opus-4-7[1m]",
        +  "claude-opus-4-8",
        +  "claude-opus-4-8[1m]"
        +]
      • changedInput schema / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enum
        Previous value: -[
        -  "claude-haiku-4-5-20251001",
        -  "claude-sonnet-5",
        -  "claude-sonnet-5[1m]",
        -  "claude-opus-5",
        -  "claude-opus-5[1m]",
        -  "kimi-k3",
        -  "kimi-k3-duvo",
        -  "glm-5.2",
        -  "deepseek-v4-flash",
        -  "minimax-m3",
        -  "qwen3.6-27b",
        -  "d1-max",
        -  "duvo-1-max",
        -  "duvo-1-max-sonnet-1m",
        -  "duvo-1-max-sonnet-4.5",
        -  "duvo-1-max-sonnet-4.5-1m",
        -  "duvo-1-max-opus",
        -  "duvo-1-max-opus-4.5",
        -  "gpt-4.1",
        -  "gpt-4o",
        -  "gpt-4o-mini",
        -  "gpt-5",
        -  "gpt-5.1",
        -  "claude-sonnet-4-20250514",
        -  "claude-sonnet-4-20250514[1m]",
        -  "claude-sonnet-4-5-20250929",
        -  "claude-sonnet-4-5-20250929[1m]",
        -  "claude-sonnet-4-6",
        -  "claude-sonnet-4-6[1m]",
        -  "claude-opus-4-1-20250805",
        -  "claude-opus-4-5-20251101",
        -  "claude-opus-4-6",
        -  "claude-opus-4-6[1m]",
        -  "claude-opus-4-7",
        -  "claude-opus-4-7[1m]",
        -  "claude-opus-4-8",
        -  "claude-opus-4-8[1m]"
        -]New value: +[
        +  "claude-haiku-4-5-20251001",
        +  "claude-sonnet-5",
        +  "claude-sonnet-5[1m]",
        +  "claude-opus-5",
        +  "claude-opus-5[1m]",
        +  "kimi-k3",
        +  "kimi-k3-duvo",
        +  "glm-5.2",
        +  "glm-5.3-flash",
        +  "deepseek-v4-flash",
        +  "minimax-m3",
        +  "qwen3.6-27b",
        +  "d1-max",
        +  "duvo-1-max",
        +  "duvo-1-max-sonnet-1m",
        +  "duvo-1-max-sonnet-4.5",
        +  "duvo-1-max-sonnet-4.5-1m",
        +  "duvo-1-max-opus",
        +  "duvo-1-max-opus-4.5",
        +  "gpt-4.1",
        +  "gpt-4o",
        +  "gpt-4o-mini",
        +  "gpt-5",
        +  "gpt-5.1",
        +  "claude-sonnet-4-20250514",
        +  "claude-sonnet-4-20250514[1m]",
        +  "claude-sonnet-4-5-20250929",
        +  "claude-sonnet-4-5-20250929[1m]",
        +  "claude-sonnet-4-6",
        +  "claude-sonnet-4-6[1m]",
        +  "claude-opus-4-1-20250805",
        +  "claude-opus-4-5-20251101",
        +  "claude-opus-4-6",
        +  "claude-opus-4-6[1m]",
        +  "claude-opus-4-7",
        +  "claude-opus-4-7[1m]",
        +  "claude-opus-4-8",
        +  "claude-opus-4-8[1m]"
        +]
    • AddeddeleteCaseQueueEvalRubric
    • AddedduplicateAgent
    • AddedgetCaseQueueEvalRubrics
    • AddedreplaceCaseQueueEvalRubrics
    • AddedupdateCaseQueueEvalRubric

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely call enterprise MCP tools with tenant-scoped RBAC, human approvals, audit logging, and multi-tool workflows across customer, order, document, and ticket data.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to trace regulatory rule changes to affected parties and required actions through deterministic safety gates, returning dated action plans and hash-linked evidence records. Supports 12 MCP tools over stdio or streamable HTTP for source comparison, obligation decomposition, scope assessment, planning, and evidence validation across multiple domain packs.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources