Skip to main content
Glama

AgentPlaybooks

One playbook, every agent. A portable operating environment for AI agents — persona, skills, MCP servers, project instructions, and memory in one source of truth.

Keep your agents yours. AgentPlaybooks stores skills, personas, MCP servers, project instructions, and memory in one portable playbook, so you can switch platforms, use several at once, or self-host without vendor lock-in.

Your agent setup stays in sync across Claude, ChatGPT, Cursor, Codex, Gemini, local models, and future platforms. The playbook is the portable source of truth—not any single vendor or editor.

It is not another skill store or MCP registry. Skills and MCP connections are parts of a playbook; the playbook is the whole job. That holds for agents with a body too: a skill can carry demonstrations, recordings of the task in the order a robot performs them.

Highlights

What a playbook holds

  • Persona: 1 per playbook, stored directly on the playbook record

  • Instructions: always-on project rules — the AGENTS.md / CLAUDE.md content

  • Skills: SKILL.md documents in the Agent Skills format, frontmatter preserved across every client

  • Skill attachments: bundled scripts, references, and templates, round-tripped by the CLI

  • Demonstrations: recordings of a skill being performed — YouTube, a pinned URL, or a LeRobot dataset — with timestamped segments, for agents that learn by watching

  • MCP servers: tools and resources in Model Context Protocol format

  • Memory: key-value store with tags and descriptions, with a native Hermes memory provider

  • Hermes Tools plugin: connect playbook skills, MCP/OpenAPI tools, and credentials

  • Canvas: versioned markdown work documents, scoped to a playbook run, so several teams can execute the same playbook without sharing work products

Credentials, without handing them over

  • Secrets vault: AES-256-GCM, per-user derived keys. Agents reference a secret by name and the platform injects it server-side (use_secret), so the value never enters an agent's context. Optional per-secret host allow-lists, and an expiry that is enforced: an expired secret is refused by every path that would use it.

  • Federation: other MCP servers and OpenAPI services become tools on your playbook, with their credentials resolved from that same vault by name

  • Audit trail: every federated call and every vault operation, refusals included

Getting it into your tools

  • Claude: one plugin brings every playbook in your account into claude.ai, Claude Desktop, Cowork, Claude Code, and mobile, signing in with OAuth — no API key. Or add a single playbook as a custom connector. See AgentPlaybooks in Claude.

  • Cursor and VS Code: one-click install links for the account or a single playbook — on each playbook's Integrations tab, and in MCP Integration.

  • CLI + portable Agent Plugin: audit your local agent config, then sync one playbook to Claude Code, Cursor, ChatGPT/Codex, Google Antigravity, Grok Bot and Hermes

  • Agent Plugins 1.0: install the project plugin or export a single playbook as plugin.json, mcp.json, and complete Agent Skills directories. Compatible MCP hosts can also discover hosted playbook skills through the MCP Skills extension.

  • Private, versioned central backups are separate from installable plugin exports; packages contain no vault secret values.

  • Publishing: a public playbook's skills are served as plain markdown over HTTP at /.well-known/skills/ — installable from a URL, no registry, no sign-up

  • Export formats: Agent Plugin ZIP, JSON, OpenAPI, MCP, Anthropic, Markdown

Working with other people

  • API keys: role-based access control (Viewer, Coworker, Admin)

  • Team collaboration: one-time editor invites without sharing human credentials or agent API keys

  • Marketplace: Public and Unlisted playbooks, skills, MCP servers

  • Theme: system-aware Light and Dark modes

Related MCP server: mcp-canon

Tech Stack

Category

Technology

Purpose

Framework

Next.js 16 + React 19

App Router, SSR

Styling

Tailwind CSS 4

Utility-first CSS

Animation

Framer Motion

UI animations

Icons

Lucide React

Icon library

API

Hono

Edge API routing

Database

Supabase

Postgres + Auth + RLS

i18n

next-intl

Localization (en, hu, de, es)

Docs

Plain markdown in public/docs

Fetched and rendered client-side

Hosting

Cloudflare Workers

Edge deployment

Adapter

@opennextjs/cloudflare

Next.js on Workers

Live Demo

Getting Started

Prerequisites

  • Node.js 22+ (engines in package.json; CI runs 22)

  • npm 11+ — npm 10 writes a lockfile npm ci then rejects

  • Supabase project

  • Cloudflare account (optional for deployment)

Installation

git clone https://github.com/matebenyovszky/agentplaybooks.git
cd agentplaybooks
npm install

Starters

Portable playbooks under examples/ — persona, instructions, skills, MCP, memory, and vault in a tree you control. Small MIT examples you can clone or cp -R. Not a marketplace.

Starter

One-liner

coding-agent-baseline

Coding-agent playbook: instructions, two skills, safe MCP stub

doctor-drift-demo

Review playbook with host-folder drift; the portable store stays canonical

skills-only-starter

Smallest playbook: three skills + instructions; no MCP

cursor-hermes-starter

Playbook with persona, instructions, and skills for Cursor and Hermes hosts

Install into a host (optional doctor check, then sync):

npx @agentplaybooks/cli@latest doctor examples/coding-agent-baseline
npx @agentplaybooks/cli@latest sync examples/coding-agent-baseline --target=claude,cursor --apply

See examples/README.md, the CLI docs, and the Agent Plugins spec.

Environment Variables

Create a .env.local file with:

NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# Required for the secrets vault. 32 bytes as 64 hex characters:
#   node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Losing it means losing every stored secret — no vault operation can decrypt
# without it, and rotating it invalidates everything already encrypted.
SECRETS_ENCRYPTION_KEY=

Optional:

Variable

Effect

NEXT_PUBLIC_APP_URL

The canonical origin used for canonical tags, the sitemap and robots. Defaults to https://agentplaybooks.ai.

ALLOWED_ORIGINS

Comma-separated CORS allow-list. Replaces the hosted defaults entirely — set it on a self-hosted instance so the project's own domains are not trusted there.

SECRETS_REQUIRE_ALLOWED_HOSTS

true makes a secret's host allow-list mandatory: an unpinned secret cannot be used for outbound requests at all.

Development

npm run dev

Open http://localhost:3000

Cloudflare Deployment

npm run build:worker
npm run preview
npx wrangler deploy

CLI, ChatGPT/Codex Plugin, and Claude Code Plugin (packages/cli)

agentplaybooks doctor <project> audits local agent configuration (instructions, Agent Skills, custom agents, MCP servers, likely hard-coded secrets, drift) and agentplaybooks sync <project> creates the canonical agentplaybook.json plus the platform files missing from enabled targets: Claude Code, Cursor, ChatGPT/Codex, GitHub Copilot, Gemini CLI, Google Antigravity (.agents/skills), Grok Bot (.agents/skills, which it discovers natively alongside AGENTS.md), and Hermes Agent (.agents/skills registered in ~/.hermes/config.yaml, plus that file's mcp_servers: and SOUL.md). agentplaybooks plugin export|import round-trips Agent Plugins 1.0 packages; the only manifest extension carries secret references and bindings, never secret values. login / playbooks / pull / push synchronize skills, MCP servers, and the manifest with a hosted playbook using a user API key. push also creates a private, versioned cross-platform AI agent configuration backup, including complete Agent Skills folders and portable custom agents. backups lists revisions; pull --snapshot can recover an earlier one. Secret values never move, only references declared in spec.secrets. Mutating commands show a plan first and require --apply, --yes, or interactive confirmation where supported. See packages/cli/README.md and the backup and migration guide.

The same package is a ChatGPT/Codex and Cursor plugin (skill + account MCP). Exact API-key setup and installation commands are in packages/cli/README.md.

The Claude plugin is a separate, lean folder, plugins/agentplaybooks: the account MCP connector (OAuth, no key), a playbooks skill that works in chat and Cowork, and doctor / sync commands that run the published CLI through a pinned npx. It has no bin/ directory, because claude.ai and Cowork refuse a plugin that has one. Add it on claude.ai under Customize → Plugins → Add marketplace with matebenyovszky/agentplaybooks, or in Claude Code:

/plugin marketplace add matebenyovszky/agentplaybooks
/plugin install agentplaybooks@agentplaybooks

API Overview

Public and Unlisted playbook access

Public playbooks are visible to everyone. Unlisted playbooks are accessible via GUID but hidden from search.

GET /api/playbooks/:guid
GET /api/playbooks/:guid?format=openapi
GET /api/playbooks/:guid?format=mcp
GET /api/playbooks/:guid?format=anthropic
GET /api/playbooks/:guid?format=markdown

GET /api/playbooks/:id/personas
GET /api/playbooks/:id/skills
GET /api/playbooks/:guid/memory

Note: :id supports both UUID and GUID for personas and skills.

Authenticated playbook CRUD (session auth)

GET    /api/playbooks
POST   /api/playbooks
PUT    /api/playbooks/:id
DELETE /api/playbooks/:id

Personas (owner or editor)

POST   /api/playbooks/:id/personas
PUT    /api/playbooks/:id/personas/:pid
DELETE /api/playbooks/:id/personas/:pid

Skills (owner or editor)

POST   /api/playbooks/:id/skills
PUT    /api/playbooks/:id/skills/:sid
DELETE /api/playbooks/:id/skills/:sid

Memory writes (API key or owner)

PUT    /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:key

Canvas work documents

Canvas documents belong to an isolated workflow run, so multiple teams can execute the same playbook without sharing work products. They are long-form markdown artifacts that agents can revise over time. Use memory for durable facts and structured state; use canvas for deliverables such as a PR review, research report, implementation plan, or draft that may be edited passage by passage.

GET    /api/playbooks/:guid/runs
POST   /api/playbooks/:guid/runs
GET    /api/playbooks/:guid/canvas?runId=:runId
POST   /api/playbooks/:guid/canvas
GET    /api/playbooks/:guid/canvas/:slug?runId=:runId
PUT    /api/playbooks/:guid/canvas/:slug?runId=:runId
PATCH  /api/playbooks/:guid/canvas/:slug?runId=:runId
DELETE /api/playbooks/:guid/canvas/:slug?runId=:runId

PUT replaces document fields and requires expectedVersion. PATCH performs an incremental append, prepend, or exact replace operation and also requires expectedVersion. A stale version returns HTTP 409, preventing two agents from silently overwriting each other's work.

curl -X PATCH 'https://your-domain.com/api/playbooks/abc123/canvas/pr-review?runId=RUN_UUID' \
  -H "Authorization: Bearer apb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "replace",
    "search": "## Security review\nPending.",
    "content": "## Security review\nNo blocking issues found.",
    "expectedVersion": 3
  }'

Playbook API keys (owner only)

GET    /api/playbooks/:id/api-keys
POST   /api/playbooks/:id/api-keys
DELETE /api/playbooks/:id/api-keys/:kid

Human collaboration (session auth; owner manages access)

Human editors are invited with a one-time link. They can edit playbook content, while ownership controls remain owner-only.

GET    /api/playbooks/:id/collaborators
POST   /api/playbooks/:id/collaborators
DELETE /api/playbooks/:id/collaborators/:collaboratorId

GET    /api/collaboration-invites/:token
POST   /api/collaboration-invites/:token

Invite links expire after 72 hours and can be accepted once. See Team Collaboration for the full permission model and security notes.

Playbook Secrets (owner or API key)

Secrets are encrypted using AES-256-GCM. Agents can use the use_secret MCP tool or proxy endpoint to use secrets in HTTP requests without ever reading the plaintext value.

GET    /api/playbooks/:guid/secrets          # List metadata only
POST   /api/playbooks/:guid/secrets          # Create encrypted secret
PUT    /api/playbooks/:guid/secrets/:name    # Update/rotate secret
DELETE /api/playbooks/:guid/secrets/:name    # Delete secret

# Dashboard only
GET    /api/playbooks/:guid/secrets/reveal/:name

# Proxy external requests using a secret
POST   /api/playbooks/:guid/secrets/proxy

# Audit trail — shared with federated MCP calls
GET    /api/playbooks/:guid/audit?operation=secret.

Every vault operation is recorded, refusals included: what was done, to which secret, by the owner or by which API key prefix, and for secret.use the destination host. An entry never holds a secret value, a full outbound URL, or a key. Owner access only — a playbook API key performs vault operations but cannot read the record of them.

User profile and user API keys (Management)

GET    /api/user/profile
PUT    /api/user/profile

GET    /api/user/api-keys
POST   /api/user/api-keys
DELETE /api/user/api-keys/:kid

Marketplace and stars

GET /api/public/playbooks
GET /api/public/skills
GET /api/public/skills/:id
GET /api/public/mcp
GET /api/public/mcp/:id

GET  /api/playbooks/:id/star
POST /api/playbooks/:id/star
GET  /api/user/starred

Memory write-back (playbook API key or owner)

GET    /api/playbooks/:guid/memory
PUT    /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:key

MCP endpoints

For clients that require a local stdio process, see the local MCP transport. It uses the same account tools and authorization handlers; protocol discovery starts without credentials, while data operations require your instance configuration.

GET  /api/mcp/:guid                    # MCP manifest
POST /api/mcp/:guid                    # MCP JSON-RPC
POST /api/mcp/:guid/tools/:tool        # Call one tool over plain HTTP

POST /api/mcp/manage                   # MCP management server (user API key)

GET    /api/mcp/config/:serverId       # Federated server config (owner)
POST   /api/mcp/config/:serverId
PUT    /api/mcp/config/:serverId
DELETE /api/mcp/config/:serverId
POST   /api/mcp/config/:serverId/test  # Try the connection before saving it

GET  /api/mcp-registry/search          # Search the public MCP registry
GET  /.well-known/mcp-registry-auth    # Registry ownership verification

Every tool a playbook exposes is also reachable as a plain HTTP call, so a client that cannot speak MCP is not shut out:

POST /api/playbooks/:guid/operations/:operation
POST /api/control/:operation           # Account-level operations

Publishing skills over HTTP

Skills are served as plain markdown — an index plus one SKILL.md per skill, no credential, open CORS. Any client can install from a base URL with no registry and no sign-up. Only public playbooks are served; unlisted and private ones stay reachable through apb pull.

GET /.well-known/skills/                    # Site-wide: every public playbook's skills
GET /playbooks/:guid/.well-known/skills/    # One playbook
hermes skills install well-known:https://agentplaybooks.ai/.well-known/skills/<name>

Connection catalogue

GET /api/connections

Curated templates for wiring up a federated MCP server or OpenAPI service. Public, because a template is not a credential: every entry references the secrets it needs by name only, to be resolved from the playbook's vault.

Management

GET  /api/manage/openapi.json
GET  /api/manage/playbooks
POST /api/manage/playbooks

Health

GET /api/health

API Key Usage

Playbook API keys let agents read/write memory for a single playbook.

curl -X PUT https://your-domain.com/api/playbooks/abc123/memory/user_preferences \
  -H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"value": {"theme": "dark"}}'

User API keys are used for management endpoints and the MCP management server:

curl -X POST https://your-domain.com/api/mcp/manage \
  -H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"list_playbooks","params":{}}'

Project Structure

agentplaybooks/
  src/
    app/
      .well-known/skills/  # Public skill publishing (site-wide)
      api/
        _shared/           # auth.ts, guards.ts — where authorization lives
        [[...route]]/      # Hono catch-all for most endpoints
        mcp/               # MCP manifest, JSON-RPC, federation config
        playbooks/         # Per-playbook routes (secrets, canvas, audit, …)
      dashboard/           # Authenticated UI
      enterprise/          # Self-hosting landing page
      explore/             # Marketplace
      login/               # Auth pages
      page.tsx             # Marketing home
    components/
      playbook/            # Editor components
      ui/                  # UI primitives
    i18n/
      messages/            # Translation files (en, hu, de, es)
      request.ts           # Server-side locale resolution
    lib/
      mcp/                 # Federation, secret references
      storage/             # Storage adapters
      supabase/            # Supabase client and types
      crypto.ts            # Secrets vault encryption
  packages/
    cli/                   # AgentPlaybooks CLI + Codex/Cursor plugin
  plugins/
    agentplaybooks/        # Claude plugin (claude.ai, Cowork, Claude Code)
  .claude-plugin/          # Plugin marketplace manifest
  docs/                    # Contributor-facing notes
  examples/                # Starter playbooks (fork/clone/sync)
  public/
    blog/  docs/           # Markdown served to the client
  schemas/                 # JSON schemas (agentplaybook.json, …)
  scripts/                 # Seed and build scripts
  supabase/
    migrations/            # Database migrations
  tests/                   # Vitest suites
  open-next.config.ts
  wrangler.jsonc

Database Schema

  • playbooks: core entity (includes visibility enum: private, public, unlisted; persona fields for agent identity and instructions for always-on project rules)

  • secrets: the vault — AES-256-GCM ciphertext, per-secret host allow-list, reveal flag, rotation and usage accounting

  • audit_logs: owner-readable audit trail for federated MCP calls and secrets vault operations (secret.*); never holds values, full URLs or keys. Renamed from mcp_proxy_audit_logs.

  • skills: skill definitions and optional SKILL.md content

  • skill_attachments: secure attachment storage for skills

  • mcp_servers: MCP tools and resources

  • playbook_runs: isolated executions of a reusable playbook

  • canvas: versioned markdown work documents

  • memories: key-value memory store

  • api_keys: playbook-scoped API keys with RBAC roles

  • user_api_keys: user-scoped API keys

  • playbook_collaborators: accepted human editor memberships and hashed one-time invites

  • profiles: public user profile data

  • playbook_stars: marketplace stars

There is deliberately no second credential store. Federated MCP and OpenAPI servers used to keep their own encrypted secrets in mcp_server_secrets; that table was dropped (supabase/migrations/20260820_drop_mcp_server_secrets.sql) because a second store meant the credentials most worth stealing sat in the weaker box, without the rotation, expiry, usage accounting and audit trail the vault already had. transport_config.auth.token_secret now names a vault entry instead.

A note on Row Level Security

RLS is enabled on the tables listed above, but it is not the primary authorization mechanism at runtime. Almost all API routes query with the service-role key, which bypasses RLS; authorization is enforced in application code (src/app/api/_shared/guards.ts).

RLS is load-bearing for the handful of endpoints that read public playbooks with the anon key — the MCP manifest (/api/mcp/:guid), its tool routes, and the public skills/MCP listings. Those depend on the anon SELECT policies in supabase/migrations/20260107_permissions_refactor.sql. Removing or disabling those policies breaks the endpoints rather than merely relaxing them.

Policies written against auth.uid() are currently inert, because no JWT-bearing client performs table queries — the browser talks only to /api/*, never to Postgres directly.

Contributing

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Run the same checks CI runs, in the same order:

    npm run lint                        # eslint
    npm run test:all                    # vitest + the CLI suite
    npm run prebuild && npx tsc --noEmit
    npm run audit:production
    npm run build
  4. Commit your changes and open a Pull Request

Two things worth knowing before your first PR:

  • Write the lockfile with npm 11. npm 10 produces a package-lock.json that npm ci then rejects outright, so CI fails on install before it reaches your change. npx npm@11 install works on Node 20 as well.

  • Warnings are tolerated, errors are not. npm run lint currently reports a known set of react-hooks and navigation warnings, tracked in the issues — a clean run means zero errors, not zero output.

License

MIT — see LICENSE.

Use it for anything, including commercially. Keep the copyright notice and the permission notice in copies or substantial portions.

Available Tools

50 tools
archive_memoriesArchive memoriesA
Idempotent
Inspect

Hide matching memories from normal search and context, retaining them in the longterm tier. Search scope='archived' to find them or read_memory by key. Filters combine as AND; older_than_hours uses memory_at. Permanent-retention entries are skipped. promote_memory restores visibility. Requires memory:write or full permission. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNoSpecific keys to archive
tagsNoOnly archive memories with these tags
from_tierNoOnly archive from this tier
playbook_idYesUUID or GUID of the target playbook
older_than_hoursNoArchive memories older than X hours
generate_summariesNoAuto-generate summaries if missing

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description isn't expected to repeat that. It adds non-obvious behavior: permanent-retention entries are skipped, filters combine as AND, older_than_hours evaluates against memory_at, and required permission is 'memory:write or full permission'. Those are meaningful traits that go 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?

Seven short sentences, each carrying a distinct fact: effect, recovery paths, filter combinators, retention exception, restore tool, permission, and call target. The playbook_id clarification is redundant with the schema's own description, but overall it is front-loaded and largely waste-free.

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 6-param mutation tool with no output schema, the description covers the effect, recovery, filter semantics, permission requirement, and the key playbook_id target. It stops short of describing what a call returns or how partial/failed matches behave, but 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 100%, so the schema already documents each parameter. The description adds a bit beyond the schema – the AND combination rule and the memory_at clock for older_than_hours – but otherwise doesn't need to restate parameter-level 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 and resource ('Hide matching memories from normal search and context, retaining them in the longterm tier'), and immediately distinguishes the effect from delete_memory by describing retention and recovery paths. An agent can differentiate it from delete_memory, search_memory, and promote_memory 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 context: how to retrieve archived items (scope='archived', read_memory by key), how filters combine ('AND'), and that promote_memory restores visibility. It doesn't state explicit when-not-to-use conditions or name the alternative tool for irreversible deletion, but the implied usage frame is clear.

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

call_connected_toolCall a connected toolA
Destructive
Inspect

Call a tool on one of this playbook's connected MCP or OpenAPI servers. Arguments are forwarded as-is and the result mirrors the connected tool, including any side effects that tool has in the outside world. Requires tools:call or full permission. Use list_mcp_servers to discover server_id and tool_name. Do not use this to manage connection records; use create_mcp_server, update_mcp_server, or delete_mcp_server. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNoArguments passed to the connected tool
server_idYesConnected server UUID or name
tool_nameYesTool name exposed by the connected server
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses that arguments are forwarded as-is and results mirror the connected tool, including side effects in the outside world. This complements the containing annotations (readOnly=false, destructive=true, openWorld=true) by explaining what those flags mean in terms of real-world 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 compact and front-loaded, with the core purpose in the first sentence. It covers essential behavior, permissions, discovery, and exclusions in four short sentences 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 tool's dynamic nature and lack of an output schema, the description adequately covers invocation, side effects, permission requirements, parameter discovery, and limitations. It is not overly detailed but it gives an agent enough context to use the tool safely and 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?

Though the schema already describes all four parameters, the description adds meaningful context by directing users to list_mcp_servers to discover server_id and tool_name, and by explaining that arguments are forwarded as-is. This goes beyond the schema's brief 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 action: call a tool on one of the playbook's connected MCP or OpenAPI servers. It also distinguishes this tool from connection-management siblings by saying to use create/update/delete_mcp_server instead, 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 Guidelines5/5

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

The description gives explicit when-to-use context (calling connected tools) and explicit when-not-to-use guidance with named alternatives for managing connection records. It also tells the agent to use list_mcp_servers to discover server_id and tool_name, covering discovery prerequisites.

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

consolidate_memoriesConsolidate memoriesAInspect

Consolidate related memories under a new parent memory with a summary. Child rows stay readable; by default they are archived to the longterm tier rather than deleted. Requires memory:write or full permission. Use delete_memory only when a key should be destroyed, and archive_memories to move entries to longterm without creating a parent. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesSummary of consolidated memories
parent_keyYesNew parent memory key
memory_keysYesKeys of memories to consolidate
parent_tagsNoTags for parent memory
playbook_idYesUUID or GUID of the target playbook
archive_childrenNoMove children to longterm tier

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are generic and all false, so the description carries the burden. It explicitly discloses that child rows stay readable, that children are archived to the longterm tier by default rather than deleted, and that memory:write or full permission is required. It does not cover edge cases like existing parent keys, which prevents a 5.

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

Conciseness5/5

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

The description is three sentences, each earning its place. It front-loads the core purpose, adds essential behavioral details, and provides alternative-tool guidance 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?

For a tool with 6 parameters and no output schema, the description provides sufficient operational context: when to use it, permissions, alternatives, and default archiving behavior. It does not describe return values, failure modes, or what happens if parent_key already exists, but the schema covers parameter semantics and the key behavioral aspects are present.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds only marginal value for parameters (e.g., confirming playbook_id is a UUID/GUID), while parameter meanings are already well documented in the schema. No compensation needed beyond 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 action: 'Consolidate related memories under a new parent memory with a summary.' It names the specific resource (memories) and explicitly contrasts this tool with archive_memories and delete_memory, making its unique role clear.

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 strong usage guidance: it explains when to use consolidate_memories, and when to use delete_memory ('only when a key should be destroyed') or archive_memories ('move entries to longterm without creating a parent'). It also states the permission requirement and how to pass playbook_id.

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

create_mcp_serverAdd MCP serverAInspect

Connect an MCP or OpenAPI server to this playbook by storing its transport configuration. This writes playbook state; it does not by itself invoke remote tools. Requires playbooks:write or full permission. Use call_connected_tool to invoke a discovered tool, and list_mcp_servers to inspect connections. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the connected server
toolsNoKnown tool definitions, if already discovered
resourcesNoKnown resource definitions, if already discovered
descriptionNoWhat this server provides
playbook_idYesUUID or GUID of the target playbook
transport_typeNoConnection type (default: http)
transport_configNoTransport-specific configuration. Do not put plaintext secrets here.

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the side effect: 'This writes playbook state; it does not by itself invoke remote tools.' It also states the permission requirement, which adds value beyond the annotations (which only indicate readOnlyHint=false, etc.). It does not contradict annotations. Some additional context like failure modes or return behavior is absent, but the core behavioral transparency 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?

The description is three sentences, front-loaded with the primary purpose, then side effects and permissions, and finally usage guidance. Each sentence serves a distinct purpose with no redundant or filler content. It is optimally 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 tool's complexity (7 params, nested objects, no output schema), the description covers the purpose, side effects, permissions, related tools, and target parameter. It does not describe what the return value represents, which would be helpful since there is no output schema, but this is a minor gap. Overall, the description is thorough for a create-type 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 provides descriptions for all 7 parameters (100% coverage), so the description does not need to explain each. It does add a small clarification for playbook_id ('Pass playbook_id as the UUID or GUID of the playbook this call should target'), but this largely reiterates the schema. No significant new parameter meaning is provided beyond what the schema already contains.

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: 'Connect an MCP or OpenAPI server to this playbook by storing its transport configuration.' It explicitly differentiates from siblings by noting it does not invoke remote tools (unlike call_connected_tool) and is for adding a server (unlike list_mcp_servers).

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 context: it mentions the required permission (playbooks:write), gives clear alternatives ('Use call_connected_tool to invoke a discovered tool, and list_mcp_servers to inspect connections'), and indicates the targeting requirement for playbook_id. This fully guides the agent on when and how to use the tool.

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

create_personaCreate personaA
DestructiveIdempotent
Inspect

Set the playbook's singleton persona name and system prompt. This does not add a second persona; it is a backward-compatible alias that overwrites those fields. Requires personas:write or full permission. Prefer update_persona to change a subset of fields. Use update_playbook only when you also need playbook name, visibility, config, or project instructions. Do not use delete_persona unless you intend to reset to the default Assistant.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the persona
metadataNoOptional metadata
playbook_idYesUUID of the playbook
system_promptYesThe system prompt that defines this persona's behavior

TDQS

A4.5/5.0
Behavior4/5

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

The description goes beyond the annotations by clarifying the tool's behavior: 'This does not add a second persona; it is a backward-compatible alias that overwrites those fields.' This adds important context about side effects (overwriting) and the alias nature, which is not fully captured by the annotations alone. The permission requirement is also disclosed. 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 concise and well-structured: a single focused opening sentence, followed by clarifications and usage alternatives. Each sentence adds value, and there is no fluff or repetition.

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 covers the tool's purpose, behavioral details, permission requirements, and clear distinctions from related tools. Given the rich annotations and complete schema, this description is fully sufficient for an agent to decide when and how to use 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 coverage is 100%, so the baseline is 3. The description implies the roles of name, system_prompt, and playbook_id through its main clause, but does not add detailed parameter-level semantics beyond the schema. Since the schema is thorough, this 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's purpose: 'Set the playbook's singleton persona name and system prompt.' It specifies the exact resources affected and explicitly differentiates from sibling tools like update_persona and update_playbook, leaving no ambiguity about what this 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?

Provides explicit usage guidance: 'Prefer update_persona to change a subset of fields' and 'Use update_playbook only when you also need playbook name, visibility, config, or project instructions.' It also warns against delete_persona unless resetting, and states the required permission level. This is exemplary decision-support.

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

create_playbookCreate playbookAInspect

Create a new playbook container for a singleton persona, skills, and memory. Each call inserts a new playbook; it does not upsert by name. Requires playbooks:write or full permission. Use update_playbook to change an existing playbook, not this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the playbook
tagsNoDiscovery and organization tags
visibilityNoVisibility of the playbookprivate
descriptionNoDescription of what the playbook is for
instructionsNoAlways-on project instructions (the AGENTS.md / CLAUDE.md content). Separate from the persona: the persona is who the agent is, these are the rules of this project.
persona_nameNoInitial persona name
persona_metadataNoInitial persona metadata
persona_system_promptNoInitial persona/system prompt

TDQS

A4.4/5.0
Behavior4/5

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

The description adds important behavioral context beyond the annotations: it states every call inserts a new record (does not upsert by name) and requires playbooks:write or full permission. This goes beyond the bare annotations (e.g., idempotentHint=false) by explaining exactly what that means in operation. Minor gap: does not explain what happens to existing playbook containers or return behavior, but the provided details are genuinely useful.

Agents need to know what a tool does to the world before 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 resource, followed by non-upsert behavior and an alternative tool recommendation. No filler or redundancy; 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?

Despite 8 parameters, nested objects, and no output schema, the description gives enough operational context: creation semantics, auth requirement, and when to use an alternative. It doesn't describe the returned value or error/edge-case behavior, which could be slightly richer, but it is largely complete for this tool's complexity and available schema info.

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

Parameters3/5

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

Param descriptions cover all 8 fields (100% schema coverage), so the description does not need to repeat them. It adds a slight conceptual frame by describing the container's purpose, but no parameter-specific enrichment beyond the schema. This is acceptable for a tool with excellent 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 uses a specific verb and resource ('Create a new playbook container') and specifies the container's role ('for a singleton persona, skills, and memory'). It clearly distinguishes from update_playbook, and the explicit 'each call inserts a new playbook; it does not upsert by name' makes the create-only scope 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 gives explicit when-to-use and when-not-to-use guidance: 'Create a new playbook...' plus 'Use update_playbook to change an existing playbook, not this tool.' It also notes the required permission, helping the agent decide if the tool is appropriate for the current context.

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

create_runCreate runAInspect

Create a workflow run so this playbook can be applied immediately with isolated context and canvas artifacts. Requires canvas:write or full permission. Use list_runs to inspect existing runs (there is no get_run) and update_run to change status. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable run name
contextNoInitial execution context
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.4/5.0
Behavior4/5

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

With all annotations set to false, the description carries the full burden of disclosing behavior. It clearly indicates this is a write operation (creates a run) and adds context about permissions and immediate application. It does not mention idempotency or side effects beyond creation, but the provided information is adequate.

Agents need to know what a tool does to the world before 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. Each of the four sentences adds distinct value: purpose, permission, alternatives, and parameter guidance. No fluff or redundant 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?

Given the 3 parameters, no output schema, and simple annotations, the description covers the essential aspects: what it does, when to use it, permissions, and parameter hints. It lacks information about the return value or error cases, but those are not critical for this create-style 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%, so the baseline is 3. The description adds minimal value beyond the schema: it reiterates that playbook_id should be a UUID or GUID, but this is already in the schema. The mention of 'isolated context and canvas artifacts' gives some semantic context to the context parameter, but not enough to elevate the 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 clearly states the tool's function: 'Create a workflow run so this playbook can be applied immediately.' This is a specific verb+resource combination that distinguishes it from siblings like list_runs, update_run, and delete_run. It also explicitly notes the absence of a get_run, further clarifying its role.

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 instructs when to use this tool versus alternatives: 'Use list_runs to inspect existing runs (there is no get_run) and update_run to change status.' It also mentions the required permission ('Requires canvas:write or full permission'), providing clear usage context.

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

create_skillCreate skillAInspect

Create a new skill for this playbook. Use this to expand capabilities. Requires full or skills:write permission; with skills:propose the skill is saved as a proposal (status pending_review) that the owner or an editor approves before it exists. Use update_skill to change an existing skill and list_skills to check for name collisions first. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent Skills-compatible name (lowercase kebab-case, e.g. data-analyzer)
contentYesThe SKILL.md document. Its YAML frontmatter may carry a demonstrations list of {provider, ref, fidelity, role, title, sha256, segments}, where segments are {start, end, label, comment} in seconds; the list order is the order the demonstrations are performed in. A malformed block is rejected.
priorityNoPriority level (default 50)
descriptionNoWhat the skill does and when the agent should use it
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false; the description goes further by disclosing the permission tiers and the approval workflow that determines whether the skill actually exists. It does not cover failure behavior (e.g. what happens on a name collision or malformed frontmatter) or what the call returns, so it stops short of full 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.

Conciseness4/5

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

Four sentences, front-loaded with the core action and then permissions, alternatives, and the target identifier. Efficient overall, though the closing playbook_id sentence largely duplicates the schema and could be dropped.

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, and the description never indicates what a successful create returns (e.g. the new skill id) or how to follow up. Everything else an agent needs to invoke the tool correctly — permissions, proposal mode, collision-check workflow, target playbook — 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 baseline is 3. The description's only parameter content is restating that playbook_id is a UUID/GUID, which the schema already says verbatim; it adds no syntax, format, or constraint detail beyond the structured 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?

States a specific verb and resource (create a skill scoped to a playbook) and explicitly separates itself from update_skill and list_skills. An agent can identify this as the creation path 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 Guidelines5/5

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

Gives the precondition for use (full or skills:write permission), the divergent behavior under skills:propose (saved as pending_review proposal), and routes the agent to update_skill for existing skills and list_skills for collision checks. This is explicit when-to-use plus named alternatives.

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

create_task_graphCreate task graphA
DestructiveIdempotent
Inspect

Create a hierarchical task plan in one call: a parent plan memory plus a child node per subtask. Upserts by key, so repeating the same plan_key overwrites the previous graph. Requires memory:write or full permission. Use write_memory for a single node, update_task_status to move a node through pending/running/completed, and get_memory_tree to inspect the graph. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags for the plan
tasksYesList of subtasks to create
plan_keyYesKey for the root plan memory
playbook_idYesUUID or GUID of the target playbook
plan_summaryYesHigh-level summary of the entire plan

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses the idempotent upsert behavior (repeating plan_key overwrites) and the destructive implication, consistent with the destructiveHint annotation. It also states the permission requirement, adding context 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.

Conciseness5/5

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

Concise, front-loaded with the core purpose, then usage alternatives, then behavioral notes and permission. Every sentence adds value 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 no output schema, the description covers purpose, usage, alternatives, behavior, permissions, and targeting. Nested task structure is well documented in schema; description adds the key semantic of overwriting by plan_key.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 per-parameter descriptions. The description adds minimal param-specific insight beyond what schema provides (e.g., playbook_id as UUID/GUID is already in schema). 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 clearly states the tool creates a hierarchical task plan with a parent plan and child nodes per subtask. It distinguishes from siblings like write_memory (single node) and update_task_status (moving nodes) by focusing on bulk creation.

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?

Explicit guidance names alternative tools: write_memory for single nodes, update_task_status for status changes, get_memory_tree for inspection. Also mentions upsert/overwrite behavior and the required permission (memory:write/full).

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

delete_mcp_serverRemove MCP serverA
DestructiveIdempotent
Inspect

Disconnect an MCP or OpenAPI server from this playbook. The remote server is not shut down; only this playbook's connection record is removed. Requires playbooks:write or full permission. Use update_mcp_server to change configuration without disconnecting. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
server_idYesConnected server UUID
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint, idempotentHint), the description discloses important behavioral details: the remote server is not shut down, only the playbook's connection record is removed. This adds value by explaining the scope of the destructive action and the permission requirement.

Agents need to know what a tool does to the world before 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: it states the core action first, then adds essential context (no remote shutdown, permission, alternative tool, parameter guidance). Every sentence earns its place 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 disconnect tool with two parameters and no output schema, the description is complete. It covers purpose, behavioral scope, permissions, alternative usage, and parameter targeting, making it fully adequate for an agent to select and invoke 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 baseline is 3. The description mentions 'Pass playbook_id as the UUID or GUID' but this simply restates the schema description. No additional semantic value is added for either parameter 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 ('Disconnect') and resource ('MCP or OpenAPI server from this playbook'), clearly stating what the tool does. It also distinguishes itself from siblings by clarifying that only the connection record is removed, not the remote server.

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 guidance on when to use this tool versus an alternative: 'Use update_mcp_server to change configuration without disconnecting.' It also states the required permission, giving clear context for usage.

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

delete_memoryDelete memoryA
DestructiveIdempotent
Inspect

Permanently delete a memory and its saved history. Requires memory:write or full permission. To hide an entry while retaining its content, use archive_memories instead. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key to delete
playbook_idYesUUID or GUID of the target playbook

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, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description still adds real value beyond them: permanence including saved history, the required permission scope, and the archive-vs-delete decision. It does not, however, describe failure behavior 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.

Conciseness4/5

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

Three sentences, front-loaded with the destructive action. The closing sentence largely duplicates the schema's playbook_id description, which is the only bit of slack in an otherwise tight definition.

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 tool with full annotation coverage and no output schema, the description supplies what an agent needs: permanence, permission requirement, and the safer alternative. Only edge-case behavior (errors, cascading effects) is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 final sentence restates playbook_id's format ('UUID or GUID'), which the schema already documents verbatim, and adds no new syntax or constraint for 'key'.

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?

Specific verb ('Permanently delete') plus resource ('a memory and its saved history'), and it explicitly distinguishes itself from the sibling archive_memories. An agent can select 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 Guidelines5/5

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

It names the alternative (archive_memories) and the exact condition that selects it ('To hide an entry while retaining its content'). It also states the precondition (memory:write or full permission).

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

delete_personaDelete personaA
DestructiveIdempotent
Inspect

Reset the playbook's singleton persona to the default Assistant name and system prompt. Despite the delete_* name, this is not a hard delete: each playbook always keeps exactly one logical persona, so the fields are overwritten rather than removed. persona_id must equal playbook_id because the persona is stored on the playbook row. Custom name, system prompt, and metadata are permanently replaced and cannot be undone. Requires personas:write or full permission. Use update_persona to change fields without resetting, create_persona to set a new identity, and delete_playbook only when the entire playbook should be removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idYesMust equal playbook_id; the persona is a singleton stored on the playbook
playbook_idYesUUID of the playbook

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes further: it clarifies that despite the 'delete' name, this is not a hard delete, fields are overwritten rather than removed, custom name/system prompt/metadata are permanently replaced and cannot be undone, and the persona_id must equal playbook_id. It also cites the required permission (personas:write or full). This is exemplary behavioral disclosure 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?

Six sentences, each packed with essential information: purpose, semantic nuance, ID constraint, irreversible effects, permission requirement, and alternatives. There is no fluff or repetition; every sentence earns its place. The structure flows logically from what → why → constraints → consequences → 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 destructive mutation with two parameters and no output schema, the description covers all needed aspects: behavior, side effects, idempotency, required permissions, and relationship to sibling tools. It fully prepares the agent to invoke the tool correctly and understand the 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% and already includes the constraint that persona_id must equal playbook_id. The description restates this and explains the reason (persona is stored on the playbook row), but adds no new syntax or format details beyond the schema. It doesn't compensate with additional field-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?

The description specifies the exact action: resetting the playbook's singleton persona to the default Assistant name and system prompt. It clearly distinguishes this from delete_playbook, update_persona, and create_persona by explaining it is an overwrite, not a hard delete. The verb 'reset' plus the resource 'playbook's singleton persona' is specific 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 Guidelines5/5

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

Provides explicit usage guidance: use this tool to reset to default, use update_persona to change fields without resetting, use create_persona to set a new identity, and use delete_playbook only when removing the entire playbook. This makes when-to-use versus alternatives crystal clear.

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

delete_playbookDelete playbookA
DestructiveIdempotent
Inspect

Permanently delete a playbook and all of its contents (persona, skills, memory, API keys, canvas, and secrets). This cannot be undone. Requires playbooks:write or full permission, and only the owner may delete. Do not use this to reset a persona (delete_persona) or remove a single skill or memory; those have dedicated tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idYesUUID of the playbook to delete

TDQS

A4.6/5.0
Behavior5/5

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

The description explicitly states destructive consequences: 'Permanently delete' and 'This cannot be undone'. It also discloses the full scope of deletion: persona, skills, memory, API keys, canvas, and secrets. It further adds permission and ownership requirements, which go beyond the annotations. The annotations (destructiveHint=true, idempotentHint=true) align with the description - 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?

The description is three sentences long and front-loaded with the most critical info (permanently delete). It efficiently packs warnings, permissions, and exclusions into additional sentences. The only minor adjustment would be that the description could be slightly more concise, but it earns its space with high-value 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 mutation tool with a single parameter, the description is complete. It covers consequences, scope, permissions, ownership, and alternative usage. The annotations and schema handle the rest (idempotency, parameter UUID). No output schema needed for a delete 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 already provides 100% coverage with a single parameter (playbook_id) described as 'UUID of the playbook to delete'. The description doesn't add parameter-specific details but that's okay since the schema fully covers it. No additional semantic value is needed 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 clearly states the action: 'Permanently delete a playbook and all of its contents', specifying the exact resource (playbook) and its scope (all contents). It also distinguishes from siblings by explicitly naming alternatives: 'Do not use this to reset a persona (delete_persona) or remove a single skill or memory'.

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 guidance including when to use (deleting a playbook), when NOT to use (resetting persona, removing single skill/memory), and even names the alternative tools like delete_persona. It also covers the permission requirement ('Requires playbooks:write or full permission') and ownership restriction ('only the owner may delete').

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

delete_runDelete runA
DestructiveIdempotent
Inspect

Permanently delete a workflow run and its isolated canvas artifacts. This cannot be undone. Requires canvas:write or full permission. Use update_run with status=archived to keep artifacts, and delete_playbook only when the whole playbook should go. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesWorkflow run UUID
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.9/5.0
Behavior5/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 adds meaningful context: deletion is permanent, it includes isolated canvas artifacts, and it requires canvas:write or full permission. This goes well beyond 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?

Three sentences, each earning its place: first states the action and outcome, second states irreversibility and permissions, third provides alternatives and parameter targeting. Front-loaded and tightly written 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, two-parameter tool with no output schema, the description fully covers what is deleted, what cannot be undone, permission requirements, alternatives, and how to identify the target. No important behavioral gaps remain.

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 clarifying that playbook_id should be passed as 'the UUID or GUID of the playbook this call should target,' reinforcing the relationship between playbook_id and the run being deleted.

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 a specific verb+resource pairing: 'Permanently delete a workflow run and its isolated canvas artifacts.' It clearly distinguishes from sibling tools like update_run and delete_playbook by naming the exact scope of the deletion.

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 guides when NOT to use this tool: 'Use update_run with status=archived to keep artifacts, and delete_playbook only when the whole playbook should go.' It also states the required permission, providing complete usage context.

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

delete_secretDelete secretA
DestructiveIdempotent
Inspect

Permanently delete a secret. Cannot be undone. Requires secrets:write or full permission. Use rotate_secret to replace the value without removing the name, and list_secrets to confirm the name first. This does not revoke the credential at the upstream provider. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSecret name to delete
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint, readOnlyHint), the description adds critical context: 'Cannot be undone' and 'This does not revoke the credential at the upstream provider'. It also states the permission requirement, enriching the agent's understanding 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?

Three densely informative sentences with no filler. The main action and consequences are front-loaded, and every sentence serves a purpose (action, side-effect, alternatives, parameter hint).

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 tool with two required parameters and no output schema, the description covers purpose, irreversible consequences, permission, non-revocation, and parameter targeting. It is fully sufficient for an agent to select and invoke 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 the description only restates the playbook_id format already in the schema. It adds no new semantic value for parameters, 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 opens with 'Permanently delete a secret', a specific verb+resource that clearly states the action. It also distinguishes itself from rotate_secret and list_secrets, making its unique 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 names alternatives ('Use rotate_secret to replace the value without removing the name, and list_secrets to confirm the name first'), provides a permission prerequisite, and gives context on when this tool is appropriate. This is model usage guidance.

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

delete_skillDelete skillA
DestructiveIdempotent
Inspect

Permanently delete a skill from this playbook. This cannot be undone except by recreating the skill. Requires full or skills:write permission. Use rollback_skill to restore a previous version instead of deleting, and update_skill to change content in place. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesID or name of the skill to delete
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.6/5.0
Behavior5/5

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

The description emphasizes the irreversibility ('This cannot be undone except by recreating the skill') and warns about the destructive nature, aligning with the destructiveHint annotation. It also states permission requirements, making the behavior transparent.

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 but includes essential warnings and alternatives. It is slightly verbose due to the permission and alternative mentions, but these are necessary for safe usage, so it remains 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?

The description covers the destructive nature, permission requirements, alternative tools, and parameter usage, making it contextually complete for a delete operation without needing 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 fully describes both parameters (skill_id and playbook_id) with clear definitions. The description only reiterates the playbook_id parameter without adding new semantic information, so it adds minimal 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 clearly states the action as 'Permanently delete a skill from this playbook' and distinguishes it from alternative operations like rollback_skill and update_skill.

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 the required permission ('Requires full or skills:write permission') and provides clear guidance on when to use this tool versus alternatives, such as using rollback_skill for restoration or update_skill for content changes.

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

find_toolsFind toolsA
Read-onlyIdempotent
Inspect

Search this playbook's complete tool catalog by keyword: the built-in playbook tools (memory, skills, canvas, workflow runs, secrets) and every connected server's federated tools (names like supabase__execute_sql or cloudflare__search). Matches against tool names and descriptions; a name match ranks above a description match. Returns up to limit (default 10, max 25) entries with name, description, and full input schema. Every returned tool can be called directly by name even when it is absent from tools/list — the advertised list is a view, not a boundary, unless this connection was pinned with ?toolset=. Read-only and free of side effects. Use this when the tool you need is not in your current list, before concluding a capability is missing. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matches to return (default 10, max 25)
queryYesKeywords to match against tool names and descriptions, e.g. 'sql tables' or 'archive memory'
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchesYes

TDQS

A4.7/5.0
Behavior5/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, and the description reinforces this with 'Read-only and free of side effects.' It adds substantial behavior beyond annotations: name matches rank above description matches, results include full input schemas, and returned tools are callable even when absent from tools/list unless pinned with ?toolset=. 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 dense paragraph starting with the core purpose and then adding only high-value operational details: scope, ranking, limits, return contents, the tools/list caveat, and the ideal usage moment. Every sentence earns its place with no filler.

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

Completeness5/5

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

Given the full schema coverage, output schema, and annotations, the description is operationally complete. It covers what the tool searches, how results are ranked, what is returned, when to use it, and a critical boundary condition about direct invocation of returned tools.

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 all three parameters at 100% coverage, so the baseline is 3. The description adds extra meaning by explaining query matching behavior (names and descriptions, with name-match ranking), reaffirming limit bounds, and specifying playbook_id as the target playbook identifier.

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: 'Search this playbook's complete tool catalog by keyword,' and it clearly enumerates both built-in and connected-server federated tools. This distinguishes it from sibling tools like list_mcp_servers or call_connected_tool by framing it as a discovery/search utility.

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 trigger: 'Use this when the tool you need is not in your current list, before concluding a capability is missing.' It also explains what gets searched and the important tools/list boundary, though it does not explicitly name alternative tools or list 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.

get_canvas_tocCanvas table of contentsA
Read-onlyIdempotent
Inspect

Get the table of contents for a canvas document. Returns section IDs, headings, and levels for navigation and patch_canvas_section. Read-only. Use read_canvas for full markdown and list_canvas to discover slugs. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDocument slug
run_idYesWorkflow run UUID
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
tocYes
nameYes
slugYes

TDQS

A4.7/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 reinforces read-only status and adds useful context about returning section IDs/headings/levels for navigation and patch_canvas_section, going 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 tight sentences deliver purpose, return value, read-only note, alternatives, and parameter hint without any wasted words. Information is front-loaded with the primary action first.

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 output schema present and annotations covering safety, the description effectively complements the structured data. It references sibling tools for related operations, covers parameter nuance, and provides sufficient context 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.

Parameters4/5

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

Schema covers 100% of parameter descriptions, including slug, run_id, and playbook_id. The description adds extra clarity by specifying playbook_id as 'the UUID or GUID of the playbook this call should target' and implies slug discovery via list_canvas, enriching the 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 begins with 'Get the table of contents for a canvas document,' clearly stating the action and resource. It further specifies the returned data (section IDs, headings, levels) and distinguishes itself from read_canvas (full markdown) and list_canvas (slugs), making sibling differentiation explicit.

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?

Explicit guidance is provided: 'Use read_canvas for full markdown and list_canvas to discover slugs.' This tells the agent when not to use this tool and directs to alternatives. It also mentions the purpose for navigation and patch_canvas_section, establishing clear use cases.

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

get_memory_contextGet memory contextA
Read-onlyIdempotent
Inspect

Get a context-optimized view of memories: full working memory, summaries for contextual, and keys only for longterm. Read-only. Filter episodic memories by where with location and task, which read the metadata.episode convention {location, task, outcome}, and by when with after and before, which bound memory_at exactly as search_memory does; entries carrying a metadata.recording come back with their recording links resolved. Use this to pack a prompt; use read_memory for one key, search_memory to filter by text or tags, and get_memory_tree for parent-child task graphs. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoOnly episodic memories from this task (metadata.episode.task)
afterNoInclusive lower bound on memory_at, with a timezone
beforeNoInclusive upper bound on memory_at, with a timezone
locationNoOnly episodic memories recorded at this place (metadata.episode.location)
max_itemsNoMaximum items per tier
expand_keysNoKeys to show full content regardless of tier
playbook_idYesUUID or GUID of the target playbook
tags_filterNoOnly include memories with these tags
include_tiersNoTiers to include (default: working, contextual)

Output Schema

ParametersJSON Schema
NameRequiredDescription
tiersYes
total_itemsYes

TDQS

A4.6/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 still adds genuine behavioral context: the tier-specific return shape, that entries carrying metadata.recording return with resolved links, and that after/before bound memory_at exactly as search_memory does. It does not disclose pagination or size limits, keeping it shy of a 5.

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

Conciseness4/5

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

Purpose and read-only status are front-loaded, then filtering semantics, then sibling routing. It is dense but every sentence carries unique information (tier behavior, episode convention, time bounds, alternatives). Slightly long as one unbroken paragraph, which costs a point.

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 9 parameters, an output schema already present, and rich annotations, the description supplies everything else an agent needs: how tiers differ, how to filter, how to target the playbook, and how it relates to sibling memory tools. Nothing required 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 baseline is 3, but the description earns above-baseline credit by explaining the semantics the schema only names: the metadata.episode {location, task, outcome} convention behind location/task, and that after/before are exact memory_at bounds matching search_memory. playbook_id is also clarified as a UUID or GUID.

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?

Starts with a specific verb and resource ('Get a context-optimized view of memories') and immediately specifies the per-tier treatment (full working, summaries for contextual, keys only for longterm). It explicitly names the siblings it is not (read_memory, search_memory, get_memory_tree), so an agent can distinguish it without opening other 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?

Gives an explicit use case ('use this to pack a prompt') followed by a routing table to alternatives with their distinct conditions: read_memory for one key, search_memory to filter by text or tags, get_memory_tree for parent-child task graphs. This is exactly the when-to-use/when-not guidance the dimension asks for.

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

get_memory_historyMemory historyA
Read-onlyIdempotent
Inspect

Read previous versions of a memory by its current key, including original memory_at and saved contents. History is excluded from normal search. To restore a version, write its contents and memory_at with write_memory and is_archived=false. Read-only. Unlike get_memory_context (current entries by tier) and get_memory_tree (hierarchy), this returns one key's past versions. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesCurrent key of the memory
limitNoPage size
offsetNoVersions to skip, for paging
searchNoOptional text within this memory's history
playbook_idYesUUID or GUID of the target playbook

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 non-destructive, so the safety profile is covered; the description adds genuinely new context that history is 'excluded from normal search' and how to restore a prior version. It does not say whether the history list is ordered or how the version payload is shaped, which keeps it short of a 5.

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

Conciseness5/5

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

Something like four tightly packed sentences, each carrying distinct load: scope, search exclusion, restore path, sibling contrast, and a required-param note. The core purpose is front-loaded and nothing is 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?

With no output schema, the description compensates by naming the returned data ('original memory_at and saved contents'). Pagination is handled by the richly described schema, and annotations carry the safety profile, so an agent has everything needed to call it and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 limit, offset, search, key, and playbook_id are already documented in the schema. The description only restates playbook_id's UUID/GUID format, adding no semantics 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?

States a specific verb+resource ('Read previous versions of a memory') and explicitly delimits scope by key. It also names and contrasts two siblings (get_memory_context for current-by-tier, get_memory_tree for hierarchy), so an agent can distinguish it without opening other 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?

Gives explicit routing versus the two nearest alternatives and even supplies a follow-on workflow ('To restore a version, write its contents and memory_at with write_memory and is_archived=false'). It tells the agent both when to use this tool and what to do next, leaving little to inference.

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

get_memory_treeGet memory treeA
Read-onlyIdempotent
Inspect

Get a hierarchical tree of memories showing parent-child relationships and per-node status. Read-only. Use this to visualize task graphs; use search_memory to filter flat lists, get_memory_context for a tiered prompt view, and read_memory for a single key's full value. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_keyNoStart from this key (omit for all roots)
max_depthNoMaximum tree depth
playbook_idYesUUID or GUID of the target playbook
include_valuesNoInclude full values (false = summaries only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootYes
treeYes
total_nodesYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's 'Read-only' reinforces this. It adds context beyond annotations by describing the hierarchical structure and per-node status, and the optional parameters' effect on output (summaries vs full values). No contradictions found, and the description enhances the agent's understanding of behavior beyond what annotations provide.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and efficiently covers usage context and parameter hint in the second sentence. No redundant phrases or unnecessary details—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 moderate complexity (4 params, output schema present, annotations provided), the description is complete enough. It covers the purpose, usage, and key behavior (read-only, hierarchical). It doesn't detail output format, but the output schema exists and annotations cover safety. The mention of 'per-node status' and 'visualize task graphs' gives sufficient context for selection.

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

Parameters3/5

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

Schema coverage is 100%, so the description doesn't need to add much. It does mention the playbook_id format (UUID/GUID) which slightly adds to the schema, but the other parameters (root_key, max_depth, include_values) are not elaborated beyond what schema already provides. It adds minimal semantic value, but the schema already does the heavy lifting, 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?

Description clearly states the tool retrieves a hierarchical tree of memories with parent-child relationships and per-node status. It distinguishes from siblings by explicitly naming alternative tools (search_memory, get_memory_context, read_memory) for different use cases, 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 alternatives: 'Use this to visualize task graphs; use search_memory to filter flat lists, get_memory_context for a tiered prompt view, and read_memory for a single key's full value.' Also specifies the target via playbook_id as UUID or GUID, which is actionable.

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

get_playbookGet playbookA
Read-onlyIdempotent
Inspect

Get a playbook with its singleton persona, skills, connected MCP servers, and memory. This is the only persona retrieval tool; there is no get_persona. Read-only. Requires playbooks:read or full permission. Use list_playbooks to discover IDs first, and get_skill when you need one skill's full content rather than the playbook summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idYesUUID of the playbook

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, destructiveHint=false, so the description doesn't need to repeat those. It adds value by specifying the required permission level and the scope of what is returned (singleton persona, skills, connected MCP servers, memory). 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 concise, front-loaded with the main purpose, and every sentence adds value: what it returns, uniqueness, read-only nature, permission requirement, and usage guidance. No fluff.

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 moderate complexity (returns multiple related entities), the description covers the key aspects: what is returned, how to get the ID, when to use an alternative, and permission requirements. No output schema exists, but the description sufficiently explains the return scope. Annotations cover safety, so completeness is high.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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% (playbook_id is described as 'UUID of the playbook'), so the description doesn't need to add much. It mentions using list_playbooks to discover IDs, which provides context for the parameter's value. 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 tool retrieves a playbook with its associated persona, skills, MCP servers, and memory. It explicitly notes this is the only persona retrieval tool, distinguishing it from siblings like get_skill and list_playbooks.

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: use list_playbooks to discover IDs first, and use get_skill when needing one skill's full content. Also mentions required permissions (playbooks:read or full), which helps the agent decide when to use this tool.

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

get_skillGet skillA
Read-onlyIdempotent
Inspect

Return the full definition of one skill in this playbook, including name, description, content, priority, and attachments. Identify the skill with skill_id, which may be a UUID or the skill's kebab-case name. When the skill's frontmatter declares demonstrations, they come back as a resolved list with a link per recording and per timestamped segment, in the order they are performed. This lookup does not modify the skill. Use list_skills first to discover IDs and names. Do not use list_skill_versions (historical revisions) or get_playbook (persona and summaries, not full skill content). Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYesSkill ID or name
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
contentNo
licenceNo
priorityNo
created_atNo
descriptionNo
playbook_idNo
publisher_idNo
demonstrationsNo
skill_attachmentsNo

TDQS

A4.6/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 'this lookup does not modify the skill' is largely redundant. However the description adds genuine behavioral value by explaining how demonstrations are returned (resolved list, link per recording and per segment, in performance order).

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, then identifier semantics, return shape, and routing guidance in a logical order. Slightly long, and the return-shape sentence partially duplicates the output schema, but every sentence carries 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 an output schema exists, the description need not restate returns, yet it goes further by describing demonstration resolution and ordering. Routing, identifier format, and mutation behavior are all covered, so nothing an agent needs is missing.

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

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 nevertheless adds meaning beyond the schema: skill_id 'may be a UUID or the skill's kebab-case name' (the schema only says 'Skill ID or name') and clarifies playbook_id is the UUID/GUID target.

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 (Return) and resource (full definition of one skill), and enumerates the returned fields (name, description, content, priority, attachments). It explicitly distinguishes itself from list_skill_versions and get_playbook, so an agent can route correctly without opening schemas.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (use list_skills first to discover IDs) and when-not (do not use list_skill_versions for historical revisions, nor get_playbook for persona/summaries). Names alternatives with the condition that selects them.

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

list_canvasList canvas documentsA
Read-onlyIdempotent
Inspect

List canvas documents in a workflow run. Canvas documents are collaborative markdown files that multiple agents can edit in parallel. Omit run_id to list documents across all runs. Read-only. Use read_canvas for content and get_canvas_toc for section IDs. There is no get_run; list_runs returns run records. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNoWorkflow run UUID. Omit to list documents across all runs.
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
documentsYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description states 'Read-only', explains the effect of omitting run_id (lists all runs), and clarifies the absence of a get_run endpoint, providing transparent behavioral 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?

The description is concise, well-structured, and covers all necessary points without redundancy or irrelevant 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?

Provides complete context including purpose, parameter usage, relationships to other tools, and behavioral notes, leaving no major gaps for effective use.

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?

Adds meaningful guidance on parameters beyond the schema: explains that run_id can be omitted to list all runs and that playbook_id should be a UUID or GUID, enhancing usability.

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 tool lists canvas documents in a workflow, defines canvas documents, and distinguishes from read_canvas and get_canvas_toc, 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?

Explicitly guides when to use this tool versus alternatives (read_canvas for content, get_canvas_toc for section IDs) and clarifies that list_runs is used for runs, not get_run.

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

list_mcp_serversList MCP serversA
Read-onlyIdempotent
Inspect

List the MCP and OpenAPI servers connected to this playbook, including transport metadata and discovered capability counts. Read-only. There is no get_mcp_server; this list is the detail view. Do not use this to invoke a connected tool—use call_connected_tool. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idYesUUID or GUID of the target playbook

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 description goes beyond by specifying the content returned (transport metadata, discovered capability counts) and clarifying it is the detail view. This 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 three sentences, each serving a distinct purpose: stating the action, clarifying read-only nature and the absence of a getter, and providing usage guidance. No fluff or redundancy, effectively 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?

Given the simple tool (1 param, no output schema), the description fully covers what the tool does, what it returns, and how to use it. It also anticipates potential confusion with sibling tools, making it complete for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 playbook_id is fully described in the schema ('UUID or GUID of the target playbook'), and the description only repeats that instruction without adding additional semantics. With 100% schema coverage, 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 tool lists MCP and OpenAPI servers connected to a playbook, including transport metadata and capability counts. It distinguishes from siblings by explicitly noting there is no get_mcp_server and by contrasting with call_connected_tool, making its purpose unique.

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 tells the agent when to use this tool (for listing/detail view) and when not to use it (not for invoking a tool, for which call_connected_tool is the alternative). It also instructs how to pass the playbook_id, providing clear context.

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

list_playbooksList playbooksA
Read-onlyIdempotent
Inspect

List playbooks owned by or shared with the authenticated user, including access role and content counts. Read-only; it does not create or modify playbooks. Use get_playbook when you need the singleton persona, skills, connected servers, and memory for one playbook. Requires playbooks:read or full permission.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
playbooksYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and destructive properties, and the description reinforces these by stating 'Read-only; it does not create or modify playbooks.' The description adds the permission requirement and mentions the type of data returned (access role, content counts), but these are not major behavioral traits beyond what annotations provide, so a high but not maximal score 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 consists of three concise sentences, each conveying necessary information without redundancy. It is well-structured and efficient.

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 provides sufficient context: it specifies the scope (owned or shared), what is included (access role, content counts), that it is read-only, offers an alternative for a single playbook, and mentions required permissions. Since an output schema exists, no need to describe return format separately.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 in the schema, so there is nothing to explain. The description does not add parameter details, which is acceptable given the empty schema. According to the rubric, with 100% schema coverage, 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.

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 playbooks owned or shared, including access role and content counts, and explicitly distinguishes it from get_playbook, which retrieves a single playbook with more detail. This makes the purpose specific and differentiates it 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 Guidelines5/5

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

The description explicitly advises using get_playbook for a single playbook with additional details, providing an alternative. It also mentions the required permission (playbooks:read or full), giving clear guidance on when and how to use the tool.

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

list_runsList runsA
Read-onlyIdempotent
Inspect

List workflow runs for this playbook. Runs isolate canvas artifacts and execution context. Read-only. There is no get_run; this list returns the run records. Use create_run to start isolated canvas context and list_canvas to see documents in a run. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent hints, and the description reinforces this with 'Read-only.' It adds helpful context about runs isolating canvas artifacts and execution context, and clarifies the absence of get_run, going slightly 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.

Conciseness4/5

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

The description is front-loaded with the core purpose and remains focused. The final sentence about playbook_id is somewhat redundant with the schema, but the overall structure is efficient and each other sentence adds useful context.

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 a single required parameter, strong annotations, and no output schema, the description provides enough context to select and invoke the tool correctly. It explains what runs are, how they relate to canvases, and where to go for related 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 coverage is 100%, and playbook_id is already described as 'UUID or GUID of the target playbook.' The description mostly restates this, adding no new semantics beyond confirming the parameter's role.

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: 'List workflow runs for this playbook.' It distinguishes this from related tools by explicitly noting there is no get_run and pointing to create_run and list_canvas as different operations.

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: use create_run to start isolated canvas context and list_canvas to see documents in a run. It also clarifies that there is no dedicated single-run getter, so list_runs is the way to retrieve run records.

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

list_secretsList secretsA
Read-onlyIdempotent
Inspect

List all secret names and metadata in this playbook. Does not return values — secret values are never exposed to agents. Requires secrets:read or full permission. Use use_secret to make an authenticated HTTP request, store_secret to add a value, and rotate_secret to replace one. Do not use this tool expecting plaintext credentials. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
secretsYes

TDQS

A4.7/5.0
Behavior5/5

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

Discloses that secret values are never returned and specifies required permissions (secrets:read or full), adding behavioral context beyond the readOnly 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?

Concise, front-loaded summary followed by key behavioral notes and parameter instruction; no redundant wording.

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?

Covers what is listed (names and metadata), what is not returned (values), required permissions, and parameter usage, making it complete for a 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?

The schema descriptions already cover both parameters; the description only clarifies playbook_id as 'UUID or GUID', but adds no new meaning for category, making it minimally additive.

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 it lists secret names and metadata in a playbook, distinguishing it from sibling list operations like list_playbooks or list_runs via the resource type 'secrets'.

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 not to use this tool (expecting plaintext) and directs to alternatives (use_secret, store_secret, rotate_secret) for other operations.

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

list_skillsList skillsA
Read-onlyIdempotent
Inspect

List every skill currently attached to this playbook, returning id, name, description, content, licence, and priority ordered by priority descending. Read-only; it does not create or change skills. Use this to discover skill_id values before get_skill, update_skill, or delete_skill. Do not use list_skill_versions, which lists historical revisions of a single skill, or get_playbook, which only summarizes skills. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
skillsYes

TDQS

A4.4/5.0
Behavior4/5

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

States read-only nature and that it does not create or change skills. Reinforces annotations but adds explicit non-mutating wording beyond the 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?

Each sentence adds value: purpose, read-only, usage, exclusions, parameter. No redundancy or fluff; well-structured 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?

Covers purpose, usage, return fields, and exclusions. Sufficient for an agent to decide when to call and what to expect, though error handling is not discussed (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 fully describes the single parameter (playbook_id) with type and description. The description repeats the same info without adding new semantics, 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?

Clearly states the action (list), resource (skills), scope (playbook), and return fields (id, name, etc.). Explicitly distinguishes from sibling tools like list_skill_versions and get_playbook.

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 when-to-use guidance (discover skill_id before get/update/delete) and when-not-to-use (list_skill_versions for revisions, get_playbook for summary).

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

list_skill_versionsList skill versionsA
Read-onlyIdempotent
Inspect

List historical versions of a skill for auditing or rollback. Read-only. Use this before rollback_skill; use get_skill for the current definition and list_skills for every skill in the playbook. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax versions to return (default 10)
skill_idYesID or name of the skill
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.3/5.0
Behavior4/5

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

The description reinforces the safety profile with 'Read-only' and adds meaningful context that the tool exposes historical versions for auditing and rollback. It does not add detail about pagination or response shape, but the annotations already cover read-only, idempotent, and non-destructive behavior, so the bar is lower here.

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 front-loaded with the core purpose. The guidance sentence is slightly long but packs useful sibling differentiation into one line. Minor redundancy exists between 'rollback' in the first sentence and 'before rollback_skill,' but overall it is efficient.

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 strong annotations and full schema coverage, the description gives enough context to invoke it correctly: what it lists, when to use it, where to use it, and the sibling relationship. The only minor gap is not describing what fields or structure the returned historical versions contain, but no output schema exists to fill that role.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 fully documents playbook_id, skill_id, and limit. The description does not add meaningful parameter meaning beyond noting that playbook_id is the target playbook, which 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 uses a specific verb and resource: 'List historical versions of a skill.' It explicitly frames the tool for auditing and rollback purposes and distinguishes it from siblings by naming get_skill and list_skills as alternatives for current and all skills, respectively.

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 when-to-use guidance: 'Use this before rollback_skill.' It also clarifies when the sibling tools should be used instead—get_skill for the current definition and list_skills for all skills in the playbook.

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

lock_canvas_sectionLock canvas sectionA
Idempotent
Inspect

Lock a section for exclusive editing so other agents cannot modify it. Requires canvas:write or full permission. Always unlock_canvas_section when finished. Do not use this to edit content; pair it with patch_canvas_section. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDocument slug
run_idYesWorkflow run UUID
locked_byYesAgent identifier
section_idYesSection ID to lock
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-destructive, and idempotent. The description adds that it requires canvas:write or full permission, and that it should be paired with unlock. It doesn't mention what happens if already locked, but annotations cover the safety 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?

Three sentences, all essential. Front-loaded with the core purpose, then usage guidance, then parameter clarification. 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 locking tool with good annotations and full schema coverage, the description is complete. It covers permissions, pairing with unlock, and parameter format. Could mention what happens if the section is already locked, but that's 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%, so all parameters are documented. The description adds context for playbook_id (UUID or GUID) and implies the locking mechanism, but doesn't add much beyond 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 clearly states the tool locks a section for exclusive editing, preventing other agents from modifying it. It distinguishes from siblings like patch_canvas_section (editing) and unlock_canvas_section (unlocking).

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 (for exclusive editing), when not to use (not for editing content), and pairs with patch_canvas_section. Also instructs to always unlock when finished, and specifies the playbook_id parameter format.

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

patch_canvas_sectionPatch canvas sectionA
Idempotent
Inspect

Edit a specific section of a canvas document. Parallel-safe: only the targeted section is updated. Requires canvas:write or full permission. Lock the section first in multi-agent scenarios. Use write_canvas only when replacing the whole document, and get_canvas_toc to obtain section_id. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDocument slug
run_idYesWorkflow run UUID
contentYesNew section content (markdown)
headingNoOptional: new heading text
section_idYesSection ID from get_canvas_toc
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, destructive flags), the description reveals additional behavioral traits: it is parallel-safe (only the targeted section is updated), requires canvas:write or canvas:admin permission, and explicitly mentions that playbook_id is a UUID/GUID. This provides a clear picture of the operation's side effects and safety.

Agents need to know what a tool does to the world before 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 paragraph that conveys all essential information without redundancy. It covers the purpose, usage, permissions, and parameter relationships, making it efficient and easy to read.

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 addresses the tool's purpose, concurrency safety, permissions, related tools, and key parameter acquisition (section_id). Given that there is no output schema, it covers the necessary context for an agent to correctly invoke the tool, including potential pitfalls like needing to lock the section.

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 provides descriptions for all parameters (100% coverage). The description adds value by explicitly stating that section_id should be obtained from get_canvas_toc and that playbook_id is the target playbook's UUID/GUID. This contextual guidance enhances understanding of these parameters 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 edits a specific section of a canvas document, using the verb 'edit' and specifying the resource. It also distinguishes itself from write_canvas, which replaces the whole document.

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 guidance on when to use this tool versus alternatives: use write_canvas only for full replacement, and get_canvas_toc to obtain section_id. It also advises locking the section in multi-agent scenarios, which clarifies the intended usage context.

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

promote_memoryPromote memoryAInspect

Restore a memory's visibility, promote it to a higher tier or boost its priority for active use. This tool cannot demote; use archive_memories to archive entries. Repeating the call with priority_boost increases priority again. Requires memory:write or full permission. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key to promote
playbook_idYesUUID or GUID of the target playbook
target_tierNoTarget tier (cannot demote with this tool)
priority_boostNoAmount to increase priority (0-50)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations give a low bar (non-read-only, non-destructive, non-idempotent), and the description adds real context beyond them: the explicit non-demotion constraint, the cumulative effect of repeated priority_boost calls, and the required permission (memory:write or full). It doesn't describe the response or failure modes, so not a 5.

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

Conciseness5/5

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

Four sentences, each earning its place: purpose, boundary/alternative, repeat behavior, and permission. Front-loaded with the core action and 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 four-parameter mutation tool with full schema coverage and annotations, the description covers the important extras: permission requirement, non-demotion boundary, sibling routing, and repeat semantics. Missing only return-value/error behavior, which is minor given 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?

Schema coverage is 100%, so the schema already documents all four parameters including the enum and the 0-50 range. The description reiterates playbook_id format and notes priority_boost can be repeated, but adds little parameter syntax or 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 uses specific verbs (restore visibility, promote tier, boost priority) applied to a named resource (a memory). It explicitly distinguishes itself from archive_memories and clarifies it cannot demote, so an agent can separate it from siblings despite the crowded toolset.

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 states when-not (cannot demote) and points to the alternative (use archive_memories to archive). It also explains the repeat-call behavior for priority_boost. It stops short of saying when to prefer this tool over, e.g., write_memory or read_memory, so a 4 rather than 5.

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

read_canvasRead canvas documentA
Read-onlyIdempotent
Inspect

Read a canvas document. Returns full content, sections structure, and metadata. Optionally read a specific section by ID. Read-only. Use get_canvas_toc to discover section IDs before patch_canvas_section, and list_canvas to find slugs. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDocument slug
run_idYesWorkflow run UUID
section_idNoOptional: read only this section
playbook_idYesUUID or GUID of the target playbook

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. The description adds useful behavioral context beyond the annotations: what the tool returns (full content, section structure, metadata) and the optional section-scoped read mode. It does not cover failure behavior or restrictions, but 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?

The description is three sentences, front-loaded with the core purpose, and contains no filler. Every sentence contributes either the return shape, the optional section mode, or parameter sourcing 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?

With no output schema, the description covers the return values sufficiently (full content, sections, metadata). It also explains how to obtain section IDs and slugs, which is important in a tool ecosystem with many siblings. It does not clarify run_id's role, but the schema fully describes that parameter.

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 guidance: using get_canvas_toc to discover section IDs, using list_canvas to find slugs, and passing playbook_id as UUID/GUID. These references enrich the schema descriptions and help agents source correct parameter 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 reads a canvas document, returns full content, section structure, and metadata, and supports optional section-level reads. This distinguishes it from siblings like get_canvas_toc and list_canvas, which are explicitly positioned as discovery helpers.

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—read a canvas when you need full content or a specific section—and gives guidance for using get_canvas_toc to find section IDs and list_canvas to find slugs. However, it does not explicitly state when to prefer read_canvas over these sibling tools 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.

read_memoryRead memoryAInspect

Read one memory entry by key and return its value, tags, tier, summary, and metadata. This is not a pure read: it increments access_count and updates last_accessed_at as a side effect, without changing the stored value. There is no update_memory; use write_memory to overwrite a key. Use search_memory to find keys, get_memory_context for a tiered summary, or get_memory_tree for hierarchical task graphs. Do not pass memory_type; that filter belongs to search_memory. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key to read
playbook_idYesUUID or GUID of the target playbook

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyNo
tagsNo
tierNo
valueNo
summaryNo
priorityNo
memory_atNo
parent_keyNo
updated_atNo
descriptionNo
is_archivedNo
access_countNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations mark readOnlyHint=false, idempotentHint=false, destructiveHint=false — the description adds critical context that annotates why: reads increment access_count and update last_accessed_at as a side effect without changing stored value. This is exactly the value-add beyond annotations that earns a top score.

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 read purpose, then behavioral caveat, then alternatives, then parameter guidance. Dense and every sentence carries information, though the multi-clause structure is slightly long for a 2-parameter tool.

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 the tool's complexity: annotated side-effect behavior is explained, output schema exists (value/tags/tier/summary/metadata are named), sibling routing is exhaustive, and parameter constraints are clarified. Nothing an agent needs is missing.

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

Parameters3/5

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

Schema coverage is 100% for both key and playbook_id. The description reinforces playbook_id format ('UUID or GUID') and adds exclusions (do not pass memory_type), but with full schema coverage the baseline is 3 even with no param info in 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?

States a specific verb+resource ('Read one memory entry by key and return its value, tags, tier, summary, and metadata') and explicitly differentiates from siblings search_memory, get_memory_context, get_memory_tree, and write_memory. An agent can pick it apart from 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?

Explicitly routes: 'not a pure read' side effect disclosed, 'no update_memory; use write_memory to overwrite', 'Use search_memory to find keys', and 'Do not pass memory_type; that filter belongs to search_memory'. When-to-use and when-not-to-use are both stated clearly.

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

rollback_skillRoll back skillA
DestructiveIdempotent
Inspect

Rollback a skill to a previous version recorded by list_skill_versions. The current definition is replaced and cannot be recovered except by rolling forward to another stored version. Requires full or skills:write permission. Do not use delete_skill when you only need to revert. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
version_idYesThe specific version ID from list_skill_versions to rollback to
playbook_idYesUUID or GUID of the target playbook

TDQS

A5/5.0
Behavior5/5

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

Adds important behavioral context beyond annotations: the replacement is irreversible except by rolling forward, and permission requirements are detailed. This complements the destructiveHint and idempotentHint 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, with no unnecessary fluff. It packs purpose, usage, warning, and permission into a few clear sentences, well-structured for quick comprehension.

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 role among siblings, the description provides sufficient context: what it does, what it requires, and its limitations. It covers essential aspects without needing extra details.

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?

Both parameters are well-described in the schema (version_id tied to list_skill_versions, playbook_id as UUID/GUID). The description reinforces the playbook_id usage, ensuring clear understanding.

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: rolling back a skill to a previous version. It also mentions that it replaces the current definition, which is specific and distinguishes it 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 Guidelines5/5

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

Explicitly states when to use (to revert to a previous version) and when not to (do not use delete_skill for reverting). Also specifies required permissions (full or skills:write) and provides guidance on parameter usage.

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

rotate_secretRotate secretA
DestructiveIdempotent
Inspect

Rotate an existing secret with a new value. The old value is permanently replaced and cannot be recovered. The expiry is kept unless you pass expires_at: a date sets a new one, null removes it — which is how an expired secret, refused by use_secret, becomes usable again. Requires secrets:write or full permission. Use store_secret to create a name that does not exist yet, and delete_secret to remove the secret entirely. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSecret name to rotate
valueYesNew secret value
expires_atNoNew expiry with a timezone, or null to remove it. Omit to keep the current one.
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover destructive/idempotent/readOnly, and the description adds substantial context beyond them: the old value is permanently irrecoverable, the expiry is preserved by default, null removes it, and it requires secrets:write or full permission. This is exactly the kind of destruction-and-auth detail annotations alone 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.

Conciseness4/5

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

Front-loaded with the core action and destruction warning, and each sentence carries distinct information (expiry behavior, auth, sibling routing, id format). It is dense but slightly long, with the playbook_id formatting note tacked on at the end.

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, no-output-schema mutation tool, the description covers everything an agent needs: what is destroyed, the expiry tri-state, permission requirements, and how it relates to store_secret/delete_secret/use_secret. Nothing material 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 defines all four parameters; the description goes beyond it by explaining the expires_at tri-state semantics (date sets, null removes, omit keeps) and clarifying playbook_id expects a UUID or GUID. Minor because the schema largely duplicates this.

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 ('Rotate an existing secret with a new value') and explicitly contrasts the scope against siblings by naming store_secret (create new) and delete_secret (remove). An agent can distinguish this from the other secret tools without opening any schema.

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

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 store_secret to create a name that does not exist yet, and delete_secret to remove the secret entirely.' It also explains the intended remediation flow (an expired secret refused by use_secret becomes usable again via expires_at: null).

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

search_memorySearch memoryA
Read-onlyIdempotent
Inspect

Search memory keys, JSON values, descriptions and summaries. Defaults to current, non-archived memories. scope='archived' searches archived entries and previous versions; scope='all' searches both. Results include memory_at and history_id (null for current entries). Use get_memory_history for one key's previous versions, or read_memory for its current value. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by tags (any match)
tierNoFilter by memory tier
afterNoInclusive lower bound on memory_at
limitNoPage size
scopeNoactive: current; archived: archived and previous versions; all: bothactive
beforeNoInclusive upper bound on memory_at
offsetNoResults to skip, for paging
searchNoLiteral text in keys, JSON values, descriptions and summaries
statusNoFilter by task status (hierarchical only)
memory_typeNoFilter by memory type
playbook_idYesUUID or GUID of the target playbook
include_childrenNoInclude child memories in results

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, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: the default scope filter, the fact that archived scope surfaces previous versions, and that results carry memory_at and a history_id that is null for current entries. It stops short of describing result ordering or paging behavior, so it is not a 5.

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

Conciseness5/5

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

Four dense sentences, zero filler, and the most decision-relevant facts (what is searched, default scope, scope variants) are front-loaded ahead of the sibling routing and the playbook_id note.

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 12-parameter, no-output-schema search tool, the description covers the discriminating behavior (scope semantics, result fields, alternative tools) well. It omits result ordering and how search matching is done (the schema says 'literal text'), which are minor gaps rather than blockers 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 all 12 parameters are already documented, including the scope enum and playbook_id. The description's prose about scope and playbook_id restates rather than extends the schema; the extra return-field note (memory_at, history_id) is output information, not parameter semantics. Baseline 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 opens with a specific verb and the exact fields searched ('keys, JSON values, descriptions and summaries'), and its scope semantics ('archived searches archived entries and previous versions') clearly separate it from siblings like get_memory_history and read_memory. An agent can distinguish it from the other memory tools without opening a schema.

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

Usage Guidelines5/5

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

It states the default behavior ('Defaults to current, non-archived memories'), defines what each scope value does, and routes the agent to explicit alternatives with the condition that selects them: get_memory_history for one key's prior versions, read_memory for its current value. That is the full when/when-not/alternatives triad.

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

store_secretStore secretAInspect

Store a new encrypted secret. The value is encrypted with AES-256-GCM using a per-user derived key and never stored or returned in plaintext. Requires secrets:write or full permission. Use rotate_secret to replace an existing value and list_secrets to confirm the name. Do not use this to send an authenticated request; use use_secret. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSecret name (letters, numbers, hyphens, underscores)
valueYesThe secret value to encrypt and store
categoryNoSecret type (default: general)
expires_atNoISO 8601 expiration date (optional)
descriptionNoWhat this secret is used for
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.5/5.0
Behavior4/5

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

The description goes beyond the annotations by disclosing the encryption algorithm (AES-256-GCM), that the value is never stored or returned in plaintext, and the permission requirement. It does not detail duplicate-name behavior or return values, but the annotations and schema already set a clear safety 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 front-loaded and every sentence adds distinct value: purpose, encryption behavior, permissions, sibling tool guidance, and parameter targeting. 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.

Completeness5/5

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

For a create-style tool with no output schema and generic annotations, the description is thorough enough for correct selection and invocation. It covers security, permissions, alternatives, and the required targeting parameter, leaving no critical operational 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 covers all six parameters with descriptions, so the baseline is 3. The description adds the explicit instruction to pass playbook_id as the target UUID/GUID, but this largely repeats the schema's existing parameter description and does not materially enrich 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 states a specific action ('Store a new encrypted secret') with the resource and key security property. It distinguishes itself from sibling tools by explicitly referencing rotate_secret, list_secrets, and use_secret for adjacent operations.

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 when-to-use and when-not-to-use guidance: use rotate_secret for replacing an existing value, list_secrets to confirm names, and use_secret for authenticated requests. It also states the required permission level (secrets:write or full permission).

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

unlock_canvas_sectionUnlock canvas sectionA
Idempotent
Inspect

Unlock a previously locked canvas section so other agents can edit it. Requires canvas:write or full permission. Use lock_canvas_section to take the lock; this tool does not change section content. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDocument slug
run_idYesWorkflow run UUID
section_idYesSection ID to unlock
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already provide idempotent, destructive, and read-only hints. The description adds valuable transparency by stating it 'does not change section content' and clarifying permission needs, offering a clear behavioral contract 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 concise, consisting of three tightly written sentences without redundancy. It efficiently conveys purpose, usage, and a key distinction, maintaining excellent structure and focus.

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 a clear schema and annotations, the description covers the essential context: action, effect, permission, and relationship to lock. It does not detail error conditions or return values, but those are not expected here, so it remains largely 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?

The input schema describes all four parameters (slug, run_id, section_id, playbook_id) with concise explanations. The description adds minimal extra detail (e.g., reiterating the playbook_id type), so the schema bears most of the semantic weight, yielding a 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 clearly states the tool's function: 'Unlock a previously locked canvas section so other agents can edit it.' It also differentiates from siblings by noting it does not change section content and referencing lock_canvas_section, 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 provides explicit usage context: it explains when to use (to unlock a locked section) and mentions permission requirements ('Requires canvas:write or full permission'). It also directs users to lock_canvas_section for locking, effectively contrasting with alternatives.

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

update_mcp_serverUpdate MCP serverA
Idempotent
Inspect

Update a connected MCP or OpenAPI server's stored name, description, tools, resources, or transport. Requires playbooks:write or full permission. Use call_connected_tool to invoke a tool, and delete_mcp_server to disconnect. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew display name
toolsNoUpdated tool definitions
resourcesNoUpdated resource definitions
server_idYesConnected server UUID
descriptionNoNew description
playbook_idYesUUID or GUID of the target playbook
transport_typeNoConnection type
transport_configNoUpdated transport-specific configuration

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description goes beyond these by clarifying that this updates 'stored' server configuration and requires a specific permission scope. It does not detail partial-update or overwrite behavior, but the annotation coverage plus the 'stored' framing make the tool's core behavior clear.

Agents need to know what a tool does to the world before 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 four short sentences, front-loaded with the core purpose, then permission, alternatives, and target playbook context. Every sentence earns its place and supports either invocation or selection.

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 8 parameters, no output schema, and appropriate annotations, the description provides sufficient selection criteria, permissions, and payload scope. It does not cover update semantics such as whether partial fields replace or merge, or how nested arrays should be formatted, but these are partially inferable from the schema and do not prevent correct high-level 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 input schema covers all 8 parameters with 100% description coverage, so the baseline is 3. The main description does not add much parameter-level detail beyond mapping broad categories like 'name, description, tools, resources, or transport' to the schema, and noting that playbook_id should be the target playbook. This is accurate but redundant with 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 and resource: 'Update a connected MCP or OpenAPI server's stored name, description, tools, resources, or transport.' It clearly identifies which mutable fields are involved and distinguishes the tool from related server actions by naming call_connected_tool and delete_mcp_server.

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 when-to-use guidance: updating server metadata versus invoking tools via call_connected_tool versus disconnecting via delete_mcp_server. It also states a clear permission precondition: 'Requires playbooks:write or full permission,' and tells the agent to pass a playbook_id.

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

update_personaUpdate personaA
Idempotent
Inspect

Update the singleton persona's name, system prompt, or metadata without resetting to defaults. persona_id must equal playbook_id because the persona is stored on the playbook row. Requires personas:write or full permission. Use create_persona to replace name and system prompt together, delete_persona to reset to the default Assistant, and update_playbook when changing playbook-level fields as well.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name
metadataNoNew metadata
persona_idYesMust equal playbook_id; the persona is a singleton stored on the playbook
playbook_idYesUUID of the playbook
system_promptNoNew system prompt

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, which the description aligns with by noting 'without resetting to defaults'. The description adds permission requirements (personas:write or full permission) and the singleton storage constraint, but does not elaborate on the exact update behavior (e.g., partial vs atomic updates) beyond what is implied. No contradictions, and with annotations present, the added context is useful but not exhaustive.

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

Conciseness4/5

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

The description is concise, two sentences, and front-loaded with the primary purpose. The second sentence packs essential guidance about alternatives. No wasted words, though it packs many ideas into a single sentence which could be slightly clearer, but overall efficient.

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 (no output schema, moderate parameter count), the description covers the essential aspects: purpose, key constraint, permissions, and alternatives. It lacks a note about possible validation errors or partial update semantics, but for this complexity level, it is fairly complete. The presence of nested objects (metadata) is not discussed, but the schema already covers that.

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 parameters are well documented in the schema. The description reinforces the persona_id=playbook_id constraint and the scope of updatable fields (name, system_prompt, metadata). It adds the alternative tool usage for replacing name and system_prompt together, which helps agents understand the parameter interplay, going slightly 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 updates a singleton persona's name, system prompt, or metadata without resetting defaults. It includes the critical constraint that persona_id must equal playbook_id, and distinguishes it from related tools like create_persona, delete_persona, and update_playbook, making its 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 Guidelines5/5

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

The description explicitly provides when to use the tool (update persona fields) and when not to, recommending create_persona when replacing both name and system prompt, delete_persona for resetting to default, and update_playbook when also changing playbook-level fields. This gives clear decision guidance relative to siblings.

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

update_playbookUpdate playbookA
DestructiveIdempotent
Inspect

Update this playbook's name, description, visibility, tags, config, singleton persona fields, or always-on project instructions. Replacement fields overwrite previous values. Handle with extreme care. Requires full or playbooks:write permission. Changing persona_system_prompt here overlaps with update_persona and create_persona; use those when only the persona should change. There is no separate get_persona: read the persona via get_playbook. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew playbook name
tagsNoReplacement discovery tags
configNoReplacement playbook configuration
visibilityNoNew visibility
descriptionNoNew playbook description
playbook_idYesUUID or GUID of the target playbook
instructionsNoNew always-on project instructions (the AGENTS.md / CLAUDE.md content). Kept separate from the persona: the persona is who the agent is, these are the rules of this project.
persona_nameNoNew persona name
persona_metadataNoNew metadata JSON
persona_system_promptNoNew core system instructions

TDQS

A4.9/5.0
Behavior5/5

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

The description clearly discloses the destructive/overwrite behavior: 'Replacement fields overwrite previous values.' It adds permission requirements and the persona overlap warning, which go beyond what annotations already signal. There is no contradiction with the provided readOnlyHint=false and destructiveHint=true 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 efficiently front-loaded with the core purpose, followed by warnings, permissions, alternatives, and ID format. Every sentence earns its place despite the tool having 10 parameters and a destructive nature.

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, destructive update tool with no output schema, this description is exceptionally complete. It covers purpose, overlap with siblings, permission requirements, overwrite semantics, and target ID format. The agent has all necessary context to select and safely invoke the 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?

The schema has 100% parameter coverage, giving the baseline of 3. The description adds valuable semantics beyond the schema by explaining that fields are replacements, specifying playbook_id must be UUID or GUID, and clarifying the distinction between instructions and persona fields. This meaningfully helps an agent pass parameters correctly.

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 precise verb and resource ('Update this playbook's name, description, visibility, tags, config, singleton persona fields, or always-on project instructions'), which makes the tool's scope immediately clear. It also differentiates this from sibling tools by explicitly noting overlap with update_persona and create_persona.

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: 'use those when only the persona should change.' It also clarifies how to read persona data via get_playbook, which prevents misuse. The permission requirement ('Requires full or playbooks:write permission') and caution ('Handle with extreme care') add practical usage context.

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

update_runUpdate runA
Idempotent
Inspect

Update a workflow run's name, status, or context. Requires canvas:write or full permission. Use list_runs to find run_id (there is no get_run) and delete_run to remove the run and its canvas artifacts. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew run name
run_idYesWorkflow run UUID
statusNoNew run status
contextNoReplacement execution context
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds useful context: permission requirement, the fact that there is no get_run, and that delete_run removes the run and canvas artifacts. It does not contradict annotations, and adds value by warning about the missing get_run and articulating the permission boundary.

Agents need to know what a tool does to the world before 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 necessary information: purpose, permission, lookup guidance, and playbook_id format. No fluff, well front-loaded with the main action. Ideal conciseness for a tool with 5 parameters.

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?

Covers permissions, lookup workflow, and distinguishes from delete. The schema handles parameter details (enum, objects), and the description provides the operational context. It doesn't explain return values, but no output schema exists, so that's acceptable. Given the tool's complexity, this is complete enough.

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 100% schema coverage, the baseline is 3, but the description adds extra hints: how to obtain run_id via list_runs, and that playbook_id should be UUID or GUID. This goes beyond the schema's basic descriptions and aids correct parameter usage.

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 it updates a run's name, status, or context, with a specific verb and resource. It distinguishes from siblings by mentioning list_runs and delete_run as related, but also identifies what this tool does not do (no get_run).

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 prerequisites (canvas:write or full permission) and workflow context (use list_runs to find run_id, delete_run for removal). It does not explicitly say 'use this instead of X', but it gives clear context for when and how to use, and mentions alternatives for related actions.

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

update_skillUpdate skillA
Idempotent
Inspect

Update an existing skill in this playbook. Requires full or skills:write permission; with skills:propose the change is saved as a proposal (status pending_review) and the skill stays unchanged until it is approved. Use create_skill to add a skill, list_skill_versions before a risky edit, and rollback_skill to restore a previous version. Do not use this to delete a skill. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name
contentNoNew SKILL.md document, frontmatter included. A demonstrations block in the frontmatter is validated the same way create_skill validates it.
priorityNoNew priority level
skill_idYesID or name of the skill to update
descriptionNoNew description
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (which only say readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses auth requirements and a branching behavioral mode: with skills:write the skill is modified, with skills:propose the change is stored as a pending_review proposal and the skill stays unchanged until approved. That is exactly the kind of consequence an agent 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.

Conciseness4/5

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

Front-loaded with the core action and efficiently packs permissions, alternatives, and exclusions. The final sentence restating that playbook_id is a UUID/GUID duplicates the schema and is the one non-earning line.

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, it covers the safety-relevant behavior (permission modes, proposal workflow, sibling routing). It stops short of stating what happens to fields omitted from the call or how validation failures on the content/frontmatter block are surfaced, but the essential invocation picture 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 all six parameters. The description's line about playbook_id being a UUID/GUID largely repeats the schema text and adds no new syntax or format guidance, 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 opening sentence names a specific verb (update) and resource (an existing skill in this playbook), and the following sentences explicitly separate this tool from create_skill, delete_skill, and rollback_skill. An agent can distinguish what this does and does not do 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 Guidelines5/5

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

Explicit routing: use create_skill to add, list_skill_versions before a risky edit, rollback_skill to restore, and a hard exclusion ('Do not use this to delete a skill'). It also states the permission-dependent mode of operation, so the caller knows the preconditions before invoking.

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

update_task_statusUpdate task statusA
Idempotent
Inspect

Update the status of a task node in a hierarchical plan. When all children of a parent are completed, the parent is auto-updated. Returns the current subtree state. Requires memory:write or full permission. Use create_task_graph to build the plan, not this tool. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesTask memory key to update
resultNoTask result data to store in value
statusYesNew status
summaryNoUpdated summary with results
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.5/5.0
Behavior5/5

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

Even with the `idempotentHint` annotation (which is true), the description adds valuable behavioral context: it explains the side effect on parent nodes ('the parent is auto-updated') and what the tool returns ('Returns the current subtree state'). It also mentions the required permission ('Requires memory:write or full permission'), which is beyond what the annotations provide. The `idempotentHint` is consistent with the update semantics.

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?

Four sentences, each carrying weight. The first sentence states the primary purpose, the second covers side effects, the third mentions permissions, and the fourth and fifth give usage direction and parameter format. Only minor redundancy (the UUID/GUID note could arguably be in the schema), but overall tight and well-structured.

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 moderate complexity (5 params, no output schema, annotations present), the description covers the essential side effects and permission requirements. It doesn't explicitly state what the return value looks like beyond 'the current subtree state', but the description's mention of that return is sufficient for an agent to understand the nature of the operation. It could mention error cases, but that's likely beyond scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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% description coverage for all 5 parameters, so the baseline is 3. The description doesn't add extra parameter-level semantics beyond what's already in the schema, but it does provide general context about `playbook_id` format and the tool's purpose. Since the schema handles the parameter documentation well, this 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's purpose: 'Update the status of a task node in a hierarchical plan.' It uses a specific verb ('update') and resource ('task status in a hierarchical plan'), and adds crucial context about auto-updating parents. This effectively distinguishes it from similar update tools like `update_playbook` or `update_run`.

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 when to use this tool ('Use create_task_graph to build the plan, not this tool'), which directly addresses the sibling tool `create_task_graph`. It also instructs on the required parameter format ('Pass playbook_id as the UUID or GUID'), making it exceptionally clear when and how to use it. The note about the alternative tool is a model example of usage guidelines.

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

use_secretRead through a secretA
Read-onlyIdempotent
Inspect

Send a GET or HEAD request with a secret injected as a header, and return the response. The secret value is never returned to the agent — it is decrypted and used server-side only. Reads the remote API; it cannot change anything there, because only safe methods are accepted. The URL is chosen by the caller, so the target is whichever API the secret belongs to — see that API's own documentation for paths. Requires secrets:read or full permission. Example: use_secret({secret_name: 'OPENAI_API_KEY', url: 'https://api.openai.com/v1/models'}) sends GET with 'Authorization: Bearer '. Use list_secrets to discover names, use_secret_write to send POST/PUT/PATCH/DELETE, and store_secret or rotate_secret to change a stored value. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to send the HTTP request to
methodNoHTTP method (default: GET). For POST/PUT/PATCH/DELETE use use_secret_write.
timeout_msNoRequest timeout in milliseconds (default: 30000, max: 60000)
header_nameNoHeader name to inject the secret into (default: Authorization)
playbook_idYesUUID or GUID of the target playbook
secret_nameYesName of the secret to use (e.g. OPENAI_API_KEY)
extra_headersNoAdditional headers (e.g. {"Accept": "application/json"})
header_prefixNoPrefix before the secret value (default: 'Bearer '). Use empty string for raw value.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, it discloses that the secret is never returned to the agent, is decrypted and used server-side only, and that only safe methods are accepted. It also notes permission requirements and that the caller chooses the URL, which adds meaningful behavioral context 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?

The description is front-loaded with the core action, then adds permissions, an example, sibling alternatives, and the playbook_id note. It is information-dense with no filler; every sentence contributes to correct selection and invocation.

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 8 parameters, nested objects, no output schema, and remote-API variability, the description is sufficiently complete. It covers the main mechanics, security behavior, permissions, example usage, and sibling differentiation; the remaining parameter details are already handled by the input 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 coverage is already 100%, so the baseline is 3; the description adds value by explaining how secret injection works, showing an example with Authorization: Bearer <key>, and clarifying that method is limited to safe GET/HEAD. This goes beyond the schema without needing to repeat all parameter details.

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 sends GET or HEAD requests with a secret injected as a header and returns the response. It also distinguishes the tool from its sibling use_secret_write by explicitly limiting methods to GET/HEAD.

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 list_secrets to discover names, use_secret_write for POST/PUT/PATCH/DELETE, and store_secret or rotate_secret to change values. It also states the required permission (secrets:read or full permission), making invocation context clear.

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

use_secret_writeWrite through a secretA
Destructive
Inspect

Send a POST, PUT, PATCH or DELETE request with a secret injected as a header, and return the response. The secret value is never returned to the agent — it is decrypted and used server-side only. This changes state in the remote API and cannot be undone from here. The URL is chosen by the caller, so the target is whichever API the secret belongs to — see that API's own documentation for paths and payloads. Requires secrets:read or full permission. Use use_secret for GET and HEAD, list_secrets to discover names, and store_secret or rotate_secret to change a stored value rather than send a request. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to send the HTTP request to
bodyNoJSON request body (for POST/PUT/PATCH)
methodNoHTTP method (default: POST). For GET/HEAD use use_secret.
timeout_msNoRequest timeout in milliseconds (default: 30000, max: 60000)
header_nameNoHeader name to inject the secret into (default: Authorization)
playbook_idYesUUID or GUID of the target playbook
secret_nameYesName of the secret to use (e.g. DEPLOY_API_KEY)
extra_headersNoAdditional headers (e.g. {"Content-Type": "application/json"})
header_prefixNoPrefix before the secret value (default: 'Bearer '). Use empty string for raw value.

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses that the secret is never returned to the agent, is decrypted server-side, changes state, and cannot be undone. While annotations already indicate destructiveHint=true and readOnlyHint=false, the description adds crucial security context (secret not leaked) and irreversibility.

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 well-structured with a clear first sentence, followed by behavioral warnings and usage alternatives. It is slightly long but every sentence adds value, and it front-loads the core purpose.

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 9 parameters, 100% schema coverage, and no output schema, the description sufficiently covers the tool's behavior and safety. It doesn't explain return format but that's not required without an output schema. The complexity is high, but the description handles it well.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 a few nuances (header injection, prefix defaults, method default) but mostly repeats schema info. It doesn't explain the semantics of extra_headers or body beyond what's 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 clearly states the tool sends POST, PUT, PATCH, or DELETE requests with a secret injected as a header, distinguishing it from use_secret (GET/HEAD). It also clarifies the purpose is to perform state-changing operations on remote APIs.

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 when-to-use (state changes) and when-not-to-use (use use_secret for GET/HEAD, list_secrets for discovery, store_secret/rotate_secret for changes). Also notes the caller chooses the URL and should refer to the target API's documentation.

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

write_canvasWrite canvas documentA
DestructiveIdempotent
Inspect

Create or fully replace a canvas document. Markdown headings are auto-parsed into sections for parallel editing. A replace overwrites prior content and cannot be undone. Requires canvas:write or full permission. Use patch_canvas_section for partial updates and lock_canvas_section before multi-agent edits. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDocument title
slugYesURL-friendly document identifier
run_idYesWorkflow run UUID
contentYesFull markdown content
metadataNoCustom document metadata
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description reinforces this by stating 'A replace overwrites prior content and cannot be undone.' It adds unique context about auto-parsing markdown headings into sections and the permission requirement, which goes 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 concise (two sentences) and front-loaded with the core purpose, followed by key usage notes and alternatives. Every clause provides value 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 write operation with full schema coverage, the description covers purpose, usage context, destructive behavior, and prerequisites. The lack of an output schema is fine, and the description sufficiently explains the tool's role in the canvas workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 documented. The description adds minimal extra semantics, primarily noting that playbook_id is a UUID/GUID, which duplicates the schema. No additional parameter guidance is provided beyond what the schema already offers.

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: 'Create or fully replace a canvas document.' It uses specific verbs (create/replace) and a specific resource (canvas document), and distinguishes itself by explicitly mentioning patch_canvas_section for partial updates.

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?

Explicit guidance is given: 'Use patch_canvas_section for partial updates and lock_canvas_section before multi-agent edits.' It also mentions permission requirements (requires canvas:write or full permission), which helps the agent decide when to call this tool.

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

write_memoryWrite memoryA
DestructiveIdempotent
Inspect

Create or update a memory by key; previous contents are saved automatically and readable with get_memory_history. memory_at is optional and defaults to this save's time; supply an ISO timestamp to preserve an earlier time. is_archived=true hides the entry from normal search/context; false restores it. Tier controls context priority independently of archiving. Requires memory:write or full permission; with memory:propose the write is saved as a proposal (status pending_review) that changes nothing until the owner or an editor approves it. Pass playbook_id as the UUID or GUID of the playbook this call should target.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key
tagsNoTags for categorization
tierNoMemory tier (default: contextual)
valueYesJSON value to store
statusNoTask status (for hierarchical task tracking)
summaryNoCompact summary for context views
metadataNoFree-form metadata: dependencies, thread assignment, progress. Two keys have a defined shape and are validated: metadata.episode as {location, task, outcome} makes the entry findable by where through get_memory_context, while when it happened is memory_at; and metadata.recording holds demonstration references in the same shape a skill uses, as a list of {provider, ref, fidelity, role, segments}. Everything else is stored untouched.
priorityNoPriority 1-100 (default: 50)
memory_atNoMemory time including timezone; defaults to save time
parent_keyNoParent memory key for hierarchical organization
descriptionNoHuman-readable description
is_archivedNoHide from normal search; false restores an archived entry
memory_typeNoflat (default) or hierarchical for task graphs
playbook_idYesUUID or GUID of the target playbook

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare the write/idempotent/destructive profile, and the description adds substantial context beyond them: automatic versioning readable via get_memory_history, the memory:write vs memory:propose permission model, and that a proposal stays pending_review and changes nothing until approved. This is exactly the extra behavioral detail an agent needs for a mutating tool.

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 verb+resource and versioning behavior, then param and permission details. Mostly every sentence earns its place, though the is_archived clause largely repeats the schema description and the final playbook_id sentence restates the schema's UUID/GUID wording.

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?

Covers the complex parts well for a 14-param tool: auth/permission model, versioning, proposal workflow, and archiving. With no output schema, it stops short of saying what the call returns (e.g., the stored key or entry), which is the remaining gap.

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 meaning: memory_at defaults to save time and accepts an ISO timestamp to backdate, is_archived toggles visibility, and tier controls context priority independently of archiving. These clarify interactions between parameters rather than restating schema text.

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 ('Create or update a memory by key') and immediately distinguishes it from the read side by naming get_memory_history for version history. An agent can tell it apart from read_memory, delete_memory, and archive_memories 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?

Gives clear conditional context: is_archived for hiding/restoring, memory:propose for proposal-mode writes, and playbook_id for targeting. However it never explicitly routes between the sibling mutation tools (archive_memories, promote_memory, consolidate_memories), leaving that comparison to inference.

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. 50 tool updatesv0.1.0
    • First observedarchive_memories
    • First observedcall_connected_tool
    • First observedconsolidate_memories
    • First observedcreate_mcp_server
    • First observedcreate_persona
    • First observedcreate_playbook
    • First observedcreate_run
    • First observedcreate_skill
    • First observedcreate_task_graph
    • First observeddelete_mcp_server
    • First observeddelete_memory
    • First observeddelete_persona
    • First observeddelete_playbook
    • First observeddelete_run
    • First observeddelete_secret
    • First observeddelete_skill
    • First observedfind_tools
    • First observedget_canvas_toc
    • First observedget_memory_context
    • First observedget_memory_history
    • First observedget_memory_tree
    • First observedget_playbook
    • First observedget_skill
    • First observedlist_canvas
    • First observedlist_mcp_servers
    • First observedlist_playbooks
    • First observedlist_runs
    • First observedlist_secrets
    • First observedlist_skill_versions
    • First observedlist_skills
    • First observedlock_canvas_section
    • First observedpatch_canvas_section
    • First observedpromote_memory
    • First observedread_canvas
    • First observedread_memory
    • First observedrollback_skill
    • First observedrotate_secret
    • First observedsearch_memory
    • First observedstore_secret
    • First observedunlock_canvas_section
    • First observedupdate_mcp_server
    • First observedupdate_persona
    • First observedupdate_playbook
    • First observedupdate_run
    • First observedupdate_skill
    • First observedupdate_task_status
    • First observeduse_secret
    • First observeduse_secret_write
    • First observedwrite_canvas
    • First observedwrite_memory

TDQS

A4.1/5.0

Scored across 50 tools

Disambiguation4/5

Tools are mostly distinct, and descriptions explicitly cross-reference alternatives (e.g., read_memory vs get_memory_context vs get_memory_tree; use_secret vs use_secret_write). However, persona and playbook-persona operations overlap (create_persona/update_persona/update_playbook persona fields), and memory has many similar retrieval tools, so some misselection risk remains.

Naming Consistency5/5

All tool names use snake_case, predominantly verb_noun (create_playbook, list_skills, get_memory_tree). A few names deviate semantically (use_secret, call_connected_tool, find_tools), but the casing and structural pattern are consistent throughout.

Tool Count2/5

50 tools is very heavy for a single MCP server, even accounting for its broad scope (playbooks, personas, skills, canvas, runs, memory, secrets, MCP servers). While each sub-domain justifies some tools, the total exceeds the comfortable range and risks overwhelming agents.

Completeness4/5

Coverage is extensive: playbooks, personas, skills, canvas, runs, memory, secrets, and connected servers all have lifecycle operations. Minor gaps exist (no get_run, no get_mcp_server, no delete_canvas), but they are either deliberate or documented workarounds, so core workflows are complete.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    A
    maintenance
    Self-hosted, source-available AI workflow automation platform. Build multi-agent, RAG, and tool-using pipelines on a visual canvas and publish any workflow as an MCP server (stdio/SSE/Streamable HTTP). Also an MCP client via the agent node.
    2
    1,221
    -
  • A
    license
    A
    quality
    C
    maintenance
    Universal MCP knowledge server for LLM agents, powered by local RAG, providing domain-specific best practices and playbooks across software engineering, marketing, video editing, and other knowledge areas.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A self-hosted MCP server that provides any LLM with a graph-backed memory layer of your life—tasks, email, finance, contacts, calendar—plus autonomous agent offices that act on your behalf.
    3
    Apache 2.0