seashell
SeaShell is an MCP server that lets Claude run and manage terminal workflows, control Wave Terminal, and coordinate user/Claude inbox messages across projects.
Execute, preview, stream, pipeline, and retrieve output from terminal commands, with visible or silent Wave execution.
Save/run command templates and list recent command history.
Capture/diff environment snapshots and manage workspace profiles.
Open, reuse, list, and clean up named terminal sessions/tabs.
Watch files for changes and run commands on updates.
Run SSH commands and save/list/delete SSH profiles.
Check command interactivity/safety and run self-checks.
Use macOS clipboard and notification preferences.
Read/update Wave settings, widgets, AI presets, themes, appearance, and backgrounds.
List/create/delete Wave blocks/workspaces and run commands, view files, or edit files in Wave blocks.
List/set/get/delete Wave secrets with explicit approval and reason gating.
Read user inbox, check unread counts, browse history, reply to blocking asks, and review sent replies.
Read recent Claude Code session transcripts without resuming them.
Bootstrap Wave workspaces and add convenience Fish widget.
SeaShell
Resume last night's Claude Code session from any terminal, by name.
An MCP server + shell toolkit that bridges Wave Terminal, Claude Desktop, and Claude Code — turning multi-tab terminal work into seamless AI-collaborative coding.
Quick start · Installation · Commands · Limitations · FAQ
Built for macOS. The full SeaShell experience needs macOS with Wave Terminal and Claude Desktop / Claude Code. It also builds and runs on Linux as a plain stdio MCP server, which is how registries such as Glama run it: the root
Dockerfilebuilds it on the official Swift image, and the server lists all of its tools. Tools that rely on macOS (for example the clipboard and file-watching tools) answer "This tool needs macOS" there. Windows is not supported.
Linux / container
docker build -t seashell .
docker run --rm -i seashellThe container speaks MCP over stdin/stdout and needs no network or credentials.
Quick start
# 1. Clone and build
git clone https://github.com/M-Pineapple/seashell ~/Github/seashell
cd ~/Github/seashell && ./build.sh
# 2. Connect Claude and install `hey`
# Register the MCP server (Desktop config and/or `claude mcp add`. See Installation.)
cd examples/wave-config && ./install.sh
claude auth login
# 3. Resume a session
hey continue with <some-project>Hooks, the optional daemon, and hey what's the latest in <project>? are in Installation.
Related MCP server: claude-sessions-mcp
What it is
SeaShell is a Model Context Protocol server (Swift) plus a small set of shell commands that together give you three things:
Cross-terminal asynchronous messages. Leave a note for Claude from any Wave Terminal block; pick up the answer in another.
seashell-msg,seashell-ask.Resume any Claude Code session by name. Walk away from a deep coding session in Claude Desktop's Code mode last night, open Wave this morning, type
hey continue with <project>— same conversation, same memory.hey,seashell-sessions.Optional autonomous responses via a daemon. Without you ever touching a chat, a small daemon spawns
claude -pin the right project directory and answers your inbox. Uses your Claude subscription — no API key.
All three compose. You can mix-and-match.
✨ Marquee feature: hey continue with <project>
$ hey continue with myapp
🔄 Resuming session a1b2c3d4 (project: myapp)...
> What's the latest update on the auth refactor?
We finished extracting the AuthService. Tests pass. Next is wiring it
into the API layer — I have a draft in routes/auth.py on line 142.
Want me to walk through it?That's a fresh terminal. Same conversation history as last night's Claude Desktop Code-mode session. Full project memory. Fuzzy matching — hey continue with ma works too.
Each project has a pinned primary session at <project>/.seashell-inbox/primary-session.txt, so hey continue with <project> always lands you in the same conversation — even if you've spawned multiple parallel sessions for the same repo. The pin is set automatically the first time you seashell-init (largest existing session wins) or on the first claude startup in that directory. Re-pin any session anytime with seashell-sessions promote <id>.
Installation
1. Install Wave Terminal
Download Wave Terminal and launch it once.
2. Install Claude Desktop and/or Claude Code CLI
You'll want at least one of:
Claude Desktop — the GUI app from claude.ai/download. Use this for general chat. The "Code" mode here persists sessions to disk and IS resumable from SeaShell.
Claude Code CLI — install via npm:
npm install -g @anthropic-ai/claude-code. This is whathey continue withactually invokes (viaclaude --resume <id>).
Most users want both.
3. Build SeaShell
git clone https://github.com/M-Pineapple/seashell ~/Github/seashell
cd ~/Github/seashell
./build.shbuild.sh produces .build/release/seashell (~16 MB).
4. Register the MCP server with Claude
You need to register SeaShell with whichever Claude clients you use. They're separate registrations.
a) Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"seashell": {
"command": "/absolute/path/to/seashell/.build/release/seashell",
"args": ["--port", "9876"]
}
}
}Restart Claude Desktop. The 60+ SeaShell tools appear in the available-tools list.
b) Claude Code CLI
claude mcp add --scope user seashell \
/absolute/path/to/seashell/.build/release/seashell -- --port 9879The different port (9879) avoids a clash if you run both Desktop and CLI invocations in parallel. --scope user means the registration is global — visible from any directory.
5. Sign in to your Claude subscription
claude auth loginThis opens a browser for OAuth into your Claude.ai account. No API key needed — claude -p (and the optional daemon) draws from your Pro/Max subscription via this auth.
6. (Optional but recommended) Install the example bundle
cd ~/Github/seashell/examples/wave-config
./install.shThis snapshots your existing fish + Wave configs to ~/.seashell-backups/<timestamp>/, then installs:
~/.local/bin/seashell-msg,seashell-ask,seashell-init~/.local/bin/hey,seashell-sessions,seashell-setup-hooks~/.local/bin/seashell-session-start,seashell-post-tool-use(Claude Code hooks)~/.config/fish/(a working fish config with NL routing, atuin, fastfetch, theme-sync)~/.config/fastfetch/config.jsonc~/Library/LaunchAgents/dev.seashell.theme-sync.plist(auto light/dark for Wave)
7. (Optional) Wire the Claude Code hooks
seashell-setup-hooksAdds two entries to ~/.claude/settings.json:
SessionStart hook — registers each interactive
claudeREPL in~/.seashell/sessions/<id>.jsonwith project label and Wave block IDPostToolUse hook — appends every tool call to
~/.seashell/sessions/<id>/activity.logand updates a "current file" pointer when Claude does Edit/Write
The hooks only fire for interactive TTY sessions (a real claude REPL inside a Wave block). They do NOT fire for claude -p invocations. SeaShell's seashell-sessions command works regardless because it falls back to scanning ~/.claude/projects/.
8. (Optional) Install the autonomous daemon
cd ~/Github/seashell/examples/seashell-daemon
./install.shThe daemon polls every project's inbox every 5 seconds. When something lands, it spawns claude -p from that project's directory to read and respond. Uses your Claude subscription via the CLI auth from step 5.
See examples/seashell-daemon/README.md for details.
Commands you'll use every day
hey — natural-language entry point
hey continue with myapp # resume project's latest session
hey resume ma # fuzzy match (initials work)
hey let's work on the seashell project # natural language continuation
hey what's the next thing on the refactor? # routes to inbox (waits for reply)
swift build 2>&1 | hey "fix these errors" # pipe + askIf the first words look like a session-resume intent (continue, resume, let's work on, go back to, pick up), hey runs claude --resume <id>. Otherwise it falls through to seashell-ask.
seashell-sessions — see your Claude Code sessions
seashell-sessions # list everything
seashell-sessions latest <name> # print the most recent session id matching <name>
seashell-sessions primary <name> # print the project's pinned primary session id
# (falls back to latest if none pinned)
seashell-sessions promote # pin most-recent session as primary for $PWD
seashell-sessions promote <id> # pin a specific session (project inferred from its cwd)
seashell-sessions show <id> # full metadata for one session
seashell-sessions resolve <name> # fuzzy-match and print the best idReads from THREE sources:
~/.seashell/sessions/— hook-registered sessions (★ marker inlist)~/.claude/projects/<encoded-cwd>/<id>.jsonl— filesystem-discovered (every session, every project)~/Library/Application Support/Claude/claude-code-sessions/<account>/<bridge>/local_*.json— Claude Desktop's session wrappers, which contribute Desktop's user-friendly titles and archived flag
This three-source read means fuzzy matching works against Desktop titles too: hey continue with the current trader pro will find a session titled Current Trader Pro Development Session in Desktop, even if its on-disk cwd basename (e.g. Github) wouldn't match. Archived sessions get an A marker in list and are excluded from fuzzy matching by default — so a long-archived experiment can't be resurrected by accident.
The pinned primary session lives at <project>/.seashell-inbox/primary-session.txt and is what hey continue with <project> resumes.
seashell-msg — leave Claude a note
seashell-msg "compare the test output to what we discussed"
swift build 2>&1 | seashell-msg "fix these errors"
seashell-msg --file /tmp/build.log "investigate this"
seashell-msg --global "skip cwd routing"Auto-routes to the nearest .seashell-inbox/ ancestor; falls back to ~/.seashell/inbox.jsonl.
seashell-ask — blocking question
seashell-ask "what's the status of the refactoring?" # blocks up to 600s
seashell-ask --timeout 60 "did the build pass?" # custom timeout
seashell-ask --no-wait "post and exit" # fire-and-forget with reply tokenPosts a message with a reply_token, polls for a matching reply in replies.jsonl, prints when found.
seashell-mirror-mcp — keep CLI and Desktop MCP servers in sync
seashell-mirror-mcp --dry-run # preview what would be added (env values redacted)
seashell-mirror-mcp --list # just print the diff
seashell-mirror-mcp # apply: clone Desktop MCP entries to the CLI (additive)
seashell-mirror-mcp --update # force re-sync EVERY Desktop server (picks up rotated tokens,
# env-var changes, command edits). Removes + re-adds each entry.
# Doesn't touch CLI-only servers (e.g. seashell).Claude Desktop and Claude Code CLI use separate config files for MCP server registration (claude_desktop_config.json vs ~/.claude.json), even though they share the same session .jsonl storage. So a session resumed via hey continue with <project> may be missing tools that Desktop has — e.g. you can ask Claude about Trello in Desktop but the resumed CLI session has no Trello MCP. This script mirrors Desktop → CLI (additive only, never removes), making the tool surface match. Idempotent and safe to re-run whenever you add a new server in Desktop.
Dry-run output redacts env values for keys that look like secrets (anything matching the components KEY, TOKEN, SECRET, PASSWORD, API, AUTH, CREDENTIAL, PAT). The actual claude mcp add calls use the real values from your Desktop config.
seashell-init — register a project
cd ~/Github/your-project
seashell-initCreates .seashell-inbox/, registers the project in ~/.seashell/projects.jsonl, writes (or extends) CLAUDE.md with an inbox hint.
MCP tools surface (60+ tools)
Grouped by tier. Used by Claude (in Desktop, in claude REPLs, in the daemon) — not typed by you.
Inbox (Tier A — safe)
read_user_inbox,inbox_count,inbox_history,reply_to_user,read_my_replies
Cross-session peeking (Tier A — safe)
read_session_transcript— read the most recent N turns of any project's primary session (or any session by id) without resuming it. Lets Claude Desktop answer "what's the status of project X?" by quoting the actual transcript instead of guessing.
Direct Wave config (Tier A read / Tier B write)
wave_get_settings,wave_set_setting,wave_get_widgets,wave_create_widget,wave_update_widget,wave_delete_widget,wave_get_ai_presets,wave_set_ai_preset,wave_set_theme,wave_set_appearance,wave_get_backgrounds
Wave helper-block tools (Tier A read / Tier B write)
wave_list_workspaces,wave_list_blocks,wave_get_scrollback,wave_get_block_meta,wave_set_block_meta,wave_create_block,wave_delete_block,wave_run_in_block,wave_view_file,wave_edit_file
Wave secrets (Tier C — explicit approval required)
wave_secret_list,wave_secret_set,wave_secret_get,wave_secret_deleteEvery secrets tool needs
approved=trueand a non-emptyreason.wave_secret_getwithholds the plaintext value unlessSEASHELL_ALLOW_SECRET_READ=1is set in the server environment.
Command execution
execute_command,execute_with_auto_retrieve,execute_with_streaming,execute_pipeline,get_command_output,list_recent_commands
Templates, profiles, environment
save_template,run_template,list_templates,save_workspace_profile,load_workspace_profile,list_workspace_profiles,get_environment_context,capture_environment,diff_environment
See docs/ARCHITECTURE.md for the full tier table.
Limitations
These aren't bugs — they're architectural realities worth knowing up front.
Limitation | Why |
You can't target a specific Claude Desktop chat with | Claude Desktop's MCP integration runs one shared MCP server per config entry, with no per-chat identifier. The workaround: use the daemon (project-scoped Claude per inbox) or use |
Continuity works only for Claude Code sessions. Claude Desktop's "Chat" mode and "Co-work" mode aren't resumable. Claude Desktop's "Code" mode IS — it persists to the same | Chat and Co-work transcripts are internal to Desktop. Code mode shares the open |
Hooks (SessionStart, PostToolUse) fire only for interactive TTY sessions. They do NOT fire for | This is a Claude Code behavior we accept. SeaShell's |
Side blocks (activity tail + live code preview) only spawn from inside Wave Terminal. They use | The hook checks for the env var before invoking |
The autonomous daemon's | Claude Desktop holds its own in-memory state. New turns appended to the |
High-volume use can hit Claude.ai subscription rate limits. | The daemon batches one |
The blocked-commands list is a guard against mistakes, not a security boundary. | It matches command text, so a determined caller can rephrase or encode a command. Only connect SeaShell to clients you trust. |
On Linux, macOS-only tools return a "needs macOS" message. | The Linux build exists so container hosts can build, start and list the server. Wave Terminal, the clipboard and macOS file events are not there, so those tools report it instead of failing silently. |
No cross-machine sync of inbox or session registry. | All state lives under |
FAQ
Why didn't my SessionStart hook fire?
Hooks fire only for interactive TTY sessions. If you started Claude with claude -p "..." (non-interactive) or piped stdin into claude, the hook is skipped. Run claude normally inside a Wave Terminal block to trigger it.
What's the difference between Claude Desktop "Code" mode and Claude Code CLI?
They use the same conversation file format (~/.claude/projects/<encoded-cwd>/<uuid>.jsonl). Either can read/write a session. So you can:
Start in Desktop Code mode, resume in Wave with
hey continue with <project>✅Start in
claudeREPL inside Wave, view in Desktop's Code mode sidebar later ✅Bounce back and forth across clients on the same conversation ✅
You cannot resume Desktop "Chat" or "Co-work" mode sessions — those are stored elsewhere and aren't exposed.
Why two MCP server registrations (one for Desktop, one for CLI)?
Claude Desktop and Claude Code CLI maintain separate MCP configurations. Desktop reads ~/Library/Application Support/Claude/claude_desktop_config.json; CLI reads ~/.claude.json. We register on different ports (9876 vs 9879) so they don't collide if both spawn SeaShell at once.
What's the difference between seashell-msg and hey?
seashell-msg "..."always posts to the inbox (fire-and-forget).seashell-ask "..."posts and blocks waiting for a reply.hey ...is smarter: if the prompt looks like a session-resume request, itclaude --resumes; otherwise it acts likeseashell-ask.
Think of hey as the user-friendly umbrella; seashell-msg/seashell-ask are the lower-level primitives.
Does the daemon cost money?
The daemon spawns claude -p which uses your Claude.ai subscription (Pro or Max), not the API. No per-token billing. You hit your subscription rate limits, not your wallet. If you don't have a subscription, the daemon won't work — install Claude Code from claude.ai.
Can I use this without Wave Terminal?
Mostly yes. The MCP tools work in any client. The shell commands (hey, seashell-msg, etc.) work in any terminal. The side blocks (activity tail + live code preview) require Wave's wsh createblock — they silently no-op if run outside Wave.
What happens if I start two claude REPLs in the same project directory?
Each gets its own UUID, its own .jsonl file, its own conversation. They're independent. hey continue with <project> resumes the most recently active one.
How do I make my Wave Terminal command run autonomously without me checking back?
Install the daemon (step 8). Then any seashell-ask from any block will get answered by claude -p within ~5 seconds, no chat needed.
How do I uninstall?
# Daemon
launchctl unload ~/Library/LaunchAgents/dev.seashell.daemon.plist
rm ~/Library/LaunchAgents/dev.seashell.daemon.plist
rm ~/.local/bin/seashell-daemon
# Theme sync
launchctl unload ~/Library/LaunchAgents/dev.seashell.theme-sync.plist
rm ~/Library/LaunchAgents/dev.seashell.theme-sync.plist
# Shell commands and hooks
rm ~/.local/bin/seashell-* ~/.local/bin/hey
# Hooks from Claude config (manual edit)
# Open ~/.claude/settings.json and remove the SeaShell entries from the "hooks" key
# State
rm -rf ~/.seashell
# MCP server registrations (manual)
# Remove "seashell" entry from ~/Library/Application Support/Claude/claude_desktop_config.json
# claude mcp remove seashell
# Restore old fish config
mv ~/.config/fish ~/.config/fish.removed
mv ~/.seashell-backups/<timestamp>/fish ~/.config/fishHow can I see what the daemon is doing right now?
tail -f /tmp/seashell-daemon.logYou'll see every poll cycle, every spawned claude -p, and Claude's response timing.
Can the daemon talk to itself? (i.e. infinite loop)
The daemon's claude -p is restricted to four tools: inbox_count, inbox_history, read_user_inbox, reply_to_user. It can't post new inbox messages — only consume and reply.
What do I do if my hook fired wrong / something broke / I want to reset?
Delete ~/.seashell/sessions/<bad-id>/ and ~/.seashell/sessions/<bad-id>.json. The next interactive claude will register fresh. Your ~/.claude/projects/ history is preserved.
Why is my inbox showing messages I didn't send?
Most likely your claude -p (e.g. from the daemon) called read_user_inbox and it returned messages from a different cwd's inbox. SeaShell aggregates inboxes across all known projects + global by default. Use inbox_count to see the per-project breakdown.
Where do I report bugs?
Open an issue at github.com/M-Pineapple/seashell/issues.
Architecture & docs
docs/ARCHITECTURE.md— System overview, layers, MCP tool surface, Wave object modeldocs/INBOX.md— Storage layout, routing rules, daemon architecture, troubleshootingdocs/WAVE_INTEGRATION.md— How SeaShell talks to Wave:wsh,WAVETERM_JWT, RPC mechanismdocs/HELPER_PROTOCOL.md— Wire protocol between the external server and the in-Wave helper
Project layout
seashell/
├── README.md ← you are here
├── LICENSE ← MIT
├── Package.swift ← Swift package manifest
├── build.sh / clean.sh ← build scripts
├── setup.sh ← post-clone bootstrap
├── assets/logo.svg, demo.gif ← logo + README demo (regenerate with docs/demo/record.sh)
│
├── Sources/
│ ├── Seashell/ ← MCP server, tool handlers, Wave adapter
│ │ ├── InboxHandlers.swift ← inbox tools (read/count/history/reply/read_my_replies)
│ │ └── … ← 30+ other handler files
│ └── ConfigManager/ ← standalone config-management binary
├── Tests/SeashellTests/
│
├── helper/seashell-helper ← in-Wave Python helper (TCP proxy to wsh)
├── config/ ← Claude Desktop config template
├── docs/ ← architecture, INBOX, integration, helper protocol
│ ├── demo.tape ← VHS script for assets/demo.gif
│ └── demo/ ← fixtures + record.sh
├── prompts/ ← AI-assisted configuration prompts
│
└── examples/
├── wave-config/
│ ├── bin/ ← shell commands: hey, seashell-msg/ask/init/sessions/setup-hooks
│ ├── hooks/ ← Claude Code SessionStart + PostToolUse scripts
│ ├── fish/ ← starter fish stack
│ ├── fastfetch/ ← system-info banner config
│ ├── wave/ ← Wave widgets/settings templates
│ ├── theme-sync/ ← auto light/dark switcher
│ └── install.sh ← installs all the above into your $HOME
└── seashell-daemon/ ← autonomous inbox responder via claude -pAcknowledgments
Wave Terminal — the terminal SeaShell is built around. Open-source, block-based, deeply scriptable.
Anthropic — for the Model Context Protocol, Claude Desktop, and Claude Code CLI.
fish shell, atuin, starship, zoxide, fastfetch — small tools that make the example config worth running.
Ollama + the Qwen team — for the local LLM that powers the optional natural-language fish layer.
More MCP servers by M-Pineapple
Other MCP servers in this portfolio:
Dev Project Coordinator. Local desk for AI agents to track coding and non-coding projects, with Analytics and Kanban views.
CryptoAnalysisMCP. Cryptocurrency technical analysis for Claude Desktop.
Warp Command Runner. Give any chat AI a real terminal.
Msty Admin MCP. Administer Msty Studio Desktop.
Member Berries. Apple Calendar, Notes and Reminders with personality.
TextEdit MCP. Formatted RTF documents via macOS TextEdit.
HubSpot Auditor. Read-only HubSpot portal audit.
If this saves you time, a star helps others find it.
💖 Support This Project
If SeaShell has helped enhance your development workflow or saved you time, consider supporting its development:
Your support helps me:
Maintain and improve SeaShell with new features
Keep the project open-source and free for everyone
Dedicate more time to addressing user requests and bug fixes
Explore new integrations and features
Thank you for considering supporting my work! 🙏
License
MIT — see LICENSE.
Built with 🐚 by Pineapple 🍍
Available Tools
69 toolsadd_file_watchC
Set up a file system watcher that triggers a command when files change
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Directory path to watch | |
| command | Yes | Command to run when files change | |
| pattern | No | Glob pattern to filter (e.g. '*.swift', '*.ts') | |
| debounce_seconds | No | Debounce interval in seconds (default: 2.0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description bears the full behavioral burden. It correctly implies a persistent, side-effecting background process that runs arbitrary commands, but omits lifecycle details: whether the watcher survives restarts, whether it needs cleanup via remove_file_watch, and whether anything is returned to identify the watcher later.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-formed sentence with the core action and trigger condition front-loaded and no filler. Nothing in it could be cut without losing the stated behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool spawns a long-lived process that executes arbitrary commands, which is meaningful complexity, yet there are no annotations and no output schema. The description leaves the watcher's lifecycle, return value, and relationship to remove_file_watch/list_file_watches unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the four properties documented in the schema itself, so the baseline of 3 applies. The description adds no meaning beyond the schema (e.g., glob semantics, debounce behavior, path constraints).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set up a file system watcher') plus its effect ('triggers a command when files change'), so an agent understands exactly what it creates. It does not name its sibling alternatives (remove_file_watch, list_file_watches), so differentiation is only implied by the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to guidance. The description never says what to do instead if the agent only wants a one-off command run (execute_command) or how this differs from the watch-management siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_environmentB
Capture a snapshot of the current shell environment variables with a named label
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Label for this snapshot (e.g. 'before-install', 'clean-state') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It doesn't say whether snapshots persist, whether reusing a name overwrites or errors, whether secret-bearing variables are included, or what the call returns — all material for a capture-and-store operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight, front-loaded sentence with no filler — verb and resource appear immediately. It is arguably under-specified rather than padded, but as a structural matter it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, no annotations and no output schema, the description covers enough to invoke the tool correctly. It could say more about persistence and return value, which keeps it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented with usage examples, so the schema does the work. The phrase 'with a named label' adds nothing beyond the existing 'name' description; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'capture a snapshot of the current shell environment variables', with the added qualifier 'with a named label'. This distinguishes it in spirit from read-only siblings like get_environment_context and diff_environment, but the description never names those alternatives, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_environment_context, diff_environment, or save_workspace_profile, all of which plausibly overlap with state capture. The only hint of intent lives in the schema example labels ('before-install', 'clean-state'), not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_interactiveA
Check if a command is interactive (requires TTY/stdin) before executing it. Returns safety level: safe, cautious, interactive, or blocked with suggestions for non-interactive alternatives
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to analyse for interactivity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full safety-profile burden. It discloses four return levels and mentions suggestions, but does not state whether the command is actually executed, whether analysis is static or live, or whether there are side effects or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the purpose and result categories. There is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter check tool with no output schema, the description gives the key return categories and mentions non-interactive suggestions. It omits definitions of the safety levels and any execution or analysis caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and the schema documents it fully at 100% coverage. The description does not add syntax or format details about the command beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('a command') and states the condition being tested (interactive/TTY). It does not explicitly name sibling alternatives, though 'before executing it' implies the relationship to execute_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'before executing it' establishes clear timing for when to use the tool. It does not provide exclusions, prerequisites, or named alternatives such as preview_command or suggest_command.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanup_sessionsA
Remove stale terminal sessions that have been inactive. Use periodically to clean up accumulated tabs. Sessions inactive longer than inactive_minutes (default: 30) are removed. Set close_tabs to true to also close the terminal tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| close_tabs | No | If true, also closes the terminal tabs for stale sessions (default: true) | |
| inactive_minutes | No | Minutes of inactivity before a session is considered stale (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that sessions are removed and that close_tabs also closes terminal tabs, but it does not state whether removal is irreversible, whether active sessions are protected, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by usage and parameter behavior. It is efficient and readable, though it repeats default values already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema or annotation coverage, but the description supplies the essential operational context: stale threshold, optional tab closing, and periodic cleanup. It could mention what is returned or whether removals are recoverable, but it is largely sufficient for a two-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented. The description restates the default threshold and the close_tabs behavior, but adds no meaning beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: remove stale terminal sessions that have been inactive. It distinguishes this from general session closing via the 'stale' and 'accumulated tabs' framing, though it does not explicitly name sibling tools like close_session or list_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Use periodically to clean up accumulated tabs.' This tells the agent when the tool is appropriate, but it does not name alternatives or exclusions, such as when to prefer close_session for individual sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_sessionA
Close a named terminal session and optionally close its tab. Use to clean up sessions that are no longer needed. Pass close_tab: true to also close the terminal tab.
| Name | Required | Description | Default |
|---|---|---|---|
| close_tab | No | If true, also closes the terminal tab (default: false) | |
| session_name | Yes | Name of the session to close |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the session closes and that a tab may close, but it omits whether running processes are terminated, whether closure is irreversible, and what happens if the session does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler, front-loaded with the action and use case. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple two-parameter tool with rich schema but no annotations or output schema. The description covers the main operation and optional tab behavior, though it could say more about destructive effects and relation to bulk cleanup siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already fully documented. The description reinforces the close_tab usage but adds no format or edge-case semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('close') and resource ('named terminal session'), and clarifies the optional tab closure. It is clear, but it does not explicitly distinguish itself from sibling cleanup_sessions or list_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to clean up sessions that are no longer needed, giving clear context. It does not state when-not conditions or mention alternatives such as cleanup_sessions, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_to_clipboardA
Copy text to the macOS system clipboard
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to copy to clipboard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the platform ('macOS') and that the target is the system clipboard (a global side effect), but it does not say that existing clipboard contents are overwritten or whether the operation can fail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that is fully front-loaded with verb and resource, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with a fully documented schema and no output schema, the definition is sufficient to call it, but it omits the overwrite behavior and success/failure semantics that a mutating system-level tool would ideally state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single 'text' parameter whose schema description is complete (100% coverage), so the description correctly adds no further parameter detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Copy') and resource ('text to the macOS system clipboard'), and the directionality ('to') makes the contrast with the sibling read_from_clipboard unambiguous. Nothing about the intent is left ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name and description; there is no explicit statement of when to use this versus alternatives or of any preconditions. For such a simple, self-evident tool this is minimally adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ssh_profileC
Delete a saved SSH connection profile
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the SSH profile to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does not disclose that deletion is irreversible, whether confirmation is required, what happens if the name does not exist, or the response shape. "Delete" implies mutation but nothing more is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is appropriately sized for the tool, though brevity here reflects under-specification rather than tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-annotated mutation tool with no output schema, the description omits essential facts: reversibility, error conditions, and any confirmation behavior. The parameter itself is well documented, but the operational picture is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage, so the schema already explains that it is the name of the profile to delete. The description adds no matching or formatting semantics beyond that, which is the expected baseline when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (delete) and resource (saved SSH connection profile), which is unambiguous. It does not explicitly name or distinguish itself from the adjacent siblings save_ssh_profile or list_ssh_profiles, so it falls short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus save_ssh_profile/list_ssh_profiles, no prerequisites, and no stated behavior for a missing profile. The agent is left to infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workspace_profileC
Delete a saved workspace profile
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the profile to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. 'Delete' implies a mutation, but nothing is said about permanence/irreversibility, whether confirmation is needed, or what happens if the name doesn't exist — the key behavioral facts for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero filler, appropriately sized for a single-parameter tool. It is front-loaded but simply too thin to earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully covers the lone parameter, so the structural side is complete. However, for a destructive tool with no annotations and no output schema, the absence of any note on irreversibility or error behavior leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single required string parameter already documented as 'Name of the profile to delete'. The description adds no meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Delete a saved workspace profile'), which is unambiguous on its own. It is distinguishable from siblings such as save_workspace_profile and load_workspace_profile by the verb, though the description never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this rather than list_workspace_profiles or overwriting a profile via save_workspace_profile, and no note that the name must already exist. The agent is given no prerequisites or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_environmentB
Compare two environment snapshots and show additions, removals, and changes
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Name of the 'after' snapshot | |
| from | Yes | Name of the 'before' snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It indicates that the tool compares snapshots and reports additions/removals/changes, which implies a read-only comparison, but it does not state whether snapshots must already exist, what happens if one is missing, or any permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single efficient sentence with the core action and return categories front-loaded. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter comparison tool with complete schema coverage, the description is functionally adequate. However, it leaves out practical context such as where snapshot names come from and behavior when a named snapshot does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented as the 'before' and 'after' snapshot names. The description reinforces that two snapshots are compared but adds no syntax or naming-format guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Compare two environment snapshots' and names the categories of result ('additions, removals, and changes'). It is clear what the tool does, though it does not explicitly distinguish itself from related siblings like capture_environment or get_environment_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says what the tool does but gives no guidance on when to use it versus alternatives, such as when to capture a snapshot first or when to use get_environment_context instead. There are no exclusions or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_and_parseB
Execute a command and return structured parsed output (supports git status, git log, docker ps, test results, ls -la, and JSON)
| Name | Required | Description | Default |
|---|---|---|---|
| parser | No | Force a specific parser: git_status, git_log, docker_ps, test_results, ls, json, auto (default: auto) | |
| command | Yes | The command to execute and parse | |
| working_directory | No | Optional working directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses supported parser targets but says nothing about that this runs arbitrary shell commands, side effects, permission or confirmation requirements, timeouts, or what happens when output doesn't match a parser (only 'auto' is hinted at via the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the parenthetical list is dense but useful. Slightly under-specified rather than over-long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description never describes the shape of the 'structured parsed output' or error returns, which is the tool's central promise. For a command-execution tool with no annotations, more behavioral context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, including the parser enum values. The description adds only the notion of parser selection, which the schema already covers, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Execute a command') and adds a distinguishing outcome ('return structured parsed output') plus the supported command families. An agent can separate it from plain execute_command by the parsing behavior, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of supported outputs implies when this tool is the right choice, but there is no explicit statement of when to prefer execute_command, execute_with_streaming, or preview_command instead, and no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandB
Executes a terminal command and captures its output. Runs silently by default (no visible block). Pass show_in_wave=true only when you want the user to watch the command run in a visible Wave Terminal block — e.g. a build, install, or multi-step process. For 5 consecutive commands, leave show_in_wave unset so they all run quietly without cluttering Wave.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to execute | |
| show_in_wave | No | If true, run in a visible Wave Terminal block so the user can watch. Default false (silent background execution). | |
| working_directory | No | Optional working directory for command execution |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses default silent execution and the visibility toggle, but says nothing about the safety profile of running arbitrary shell commands, permissions, timeouts, exit-code/error behavior, or output size limits. For a potentially destructive command-execution tool that is a significant omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: the core action comes first, then the visibility guidance. The parenthetical '(no visible block)' and the '5 consecutive commands' instruction are slightly awkward phrasing but do not pad the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core action and the one non-obvious parameter, which is adequate for a 3-parameter tool. But with no annotations and no output schema, the description should have explained what 'captures its output' yields (exit codes, truncation, failure reporting) for an agent to call this reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds genuine value beyond the schema for show_in_wave by naming the scenarios that warrant a visible block and the rule for consecutive calls. working_directory is left to the schema, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Executes a terminal command and captures its output'), which is unambiguous on its own. However, it never distinguishes itself from close siblings like execute_pipeline, execute_with_streaming, execute_and_parse, ssh_execute, or wave_run_in_block, so an agent cannot tell from the description which execution tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does give real usage guidance, but only for the show_in_wave parameter (use it for builds/installs/multi-step processes; leave unset otherwise). It offers no guidance on when to choose this tool over the many alternative execution siblings, which is the harder selection decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_pipelineB
Execute a pipeline of commands with conditional logic (stop/continue/warn on failure)
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | Array of step objects with 'command', 'on_fail' (stop/continue/warn), optional 'name' and 'working_directory' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that each step has on_fail behavior, but says nothing about execution environment, side effects, permissions, partial failure outcomes, ordering semantics, or what the tool returns after execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The core behavior and failure-handling modes are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an execution tool with no annotations, no output schema, and nested step semantics, the description is too thin. It does not explain execution safety, result reporting, failure semantics per step, or environment behavior that an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema itself documents the steps array and its on_fail/name/working_directory fields. The description reinforces the conditional-logic concept but adds no syntax or format details beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Execute a pipeline of commands') and adds the distinguishing trait of conditional logic with stop/continue/warn failure handling. It is clearly not just a single command, though it does not explicitly name the sibling alternatives it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentioning conditional logic implies this is for multi-step flows where failure behavior matters, but the description never states when to choose this over execute_command, run_template, or preview_command. Usage is only inferable from the pipeline framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_with_auto_retrieveA
Executes a command and automatically waits for and returns its output. Preferred for quick commands that don't need a visible terminal tab. Use open_terminal_tab only for long-running processes like builds or servers.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to execute | |
| working_directory | No | Optional working directory for command execution |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose that execution blocks and that output is auto-retrieved. It says nothing about timeouts, exit-code or error behavior, output truncation, or side effects of arbitrary command execution. Genuinely useful context, but significant gaps remain for a shell-execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste: the core behavior and the synchronous-output promise come first, then the routing rule against the alternative. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, fully schema-documented command runner with no output schema, the description covers what it does, how it returns results, and when to prefer it. The missing pieces — timeout behavior and error/exit-code reporting — are modest but real for a command executor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (command, working_directory) are documented in the schema itself. The description adds no information about command syntax, shell used, or working-directory defaults, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and behavior: executes a command, waits for it, and returns its output. The blocking/auto-retrieve semantic is a genuine differentiator. However, it does not distinguish itself from close siblings like execute_command, execute_with_streaming, or execute_and_parse, which an agent would also plausibly reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear selection rule — 'preferred for quick commands that don't need a visible terminal tab' — and explicitly names open_terminal_tab as the alternative for long-running processes. It stops short of addressing the arguably more confusable siblings (execute_command, execute_with_streaming), 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.
execute_with_streamingB
Execute a command with real-time output streaming - ideal for long-running builds
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to execute | |
| max_duration | No | Maximum execution time in seconds (default: 120) | |
| update_interval | No | Seconds between output updates (default: 2) | |
| working_directory | No | Optional working directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers little: it says output streams in real time but not whether the call blocks until completion, what happens to partial output when max_duration is hit, whether the command runs in a shell, or what safety/permission posture applies to arbitrary command execution. Only the streaming trait is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the core capability first and the use case second; nothing is wasted. It is, however, terse to the point of under-specification for a tool that runs arbitrary commands.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Four parameters, no annotations, and no output schema, yet the description says nothing about what comes back — output format, whether exit status/errors are included, or how streamed chunks are surfaced. For a command-execution tool with zero structured support for behavior or returns, this leaves material gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including defaults for max_duration and update_interval, so the schema already does the work. The description adds nothing about parameter interplay (e.g., how update_interval interacts with streaming granularity), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a command') plus the distinguishing capability ('real-time output streaming'). It implicitly separates itself from execute_command and get_command_output via the streaming qualifier, but never names the sibling it differs from, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'ideal for long-running builds' hints at the usage context, but there are no explicit when-not conditions and no alternatives named despite many siblings (execute_command, execute_with_auto_retrieve, get_command_output) that an agent must choose between. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_command_outputC
Retrieve the output of a previously executed command
| Name | Required | Description | Default |
|---|---|---|---|
| command_id | No | The command ID to retrieve output for (use 'last' for most recent) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: not whether retrieval is idempotent or consumes the output, not what happens for an unknown or expired command_id, and not whether output is truncated. Only the read-oriented nature is implied by 'Retrieve'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is not padded, though it is terse enough that the missing detail reads as under-specification rather than deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-parameter read tool this is close to adequate, but with no annotations and no output schema the description should say what is returned (raw text vs structured, truncation) and how errors surface for an invalid or 'last' with no history. Those gaps keep it from being complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the command_id description already documents the 'last' sentinel, so the description adds no parameter meaning beyond the schema. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (output of a previously executed command), which clearly places it in the post-execution retrieval lane rather than the execute_* family. It stops short of naming a sibling such as execute_with_auto_retrieve or list_recent_commands, so the boundary is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this instead of execute_with_auto_retrieve, execute_with_streaming, or list_recent_commands. Nothing says whether prior output expires, whether retrieval is required after a plain execute_command, or what happens if no command has run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_environment_contextB
Get current terminal environment context including git branch, active venv, node version, docker status, and working directory
| Name | Required | Description | Default |
|---|---|---|---|
| working_directory | No | Optional directory to check context for (defaults to current) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It usefully discloses what the current context includes (git branch, venv, node version, docker status, working directory), but does not explicitly state that it is read-only, whether it can be slow when checking docker, or what the return structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence that states the action and lists the relevant context fields without filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter, no output schema, and no annotations, the description does a good job listing the returned context components. It could be more complete by stating the return shape or explicitly confirming the read-only nature, but the core information needed to call the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional parameter 'working_directory' is fully documented in the schema as defaulting to the current directory. The description adds no parameter-level detail beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Get current terminal environment context') and enumerates the exact context fields returned. It is clear what the tool does, though it does not explicitly differentiate itself from nearby tools like capture_environment or diff_environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by saying it retrieves current context, but gives no explicit guidance on when to use this tool versus capture_environment, diff_environment, or other environment-related siblings. There are no exclusions, prerequisites, or alternative-selection cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox_countA
Cheap peek across the global inbox + every registered project inbox. Returns total unread count, age of the oldest message, and a per-project breakdown. Call before read_user_inbox if you only want to know whether anything is waiting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description makes the read-only, lightweight nature clear through "cheap peek" and the stated return values. It discloses scope across the global inbox and every registered project inbox, though it does not explicitly state that no side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then states the return values, then gives the usage rule. Three short sentences with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description supplies the key return information: total unread count, age of oldest message, and per-project breakdown. That is enough for an agent to decide whether to call it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The schema is empty and the description correctly focuses on behavior and return values rather than invented arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and action: a cheap peek across the global inbox and all registered project inboxes. It also explicitly distinguishes this from read_user_inbox by saying to call it when you only need to know whether anything is waiting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing guidance: call this before read_user_inbox if you only want to know whether anything is waiting. That clearly frames the alternative and the condition under which this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox_historyB
Browse archived messages across all inboxes (global + every registered project). Sorted most-recent-first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent messages to return (1-100, default: 20) | |
| search | No | Optional substring filter on message text (case-insensitive) | |
| project | No | Optional project label to filter by (matches the basename of project paths in ~/.seashell/projects.jsonl) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral burden; it does contribute that results span all inboxes and are sorted most-recent-first, which is real behavioral detail. However, it omits read-only confirmation, whether archived includes threads/replies, and any result-shape or paging behavior beyond the limit param.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; scope is front-loaded followed by the ordering guarantee. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple zero-required-parameter browse tool with full schema coverage and no output schema needs little more than this. The main omission is differentiation from read_user_inbox and a hint about what a returned message contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so limit, search, and project are already fully documented in the schema with defaults and matching rules. The description adds only the sort order, which is not tied to any parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Browse') and resource ('archived messages') with explicit scope ('all inboxes: global + every registered project') and ordering. It does not distinguish itself from the sibling read_user_inbox, which appears to overlap in purpose, so an agent cannot fully disambiguate from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Says nothing about when to prefer this over read_user_inbox, inbox_count, or read_my_replies. The 'archived / across all inboxes' wording hints at a broad historical view, but no conditions or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_file_watchesB
List all active file system watchers
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It implies a safe read via 'List' and filters to 'active' watchers, which is useful. However, it says nothing about the return shape (what a watcher record contains), ordering, or whether inactive/removed watches could ever appear, leaving gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. Appropriately sized for a trivial listing tool, though it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-param, no-annotation, no-output-schema tool, the description is nearly complete but omits what a returned watcher looks like (path, ID, events). An agent can call it correctly but cannot anticipate the output structure from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (schema coverage 100%), so there is no parameter semantics to explain; the baseline for a 0-param tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('active file system watchers'), which clearly distinguishes it from the sibling mutation tools add_file_watch and remove_file_watch. It stops short of naming those alternatives explicitly, but the read-only listing purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to call this versus add_file_watch/remove_file_watch, nor any mention of prerequisites. The word 'active' hints at scope (excluding inactive watches), but that is left implicit rather than stated as a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_commandsB
List recent commands from history with status, duration, and exit codes
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of commands to return (1-50, default: 10) | |
| search | No | Search in command text | |
| status | No | Filter by status: 'all', 'success', 'failed' (default: all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that history is read and what fields appear (status, duration, exit codes); it says nothing about ordering (most-recent-first?), whether the list is scoped to the current session/workspace, retention depth of history, or read-only safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (verb, scope, returned fields) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three fully documented optional parameters and no output schema, the description covers the essentials and helpfully names the returned fields. It still leaves meaningful gaps for a history tool: sort order, scope of history, and how 'recent' is bounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (limit with its 1-50/default-10 range, search, status) are already documented. The description adds nothing beyond echoing the returned fields, and notably does not clarify that 'limit' is typed as a string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('recent commands from history') plus the returned fields, which clearly separates it from execution siblings like execute_command or get_command_output. It stops short of naming a sibling explicitly, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'From history' implies this retrieves already-executed commands rather than running new ones, which is an implicit disambiguation against execute_command. However, there is no explicit when-to-use guidance, no mention of when to prefer get_command_output for a single command's full output, and no stated exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsA
List all active terminal sessions. Check this before opening new tabs to avoid creating duplicates. Reuse existing sessions with send_to_session whenever possible.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure; it implies a safe read via 'List' and states the scope ('all active'), which is useful. However, it does not describe what a session record contains (IDs, names, state), which matters because those identifiers are needed to call send_to_session, and there is no output schema to fill the gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it does, when to call it, and what to do next. The core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool the description covers purpose and workflow routing well. The only real gap is the absence of any hint about the returned session fields, which matters given no output schema and a downstream dependency on session identifiers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. It correctly implies no filtering or targeting is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all active terminal sessions') with a clear scope qualifier ('active'). It is immediately distinguishable from siblings like open_terminal_tab and send_to_session, which are named or implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to call it ('Check this before opening new tabs to avoid creating duplicates') and names the alternative workflow ('Reuse existing sessions with send_to_session whenever possible'). Both the trigger and the follow-up action are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssh_profilesA
List all saved SSH connection profiles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden; "List" implies a read-only operation and "all saved" defines scope. However, it does not disclose whether sensitive SSH details are returned, whether credentials are redacted, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted wording. It is appropriately sized for a zero-parameter list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient to understand the basic operation, but with no output schema it does not describe the returned profile fields or whether secrets are included. For a simple list tool this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There are no parameter semantics for the description to clarify beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "List all saved SSH connection profiles." It clearly separates this read-only profile enumeration from siblings such as save_ssh_profile, delete_ssh_profile, and ssh_execute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no explicit guidance on when to use this tool versus alternatives like list_workspace_profiles or ssh_execute. The usage is only implied by the name and the word "saved."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesB
List all saved command templates
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. Beyond the word 'List' implying a read operation, it says nothing about ordering, scope (global vs workspace), or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, and the verb/resource are front-loaded. It is appropriately sized for a zero-parameter tool, though it could add one clarifying phrase about scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter listing tool, the description is minimally adequate. However, without annotations or an output schema, it leaves open whether templates are listed globally or per workspace and what format they are returned in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is already complete and there is no parameter semantics to explain. The description does not need to compensate for any schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('all saved command templates'), making the operation clear. It does not distinguish itself from nearby siblings such as list_recent_commands or run_template, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Siblings like list_recent_commands and save_template create potential confusion that the description never addresses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_profilesB
List all saved workspace profiles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. "List all saved" weakly implies a read-only, unfiltered enumeration, but it says nothing about ordering, whether empty results are possible, or what a "profile" contains — significant gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is arguably too terse, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should hint at the shape of returned profile objects or at least whether names/IDs are included. For a trivial zero-param list tool this is a minor gap, but it is still a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify; baseline 4 applies. The schema is empty and fully self-consistent with the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List all saved workspace profiles"), so the agent knows exactly what it returns. It does not differentiate itself from sibling lifecycle tools like save_workspace_profile, load_workspace_profile, or delete_workspace_profile, though the names make the distinction fairly obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus load_workspace_profile or save_workspace_profile, and no stated preconditions. The agent must infer that this is a discovery step before loading a profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_workspace_profileB
Load a saved workspace profile to restore project context
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the profile to load |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does not explain what state is restored, whether it overwrites the current workspace context, what happens if the named profile does not exist, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to the behavioral gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with complete schema coverage and no output schema, the description identifies the action and likely purpose. However, because there are no annotations and the tool appears to alter workspace state, the description is incomplete regarding side effects and failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage, so the schema already defines 'name' clearly. The description adds no extra parameter semantics beyond the schema, which is acceptable given the complete schema but not enriching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Load a saved workspace profile') and adds an outcome ('restore project context'). It is clear but does not explicitly differentiate itself from siblings such as list_workspace_profiles, save_workspace_profile, or delete_workspace_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'restore project context' implies when the tool is useful, but there is no explicit guidance on when to choose this over listing profiles or creating a new workspace. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_terminal_tabA
Open a new named terminal tab. ONLY use for long-running commands that need their own visible tab (builds, installs, servers, cloning repos). For quick commands, prefer execute_command or execute_with_auto_retrieve instead. If a session already exists, use send_to_session to reuse it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name/label for this terminal session | |
| working_directory | No | Optional initial working directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that this opens a visible tab for long-running work and directs reuse through send_to_session, but it does not explain lifecycle effects such as whether the tab persists, how to clean it up, or what happens after opening.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, front-loaded with the core action and followed by selection guidance. Every sentence earns its place by clarifying when to use this tool and which sibling to use instead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with full schema coverage and no output schema, the description covers purpose, usage conditions, and alternatives well enough to invoke it correctly. It could mention lifecycle cleanup or resource implications, but those are secondary to correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the schema. The description adds only the notion that the tab is 'named' and gives usage examples, but does not add syntax, defaults, or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Open a new named terminal tab.' It clearly distinguishes this tool from command-execution and session-reuse siblings, so an agent can identify its role without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('ONLY use for long-running commands that need their own visible tab'), concrete examples (builds, installs, servers, cloning repos), and named alternatives for quick commands and existing sessions. Nothing important is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_commandB
Preview a command without executing it
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the single most important behavioral trait (no execution side effects). However, it never explains what a 'preview' actually contains (shell expansion, validation, risk analysis) or whether it touches the environment, which is critical for a command tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the key safety qualifier front-loaded after the verb. Efficient, though arguably too terse given the ambiguity of 'preview'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description must define the return value and side-effect profile; instead it leaves ambiguous whether preview parses, expands, or validates the command. An agent cannot predict the result it will get.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema already documents 'command' fully. The description adds nothing about format, quoting, or multi-command input; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Preview') and resource ('a command') and adds the distinguishing qualifier 'without executing it', which separates it from the many execute_* siblings. It stops short of naming a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without executing it' implies a pre-flight/dry-run use case versus execute_command, but usage is only implied; there is no explicit when-to-use, when-not-to-use, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_from_clipboardA
Read the current contents of the macOS system clipboard
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read' implies a non-mutating operation and the macOS scoping hints at platform requirements, but there is no disclosure of permission/accessibility requirements, behavior in headless or SSH contexts, or what happens when the clipboard is empty or holds non-text data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every word earns its place and the resource and platform are stated up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial zero-param read, the description covers what it does but not what comes back. With no output schema, the agent cannot tell whether the result is plain text, an image, or an empty/null value, nor how failure is signaled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage there is nothing to document, so the baseline of 4 applies. The description adds no parameter-level detail because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus the exact resource (macOS system clipboard), which is unambiguous. It does not name the sibling copy_to_clipboard as its inverse, but the pairing is self-evident from the names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers it should call this when it needs clipboard contents and use copy_to_clipboard to write. There is no explicit when-to-use statement, no exclusion, and no mention of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_my_repliesA
Browse the OUTBOUND history — replies you've previously sent via reply_to_user. Aggregates across the global inbox and every registered project's replies.jsonl. Use this to answer questions like "what was the last thing you said in this project?" or "what did you tell me about X?" without needing to manually open the file. Sorted most-recent-first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent replies to return (1-100, default: 10) | |
| search | No | Optional substring filter on reply text (case-insensitive) | |
| project | No | Optional project label to filter by (matches the basename of project paths in ~/.seashell/projects.jsonl). Use 'global' to filter to the global inbox. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the data sources (global inbox plus every registered project's `replies.jsonl`) and the sort order (most-recent-first). It omits any statement about return shape or how `limit` interacts with the cross-project aggregation, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core identification in the first sentence and follows with scope and then use cases. The two quoted example questions are useful framing, though the `replies.jsonl` file-path detail is closer to implementation trivia than agent-facing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with three optional, fully documented parameters and no output schema, the description covers scope, ordering, and typical questions it answers. It stops short of describing the returned reply records, which an agent might want given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, setting the baseline at 3. The description adds only indirectly, via the most-recent-first ordering that gives `limit` meaning; it says nothing extra about `search` or the `project` basename matching that the schema doesn't already cover.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (browse the OUTBOUND history of replies sent via `reply_to_user`) and capitalizes OUTBOUND to contrast with the sibling `read_user_inbox`. An agent can immediately tell this reads sent messages, not received ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use examples ("what was the last thing you said in this project?", "what did you tell me about X?") and names the originating tool `reply_to_user`. It lacks an explicit when-not / alternative-sibling statement (e.g. 'for inbound messages use read_user_inbox'), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_session_transcriptA
Read the most recent N turns of a Claude Code session's transcript, without resuming it. Use this when the user asks 'what's the status of project X?' or 'what did we last talk about in ?' — you read the actual transcript instead of relying on memory. Resolution: pass project (fuzzy name) and Seashell follows the project's .seashell-inbox/primary-session.txt pointer (or falls back to the largest .jsonl in that project's Claude Code dir). Or pass session_id (full UUID or prefix) for direct lookup. Returns formatted user/assistant turns; tool calls are flagged with [used: <tool>] and thinking blocks with [thought]. Long messages auto-truncate.
| Name | Required | Description | Default |
|---|---|---|---|
| last_n | No | How many recent user/assistant turns to return (1-200, default: 30). Tool-result-only turns and unrelated metadata lines are skipped automatically. | |
| project | No | Project name to look up (fuzzy-matched against the basename of every Claude Code project dir). Resolved to the project's primary session. | |
| session_id | No | Full session UUID or unique prefix. Takes precedence over `project` if both given. | |
| max_body_chars | No | Per-message body truncation (80-5000, default: 800). Long messages get a '… (truncated, N more chars)' suffix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does well: it discloses that the session is not resumed, documents the pointer-file resolution and largest-.jsonl fallback, and describes the output markers ([used: <tool>], [thought]) and truncation. It stops short of saying what happens when a project name matches nothing, which matters for a read tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then resolution, then return shape — a sensible order with no filler sentences. Slightly dense in the resolution sentence, but every clause (precedence, fallback, markers) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by describing the formatted turn output, inline tool/thinking markers, and truncation behavior. The main residual gap is failure modes (unknown project, stale pointer, empty transcript) for a tool with no annotations to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine value beyond the schema by explaining how `project` is resolved (inbox pointer, then fallback) and that session_id overrides project. It does not restate ranges for last_n/max_body_chars, which is fine since the schema covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Read the most recent N turns of a Claude Code session's transcript') and adds the crucial negative scope 'without resuming it,' which separates it from send_to_session/list_sessions. An agent can tell exactly what it gets back from the opening clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrases ('what's the status of project X?') and states the alternative approach it replaces ('you read the actual transcript instead of relying on memory'). It also spells out the resolution precedence: pass project for fuzzy lookup, or session_id for direct lookup, with session_id taking precedence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_user_inboxA
Drain unread notes the user left for Claude via the seashell-msg shell command. Aggregates across the global inbox (~/.seashell/inbox.jsonl) AND every registered project inbox (.seashell-inbox/inbox.jsonl in each project root). Each note carries a timestamp, working directory, project label, and (optionally) attachments + a reply_token. Read messages are archived. Call this when the user's chat message is brief or implies they were elsewhere (e.g. "?", "continue", "check inbox"). If any returned message has a reply_token, you should answer via reply_to_user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses key traits: it drains unread notes, aggregates across global and project inboxes, lists returned note fields, and states that read messages are archived. That archiving detail is important because it implies a state-changing side effect beyond a pure read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core action and scope, then adds the return shape, archiving behavior, invocation trigger, and reply follow-up. Every sentence adds operational value; none is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and no annotations, the description is sufficiently complete: it explains the data sources, what each returned note contains, that read messages are archived, when to call it, and how to handle a `reply_token`. No critical detail needed to invoke it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no per-parameter syntax to explain; baseline 4 applies. The description still clarifies the implicit inputs—all registered project inboxes plus the global inbox—without contradicting the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Drain unread notes the user left for Claude' via `seashell-msg`, aggregated across global and project inboxes. It also distinguishes the read/drain action from the follow-up action `reply_to_user`, so the agent can tell what this tool does and what it is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it: when the user's chat message is brief or implies they were elsewhere, with examples like '?', 'continue', and 'check inbox'. It also names the follow-up alternative `reply_to_user` when a `reply_token` is present, though it does not state when to prefer `inbox_history` or `inbox_count` instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_file_watchB
Remove an active file system watcher
| Name | Required | Description | Default |
|---|---|---|---|
| watcher_id | Yes | ID of the watcher to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does not state whether removal is immediate/irreversible, whether it errors on an unknown or already-removed watcher_id, or whether in-flight events are dropped — all material facts for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is lean to the point of under-specification, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with zero annotations and no output schema, the description omits irreversibility, error behavior, and how to obtain a valid watcher_id. An agent has to guess at the failure modes before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is documented as 'ID of the watcher to remove'. The description adds no format, source, or validation detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove') and resource ('an active file system watcher'), which cleanly distinguishes it from add_file_watch and list_file_watches by name. It stops short of explicit sibling routing, but the operation itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the deletion verb, but the description never says when to use this versus list_file_watches to discover a valid ID, nor what happens if the watcher is already gone. No exclusion or prerequisite guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_userA
Post a reply to a user inbox message. Use this when a message returned by read_user_inbox had a reply_token — that means the user invoked seashell-ask and is blocking on your answer. The reply is written to the appropriate replies.jsonl (global or per-project) and seashell-ask picks it up within ~1 second. If the user just left a note via seashell-msg (no reply_token), no reply call is needed — answer in chat normally.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Your reply text — what the user will see in their terminal (required) | |
| message_id | Yes | The id field from the original inbox record (required) | |
| project_path | No | Optional absolute project path to scope the reply to. If omitted, Seashell auto-detects from the message id by searching archives. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the write target (replies.jsonl, global or per-project), the delivery latency (~1 second pickup by seashell-ask), and the blocking-caller semantics. It does not say what happens on a stale/invalid message_id or whether the call can fail silently, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action, then the trigger condition and the exclusion. Every sentence conveys either what to send, when to send it, or what happens after — no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the description supplies the workflow, the timing, and the write destination, which is enough to invoke it correctly. Missing only failure-mode guidance (invalid or already-replied message_id).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the floor; the description adds value by explaining that replies land in a global or per-project file, which clarifies why project_path scoping exists and what it affects. It still does not tie message_id directly to the inbox record it must come from, but the schema covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Post a reply to a user inbox message") that is instantly separable from siblings like read_user_inbox and read_my_replies. The description also identifies the upstream trigger (a message carrying a reply_token) so the agent knows which resource instance this acts on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States both the positive condition (message had a reply_token, user is blocking) and the negative case (a plain seashell-msg note needs no reply call — answer in chat). It names the sibling tools that produce each case, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_templateC
Execute a saved command template with variable substitution
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the template to run | |
| variables | No | Object with variable names and their values |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a side-effecting execution but never states whether the command's output is returned inline or must be fetched via get_command_output, what happens if the template name is unknown, or whether missing variables error out. These are the traits an agent needs before invoking it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficiently sized, though its brevity is part of why behavioral and usage context are absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a command-execution tool with no annotations and no output schema, the description omits return behavior, error conditions, and how the result relates to get_command_output. It is not complete enough for an agent to call this confidently in a side-effecting context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, setting the baseline at 3. The phrase 'with variable substitution' adds a little meaning about how the variables object is applied, but does not specify format or substitution syntax beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Execute a saved command template', plus the key mechanic of variable substitution. However, it does not differentiate from the sibling execute_command, leaving the agent to guess which one reads a stored template versus running a raw command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and no alternatives named despite many overlapping siblings (execute_command, preview_command, list_templates, save_template). The agent must infer that a template must already be saved and that list_templates is how to find the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_ssh_profileC
Save an SSH connection profile for quick reuse
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Remote hostname or IP | |
| name | Yes | Profile name | |
| port | No | SSH port (default: 22) | |
| username | Yes | SSH username | |
| identity_file | No | Path to SSH private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does not meet it: it never says whether saving a profile with an existing name overwrites or errors, where the profile is persisted, or whether the private key path is validated or the key itself stored. For a mutation tool with zero annotation coverage, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the core action front-loaded and no filler. It is efficient, though its brevity is part of what leaves the behavioral questions unanswered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations and no output schema, the description should cover collision behavior, persistence scope, and typical follow-up (ssh_execute). None of that is present, so an agent cannot predict what a successful or failed save looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (name, host, username, port, identity_file) are documented in the schema, establishing the baseline of 3. The description adds nothing about defaults, accepted formats, or the significance of optional fields such as identity_file.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Save an SSH connection profile") plus a purpose ("quick reuse"), which is clearly distinct from ssh_execute and list_ssh_profiles. It does not explicitly name those siblings or state the boundary (persisting a profile vs. running a connection), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this instead of ssh_execute, save_workspace_profile, or list_ssh_profiles, and no prerequisites or preconditions. An agent must infer from the name alone that this is the persistence step before running ssh_execute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_templateB
Save a command template with variables for reuse
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique name for the template | |
| category | No | Optional category for organization | |
| template | Yes | Command template with {{variable}} placeholders | |
| description | No | Optional description of what the template does |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not explain what happens if the template name already exists, whether the save overwrites or fails, where templates are persisted, or what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the action, the resource, and the purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity save operation with fully documented parameters and no output schema, the core purpose is covered. However, with no annotations, it leaves important mutation behavior such as duplicate-name handling and persistence scope unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented. The description adds only the general idea that templates contain variables, while the schema supplies the concrete {{variable}} syntax and field meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Save a command template with variables for reuse.' It clearly distinguishes saving from sibling actions like run_template, list_templates, and preview_command, though it does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for reuse' implies when this tool is useful, but there is no explicit guidance on when to choose it over alternatives such as run_template or list_templates, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_workspace_profileB
Save current project context as a named workspace profile (directory, commands, env vars, terminal preference)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Profile name (e.g. 'my-swift-project') | |
| directory | Yes | Working directory for this profile | |
| default_commands | No | Array of commonly used commands for this project | |
| environment_vars | No | Environment variables to set when loading this profile | |
| terminal_preference | No | Preferred terminal for this project (Wave, iTerm, Terminal) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for a mutation tool. It never says whether saving overwrites an existing profile of the same name, where profiles are persisted, whether the directory must exist, or whether environment_vars are stored in plaintext — all material for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the verb first and zero filler. The parenthetical slightly duplicates the schema's own field list, which costs it the top mark, but the definition is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation with a nested object (environment_vars) and no annotations or output schema, one sentence is not enough. Collision/overwrite behavior, persistence location, and expected response (success only? returns the saved profile?) are all unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the five parameters is already documented at the field level. The description's parenthetical restates the same fields without adding format, constraint, or default information beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Save') plus resource ('named workspace profile'), followed by a parenthetical enumerating exactly what is captured (directory, commands, env vars, terminal preference). This clearly separates it from load_workspace_profile, list_workspace_profiles and delete_workspace_profile, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'current project context' implies the moment to use it, but there is no explicit when/when-not, no mention of what happens if a profile with that name already exists, and no pointer to load_workspace_profile as the counterpart operation. Guidance is inferred from the name, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
self_checkB
Run health check on configuration, database, terminal, and recent error rates
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and it does disclose scope (four subsystems checked), which implies a read-only diagnostic. However it never confirms it is non-mutating, says nothing about latency or whether it touches live sessions, and gives no sense of what a failure result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and enumerating the checks. Nothing is padded and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero params, no nested objects), and the description covers what is checked. But with no output schema and no annotations, an agent still can't tell what the result contains or how to act on it, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to document and the baseline of 4 applies. The description correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Run health check') plus the resources inspected: configuration, database, terminal, and recent error rates. It's a diagnostic tool clearly distinct from the command-execution and workspace siblings, though it doesn't name a sibling it contrasts with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to invoke this versus siblings like get_environment_context or wave_helper_status, both of which also sound diagnostic. There is no statement of prerequisites 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.
send_to_sessionA
Send a command to an existing named terminal session, reusing its tab. Always prefer this over opening a new tab when a relevant session already exists. Use list_sessions first to check for available sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The command to send | |
| session_name | Yes | Name of the target session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that the tab is reused (no new resource created) and that a session must pre-exist, but says nothing about what happens if the session name is unknown, whether the call is blocking, or how output is obtained (a sibling get_command_output exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the preference rule, then the prerequisite. No filler; every sentence changes agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple two-parameter tool with a fully documented schema and no output schema; the description covers selection and prerequisite context adequately. The main residual gap is output retrieval guidance for a command-sending tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema; baseline 3 applies. The description adds only that session_name must refer to an existing named session, with no details on name matching or command syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: send a command to an existing named terminal session, and clarifies it reuses the session's tab rather than creating one. This distinguishes it from open_terminal_tab, though other execution siblings (execute_command, execute_with_streaming, wave_run_in_block) are never named as contrasts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit positive guidance ('Always prefer this over opening a new tab when a relevant session already exists') plus a concrete prerequisite step ('Use list_sessions first to check for available sessions'). The when-to-use condition and the alternative are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_notification_preferenceC
Toggle macOS notification preferences for command completion alerts
| Name | Required | Description | Default |
|---|---|---|---|
| sound | No | Enable or disable notification sounds | |
| enabled | No | Enable or disable notifications | |
| minimum_duration | No | Minimum command duration (seconds) before notification triggers | |
| notify_on_failure | No | Notify on failed commands | |
| notify_on_success | No | Notify on successful commands |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short. 'Toggle' is ambiguous for a tool that accepts explicit boolean and numeric values, leaving open whether it flips current state or sets absolute values. It also omits whether partial updates are allowed, whether settings persist across sessions, and any permission or macOS-version requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the scoping qualifier 'for command completion alerts' appears early. It is efficient, though so terse that the brevity reflects under-specification rather than disciplined economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five optional parameters, no annotations, and no output schema mean the description must do more work than one sentence allows. It says nothing about partial-update semantics, defaults, persistence scope, or the effect of calling it with an empty argument object, all of which an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, establishing a baseline of 3. The description only adds the framing that these settings govern completion alerts, which mildly clarifies the meaning of 'enabled' and 'sound' but adds no syntax, units, or default information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: toggling macOS notification preferences scoped to command completion alerts. That is clear enough to distinguish it from unrelated siblings like wave_set_setting or execute_command. It does not explicitly contrast itself with any sibling, and the word 'toggle' is a slightly loose fit for a 5-parameter setter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives such as wave_set_setting. Nothing states whether it applies globally or per-session, whether omitting parameters preserves existing values, or what defaults apply. The agent must infer all invocation conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssh_executeB
Execute a command on a remote host via SSH (key-based authentication only)
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Remote hostname or IP address | |
| port | No | SSH port (default: 22) | |
| command | Yes | Command to execute remotely | |
| profile | No | Name of saved SSH profile to use instead of specifying host/username/key | |
| timeout | No | Connection timeout in seconds (default: 30) | |
| username | No | SSH username | |
| identity_file | No | Path to SSH private key (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it does disclose one important behavioral constraint: key-based authentication only, which rules out password or agent prompting. It says nothing about whether the command is non-interactive, how output or exit codes are surfaced, or what happens on timeout/connection failure — significant gaps for a remote execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the core action is front-loaded. Its brevity is efficient rather than padded, though the parentheses carry the only differentiating detail at the tail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no annotations, and no output schema, an agent needs more than this — notably how results and failures are returned, whether profile overrides host/username, and whether execution is blocking for the duration of the timeout. The description leaves the entire behavioral surface of a remote execution tool undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so defaults for port, timeout, identity_file, and the profile alternative are already documented in the schema. The description adds only the auth-mode constraint that explains why identity_file matters, which is a marginal but real addition over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: execute a command on a remote host over SSH. An agent can distinguish it from the SSH-profile management siblings (save_ssh_profile, list_ssh_profiles) and from local execution tools. It does not explicitly differentiate it from generic siblings like execute_command, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over execute_command, run_template, or wave_run_in_block, which all appear in the sibling list and could plausibly run commands. The only usage constraint given is the authentication mode, not the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_commandC
Suggests a terminal command based on the user's request
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The user's request or task description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only says a command is 'suggested.' It does not state whether anything is executed, whether the suggestion is advisory only, where the suggestion comes from (model vs. template library), or what form the result takes. For a tool sitting alongside execute_command, this omission matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler and the key concept front-loaded. It is efficient, though its brevity stems partly from under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is structurally simple (one string parameter, fully documented, no nested objects), so a short description is defensible. Still, with no annotations and no output schema, the description leaves unresolved whether the returned suggestion is executed, how it is returned, and what the agent should do with it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ("The user's request or task description"), so the schema already documents its meaning. The description restates the same idea ("based on the user's request") without adding format, length, or phrasing 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("suggests a terminal command") and adds the basis for the suggestion ("based on the user's request"), which distinguishes it from execution-oriented siblings by name alone. However, it never explicitly contrasts itself with preview_command or execute_command, so differentiation is left to the agent's inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus preview_command or execute_command, nor whether the suggestion should be previewed/confirmed before running. The agent must infer that this generates rather than runs a command.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_bootstrap_workspaceA
Bootstrap a Wave tab with a project-specific block layout. Templates: general, python-dev, node-dev, swift-dev. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for terminal blocks | |
| tab_id | Yes | Tab ID to bootstrap blocks into | |
| approved | No | Set to true to confirm and execute | |
| template | No | Template name: general, python-dev, node-dev, swift-dev (default: general) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose key traits: a dry-run confirmation gate, a hard dependency on the Seashell Helper, and that the operation is a multi-block mutation. It does not say whether existing blocks in the tab are replaced, preserved, or appended, which is the main remaining behavioral unknown for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope, followed by template options, the confirmation protocol, and the prerequisite. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the prerequisite, the confirmation workflow, and the meaningful template choices, which is most of what an agent needs. For a mutation tool with no annotations and no output schema, the one notable omission is the effect on pre-existing tab content and what the confirmation response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, and the description largely restates the template list rather than adding syntax or defaults beyond the schema. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Bootstrap a Wave tab with a project-specific block layout') and enumerates the available templates, which makes the tool's scope concrete. It does not name the nearby alternatives (wave_create_block, run_template, list_templates) that an agent might confuse it with, so the differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear procedural guidance for the two-phase invocation: the first call returns a confirmation and only approved=true executes, which prevents accidental side effects. It also names the Seashell Helper prerequisite. It stops short of stating when to prefer this over wave_create_block or run_template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_connect_helperB
Connect the MCP server to the Seashell Helper block running inside Wave Terminal. The helper must already be running (open the Seashell Helper widget in Wave first).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions the prerequisite but omits critical behavioral details such as return values, error handling if the helper is not running, or whether the connection is idempotent. This is a significant gap for a connection tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and then the prerequisite. Efficient and easy to parse, though slightly more context could be added without hurting conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description should explain what happens after connection (e.g., success state, side effects) and any error conditions. It covers the prerequisite but leaves the agent guessing about the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline score is 4. The description does not need to explain parameter semantics beyond what the empty schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Connect') and resource ('MCP server to the Seashell Helper block'), clearly distinguishing it from sibling tools like wave_helper_status or wave_list_blocks. However, it does not explicitly name an alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a prerequisite ('The helper must already be running') which implies when to use it, but gives no guidance on alternatives or when not to use it. The condition is helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_create_blockA
Create a new block in Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory | |
| url | No | URL to open (for web blocks) | |
| file | No | File path to open (for preview blocks) | |
| view | Yes | Block type: term, preview, web, sysinfo, launcher | |
| tab_id | Yes | Tab ID where the block will be created | |
| command | No | Command to run (for term blocks) | |
| approved | No | Set to true to confirm and execute | |
| run_on_start | No | Auto-run command when block opens | |
| close_on_exit | No | Close block when command exits |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses the confirmation/approval gate and the helper-block dependency, but says nothing about what happens when the helper is absent, whether the block persists, or what errors look like for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the purpose front-loaded, followed by the execution protocol and the prerequisite. Nothing is repeated and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter mutation with no annotations and no output schema, the description covers the approval flow and dependency but leaves the result of the confirmation call and post-creation state unstated. Adequate to invoke, thin for understanding consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the schema, including view types, cwd, url, file, and approved. The description adds no param-level meaning beyond the schema, which is the expected baseline at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new block in Wave Terminal'), which distinguishes it from wave_list_blocks, wave_delete_block, and wave_run_in_block. It does not differentiate itself from wave_create_widget, which is a nearby sibling that also creates things, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two-step confirmation protocol ('First call returns a confirmation; pass approved=true to execute') and states the prerequisite ('Requires the Seashell Helper block'), which is genuinely decision-relevant context. It gives no when-not guidance or routing against alternatives such as open_terminal_tab or wave_create_widget.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_create_fish_widgetA
Add a Fish shell widget to the Wave widget bar (convenience wrapper around wave_create_widget). First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Widget ID (default: fish-shell) | |
| cwd | No | Working directory for the fish shell | |
| icon | No | Icon name (default: terminal) | |
| label | No | Display label (default: Fish) | |
| approved | No | Set to true to confirm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description bears the full behavioral burden. It earns credit for disclosing the dry-run/confirm pattern (first call has no side effect), but says nothing about what happens if a widget with the same id already exists, whether Wave must be running, or whether the widget persists across restarts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the identification of the tool comes first followed by the operational instruction. Nothing here could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description covers purpose and the confirmation protocol but leaves duplicate-id behavior, error modes, and any environment prerequisites unstated. Adequate to invoke correctly, thin on what the agent should expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has a documented default in the schema, so the baseline applies. The description's only parameter-related content is the approved=true instruction, which restates the schema's own "Set to true to confirm".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Add a Fish shell widget to the Wave widget bar" gives a specific verb and resource, and the parenthetical explicitly ties it to wave_create_widget as a specialized convenience wrapper, which separates it from the generic sibling. It stops just short of 5 because it doesn't say what this wrapper does differently from calling wave_create_widget with fish-specific arguments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-step flow is spelled out: the first call returns a confirmation and approved=true executes, so an agent knows exactly how to drive it. It doesn't tell the agent when to prefer this over wave_create_widget or list_templates, but the wrapper framing makes the choice largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_create_widgetA
Create a new custom widget in Wave Terminal (writes to ~/.waveterm/widgets.json). First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique widget identifier (e.g. 'dev-server', 'test-runner') | |
| cwd | No | Working directory for the block | |
| env | No | Environment variables to inject into the block | |
| icon | No | Icon name (e.g. 'terminal', 'code', 'robot') | |
| view | Yes | Block view type: 'term', 'preview', 'web', 'sysinfo', 'launcher' | |
| color | No | Colour hex code (e.g. '#FF6B6B') | |
| label | Yes | Display label shown in the widget bar | |
| command | No | Command to execute when the widget opens (for term blocks) | |
| approved | No | Set to true to confirm and execute the write | |
| shell_path | No | Shell binary path (e.g. '/opt/homebrew/bin/fish') | |
| run_on_start | No | Auto-run command when the widget opens (default: false) | |
| close_on_exit | No | Close the block when the command exits (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does disclose the key traits: this is a mutating write scoped to ~/.waveterm/widgets.json, and it is gated behind a two-phase approval. It omits what happens if 'id' collides with an existing widget (overwrite vs. error) and any permission/file-existence requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: purpose and side effect first, then the approval mechanic. Nothing is redundant and no sentence could be removed without losing a decision-relevant fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no annotations and no output schema, the description covers purpose, write target, and the approval gate, and it even hints at the first-call return value. It is slightly thin on duplicate-id behavior and what a successful approved call returns, but nothing critical to calling it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 12 parameters, including the nested env object, are documented in the schema, so the baseline is 3. The description reinforces only the approved flag's role in the confirmation flow and adds no semantics for id, view, env, or the defaulted booleans.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb + resource ('Create a new custom widget in Wave Terminal') and names the persistence target, which distinguishes it from read-side siblings like wave_get_widgets and from wave_update_widget. It never explicitly contrasts itself with near-neighbors such as wave_create_fish_widget or wave_create_block, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete procedural rule: the first call is a confirmation stub and the write only happens on a follow-up with approved=true. That is actionable guidance an agent would otherwise have to discover by trial. It does not say when to prefer this over wave_create_fish_widget or save_template, so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_delete_blockA
Delete a block from Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| approved | No | Set to true to confirm and execute | |
| block_id | Yes | Block ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the confirmation flow and helper-block prerequisite, but it does not state whether deletion is irreversible, what permissions are required, or what happens to existing block state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, followed by the confirmation flow and prerequisite. Every sentence contributes directly to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no output schema, and no annotations, the description covers the essential execution flow and prerequisite. It is nearly complete for invocation, though it leaves out post-deletion behavior and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines block_id and approved. The description adds the first-call confirmation behavior around approved, but does not add substantial meaning beyond the schema for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: deleting a block in Wave Terminal. It is distinguishable from widget-related siblings, but it does not explicitly contrast with wave_delete_widget or other deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the two-step invocation flow (first call returns confirmation, then approved=true) and names the prerequisite Seashell Helper block. It does not describe when to avoid this tool or when to use an alternative deletion tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_delete_widgetA
Remove a custom widget from Wave Terminal. First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Widget identifier to delete | |
| approved | No | Set to true to confirm and execute the deletion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the most important behavior: this is a destructive, two-phase operation requiring explicit approval. It stops short of stating irreversibility or what happens for an unknown id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the confirmation requirement front and center before the agent acts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no annotations and no output schema, the essential information (what it deletes, the approval handshake) is present. Minor gaps remain around the confirmation response shape and error handling for invalid ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, setting the baseline at 3. The description reinforces the approved workflow but adds no syntax or identifier-format detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Remove a custom widget from Wave Terminal'), which cleanly separates it from sibling mutators like wave_create_widget and wave_update_widget. Scope of the resource (custom widget) is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: the first call returns a confirmation and a second call with approved=true executes. It does not, however, contrast with wave_delete_block or explain when deletion is appropriate versus updating the widget.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_edit_fileA
Open a file for editing in Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the file to edit | |
| tab_id | Yes | Tab ID where the editor block will open | |
| approved | No | Set to true to confirm and execute |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and discloses the important confirmation workflow and helper-block prerequisite. It does not describe error behavior or full side effects, but it gives the key behavioral context an agent needs before invoking it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, followed by the confirmation rule and prerequisite. There is no wasted language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description adequately covers the action, approval flow, and prerequisite. It stops short of explaining file existence requirements, failure modes, or the exact confirmation response, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents file, tab_id, and approved. The description reinforces the approved workflow but adds little parameter meaning beyond the schema text, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: opening a file for editing in Wave Terminal. It is clear what the tool does, though it does not explicitly distinguish itself from the sibling wave_view_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the two-step usage flow: the first call returns a confirmation and approved=true executes. It also states the Seashell Helper block prerequisite, but it does not name alternatives or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_get_ai_presetsA
List all AI model presets configured in Wave Terminal (from ~/.waveterm/aipresets.json).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. "List" and the file path imply a read-only operation, but it does not explicitly state side-effect behavior, what happens if the presets file is missing, or how results are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that identifies the action, resource, and data source without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing tool, the description gives enough context to invoke it correctly. It could mention return format or missing-file behavior, but no output schema exists and the core operation is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics gap. The description adds nothing needed beyond the schema, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ("List") and resource ("AI model presets configured in Wave Terminal"), and adds the source file path. An agent can distinguish this read operation from sibling mutation tool wave_set_ai_preset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "List all" implies inspection/read usage, but the description does not explicitly say when to use this instead of alternatives such as wave_set_ai_preset. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_get_backgroundsA
List all tab background definitions in Wave Terminal (from ~/.waveterm/backgrounds.json).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real behavioral context by naming the backing file (~/.waveterm/backgrounds.json), which tells the agent this reads local disk state rather than live app memory. However, it says nothing about what happens if that file is missing, whether entries include image paths vs. color values, or whether the result can be empty. A read-only list tool is low-risk, but the disclosure stops short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The resource is named first and the supporting detail (source file) follows in parentheses, which is exactly the right ordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema and no annotations, the description covers the essential who/what: it lists tab background definitions from a specific file. The one remaining gap is the shape of the returned entries (names, colors, image paths), which an agent might want before deciding how to present results, but that is a minor omission for a simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List all tab background definitions in Wave Terminal'. The parenthetical source path (~/.waveterm/backgrounds.json) further pins down exactly what data is returned. It doesn't explicitly contrast with siblings like wave_get_settings or wave_get_widgets, but no sibling overlaps this resource, so disambiguation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this tool versus wave_get_settings or wave_get_widgets, and no note that it is a read-only inspection of a local config file. The only implicit cue is the word 'List', which signals a retrieval operation. Nothing states prerequisites (e.g., whether Wave Terminal must be installed) or what to do when no backgrounds are defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_get_scrollbackA
Get terminal scrollback content from a Wave block. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| block_id | Yes | Block ID to get scrollback from | |
| last_command_only | No | Return only the output of the last command (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read-only operation via 'Get' and discloses an important dependency (Seashell Helper), but it does not describe return format, scrollback limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste, and the primary purpose is front-loaded before the dependency requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool, the description covers purpose and a key prerequisite. Without an output schema, though, it should say more about what scrollback content is returned or any limits, leaving a noticeable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the input schema. The description adds no additional meaning about block_id or last_command_only beyond what the schema provides, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('terminal scrollback content') scoped to a Wave block. It distinguishes from generic command execution tools by naming scrollback specifically, though it does not explicitly contrast with siblings like get_command_output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the prerequisite ('Requires the Seashell Helper block'), which is useful context for when the tool is usable. However, it does not say when to choose this over alternatives such as get_command_output or wave_run_in_block, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_get_settingsA
Read Wave Terminal settings from ~/.waveterm/settings.json. Optionally filter by namespace prefix (e.g. 'ai', 'term', 'window', 'app').
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Optional namespace prefix to filter keys (e.g. 'ai', 'term', 'window', 'app') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It usefully discloses the backing file (~/.waveterm/settings.json), confirming a read-only operation against local disk, but says nothing about what is returned, whether sensitive values are redacted, or error behavior if the file is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the source location is front-loaded before the optional filter behavior. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool this is nearly self-sufficient: the agent knows the source file and how to narrow results. The only gap is return shape, but with no output schema and a trivially predictable key/value result, that omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter is already documented as an optional namespace prefix. The description only restates the same examples ('ai', 'term', 'window', 'app') without adding matching semantics — e.g. whether the prefix is a substring or dot-path match, or what happens when no match exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('Wave Terminal settings') plus the exact source file (~/.waveterm/settings.json). It is distinguishable from the mutating sibling wave_set_setting by the read-only framing, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The optional namespace filter is explained with concrete examples, giving implied usage context, but there is no explicit guidance on when to call this versus wave_set_setting or the other wave_get_* siblings, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_get_widgetsA
List all custom widgets configured in Wave Terminal (from ~/.waveterm/widgets.json).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does add useful context by disclosing the data source (~/.waveterm/widgets.json), which implies a local file read, but says nothing about behavior when the file is absent or malformed, nor about whether the read reflects on-disk state versus runtime state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope and source are both delivered before any trailing detail. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no annotations and no output schema, the description covers what is needed to select the tool. The one remaining gap is that with no output schema an agent doesn't know the shape of returned widget records (names, IDs, fields), though this is a minor omission for a simple listing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The schema property bag is empty and consistent with the description's 'all widgets' scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'List' plus a precisely scoped resource ('all custom widgets configured in Wave Terminal'), with the backing file named. This clearly separates it from the mutation siblings wave_create_widget / wave_update_widget / wave_delete_widget, though it doesn't address whether fish widgets (wave_create_fish_widget) are included in the listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use statement and no named alternative. For a zero-parameter read-only listing the usage is largely implied by the name and verb, so the gap is minor rather than misleading, but an agent gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_helper_statusA
Check whether the Seashell Helper block is connected. Shows which tool tier is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It discloses the two pieces of information returned (connection state, tool tier), which is useful, but says nothing about whether the call has side effects, how quickly it returns, or what an error/disconnected state looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, both front-loaded with the most important information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read probe with no output schema, the description conveys enough: what is checked and what is reported. A slightly fuller note on the possible values or the relationship to wave_connect_helper would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond the schema. The mention of 'tool tier' usefully hints at what the call reports.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check whether the Seashell Helper block is connected') plus the secondary output (available tool tier). An agent can tell this is a read-only status probe, though it never names the sibling it complements (wave_connect_helper) to sharpen differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: call it to see if the helper is connected and which tier is available. No explicit when-to-use guidance relative to wave_connect_helper, self_check, or check_interactive, and no stated preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_list_blocksA
List blocks in Wave Terminal, optionally filtered by workspace, tab, or view type. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Filter by view type: term, preview, web, sysinfo | |
| tab_id | No | Filter by tab ID | |
| workspace_id | No | Filter by workspace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose the required Seashell Helper block prerequisite. It implies a safe read via 'List' but does not cover pagination, error behavior, or what happens if the helper is unavailable, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the main action, and contains no waste. The prerequisite is placed after the core purpose without obscuring it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered list tool, the description covers the core action, filters, and a key prerequisite. But with no annotations and no output schema, it omits expected return content and behavioral details such as pagination or helper-missing errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all three filter parameters. The description mentions the same filter categories, matching the schema, but adds no extra parameter semantics beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource, 'List blocks in Wave Terminal,' and adds optional filters. It is clear enough to distinguish from block mutation tools and workspace listing tools, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains optional filtering by workspace, tab, or view type and notes the Seashell Helper dependency, which gives useful usage context. However, it does not say when to choose this tool over related listing or environment tools, and it gives no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_list_workspacesA
List all Wave Terminal workspaces with their IDs, names, icons, and colours. Requires the Seashell Helper block to be running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden, and it does flag the runtime dependency on the Seashell Helper block, which is real behavioral context. It does not say whether output is paginated, what happens when the helper is absent (error vs empty list), or how large the list may be — notable gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no filler. The capability statement comes first and the prerequisite follows, so the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, no-output-schema tool the description does most of the work: it names the returned fields and the runtime prerequisite. The only shortfall is failure-mode behavior when the helper is not running, which an agent would want to know before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to compensate for. The description instead spends its words on return-field meaning, which is the useful direction here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('List') plus its resource ('Wave Terminal workspaces') and even enumerates the returned fields (IDs, names, icons, colours). It is clearly a read-only enumeration tool, distinct from mutation siblings like wave_create_widget or the profile-oriented list_workspace_profiles, though it does not explicitly contrast itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states one concrete precondition ('Requires the Seashell Helper block to be running'), which is genuinely useful. However, it never says when to prefer this tool over list_workspace_profiles or how it relates to wave_helper_status / wave_connect_helper, so the agent has to infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_run_in_blockA
Run a command in a new Wave Terminal block. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for the command | |
| env | No | Environment variables to inject | |
| tab_id | Yes | Tab ID where the new block will be created | |
| command | Yes | Command to execute in the new block | |
| approved | No | Set to true to confirm and execute | |
| close_on_exit | No | Close the block when the command exits (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the most important trait: a confirmation gate before execution, plus a hard dependency on the Seashell Helper block. It omits whether the command runs with destructive potential, what the confirmation response contains, what happens to the block on failure or timeout, and whether close_on_exit default effects matter beyond the schema note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by the invocation contract and the prerequisite. Every sentence carries distinct information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter command-execution tool with a nested env object, no annotations, and no output schema, the description covers the flow and dependency but leaves the agent guessing about safety profile and what the confirmation response actually returns. Adequate but with clear gaps for a potentially destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including the nested env object are already documented in the schema. The description only restates the approved flag semantics, adding no format or interaction detail (e.g., how cwd interacts with tab_id) beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: run a command in a new Wave Terminal block. The 'new block' scope hints at how it differs from session-based execution, but the description never names a sibling such as execute_command or wave_create_block, so the agent must infer the boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It documents the two-step invocation contract (first call confirms, second call with approved=true executes) and a prerequisite (Seashell Helper block), which is real usage guidance. However, it gives no guidance on when to pick this over execute_command, execute_with_streaming, or ssh_execute, which occupy overlapping territory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_secret_deleteA
Delete a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name to delete | |
| reason | Yes | Why you are deleting this secret | |
| approved | Yes | Set to true to confirm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the Tier C approval gate, the mandatory non-empty reason, and the helper dependency — real behavioral context. It omits that deletion is irreversible and what happens if the key does not exist, which for a destructive mutation would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the gate conditions are front-loaded ahead of the dependency note, so the agent reads the blocking requirements first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter destructive tool with no annotations and no output schema, the description covers the essential gating and dependency facts. A note on irreversibility or failure modes would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents key, reason, and approved, and the baseline is 3. The description adds only one extra constraint ('non-empty reason'), which is a marginal gain over the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Delete a Wave Terminal secret') and is trivially distinguishable from the sibling read/write secret tools (wave_secret_list, wave_secret_set, wave_secret_get). The parenthetical also scopes the operation's gate conditions up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions for invocation: approved=true, a non-empty reason, and an available Seashell Helper. It does not, however, tell the agent what to do if the helper is unavailable or which sibling to use when the intent is actually to overwrite (wave_secret_set) rather than remove.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_secret_getA
Read a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). The plaintext value is withheld unless SEASHELL_ALLOW_SECRET_READ=1. Requires the Seashell Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name | |
| reason | Yes | Why you need this secret | |
| approved | Yes | Set to true to confirm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden and does much of it well: it discloses that the plaintext value may be withheld unless SEASHELL_ALLOW_SECRET_READ=1 and that a helper is required. It stops short of describing failure modes or what the response contains when withheld, but the key behavioral surprise is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with the core action and the gating requirements. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with no output schema, the description covers the essentials: what it returns (a plaintext value, conditionally), the preconditions, and the dependency. It could say more about what happens on a denied read, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: 'approved' must be true and 'reason' must be non-empty, which is a real constraint beyond the field descriptions. That lifts it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a Wave Terminal secret') plus the security tier, which clearly separates it from wave_secret_set and wave_secret_delete. It doesn't explicitly contrast with wave_secret_list, but 'read a secret' vs. listing secrets is reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives invocation preconditions (approved=true, non-empty reason) but never says when an agent should choose this over wave_secret_list or when not to attempt a read at all. The qualification rules are clear; the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_secret_listA
List all Wave Terminal secret keys (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you need to access secrets | |
| approved | Yes | Set to true after reviewing the action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reveal key behavioral facts: it is gated behind approval plus a justification, and it depends on the Seashell Helper being present. It stops short of disclosing what the listing returns (e.g. whether secret values are masked) or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly written sentence that front-loads the action and immediately follows with the auth/dependency constraints. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the two parameters and the helper dependency, but for a secrets-listing tool with no output schema it omits what is actually returned—critically, whether values are exposed or masked. That gap matters for an agent deciding how to handle the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented. The description reinforces the semantics by noting approved must be true and reason non-empty, but this largely restates the schema rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all Wave Terminal secret keys'), clearly distinguishable from the singular wave_secret_get sibling via 'all'. It does not explicitly name that sibling, so the differentiation is implicit rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Communicates the gating conditions required to use it (approved=true, non-empty reason) and its tier, which implies a sensitive-use path. However, it never states when to prefer this over wave_secret_get or wave_secret_set, leaving alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_secret_setB
Set a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name | |
| value | Yes | Secret value to store | |
| reason | Yes | Why you are setting this secret | |
| approved | Yes | Set to true to confirm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full load. It does disclose the approval gate and the external dependency ('Requires the Seashell Helper'), which is useful context beyond the schema, but it omits whether an existing key is overwritten, whether the value is stored/returned in plaintext, and what a successful or failed call looks like. For a mutation tool with zero annotation coverage that is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the gating requirements are front-loaded in the parenthetical. Efficient, though the parenthetical is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param required write tool with no annotations and no output schema, the description covers prerequisites and the approval gate but not overwrite behavior or return semantics. Adequate to invoke correctly, incomplete for predicting outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, and the baseline is 3. The description does add one constraint not in the schema — that reason must be non-empty — which is genuinely useful, but it adds nothing about approved semantics or value handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set a Wave Terminal secret'), which an agent can distinguish from the sibling wave_secret_list/get/delete tools by name and noun. It stops short of explicitly contrasting itself with those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives prerequisites (approved=true, non-empty reason, Seashell Helper required) but never says when to reach for this versus wave_secret_list or wave_secret_get, nor what happens if the key already exists. Usage is implied by the gate rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_set_ai_presetA
Create or update a Wave Terminal AI model preset in ~/.waveterm/aipresets.json. First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Preset identifier (e.g. 'claude-opus', 'gpt-4o') | |
| name | No | Display name for the preset (display:name) | |
| model | No | Model name (ai:model, e.g. 'claude-opus-4-5-20251001') | |
| ai_name | No | Display name for the AI (ai:name) | |
| api_type | No | API provider type (ai:apitype, e.g. 'anthropic', 'openai') | |
| approved | No | Set to true to confirm and execute the write | |
| base_url | No | API base URL (ai:baseurl) | |
| api_token | No | API token (ai:apitoken) — use with care | |
| max_tokens | No | Maximum token count (ai:maxtokens) | |
| timeout_ms | No | Request timeout in milliseconds (ai:timeoutms) | |
| display_order | No | Sort order in the preset dropdown (display:order) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and discloses important traits: it mutates a specific file, uses a confirmation-then-execute pattern, and requires an approval flag. It does not mention permission requirements, overwrite semantics for existing presets, or special handling for the api_token parameter beyond the schema's note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and file path, and immediately follows with the critical safety workflow. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential confirmation workflow and file destination for a mutation tool, which is important given the lack of annotations and output schema. However, for an 11-parameter write tool that handles an api_token, it omits details about overwrite behavior, permission requirements, and the shape of the first-call confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters thoroughly. The description only adds meaning for the approved parameter by explaining its role in the confirmation workflow, which is marginal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (create/update), resource (Wave Terminal AI model preset), and destination file (~/.waveterm/aipresets.json). It clearly distinguishes this write operation from the sibling read tool wave_get_ai_presets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-step confirmation workflow is explicitly described, including the requirement to pass approved=true to execute. However, there is no guidance on when to use this tool versus alternatives such as wave_get_ai_presets, nor are there explicit exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_set_appearanceA
Update Wave Terminal window or terminal appearance settings (writes to settings.json). First call returns a confirmation; pass approved=true to execute. Supported: font_size, font_family, transparency, tab_bar, ctrl_v_paste, confirm_quit, mac_option_is_meta, bell_sound, bell_indicator, default_new_block.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_bar | No | Tab bar position: 'top' or 'left' (app:tabbar) | |
| approved | No | Set to true to confirm and execute the write | |
| font_size | No | Terminal font size in points (term:fontsize) | |
| bell_sound | No | Enable terminal bell sound (term:bellsound) | |
| font_family | No | Terminal font family name (term:fontfamily) | |
| confirm_quit | No | Show quit confirmation dialog (app:confirmquit) | |
| ctrl_v_paste | No | Enable Ctrl+V paste (app:ctrlvpaste) | |
| transparency | No | Terminal background transparency 0.0–1.0 (term:transparency) | |
| bell_indicator | No | Show bell indicator in tab (term:bellindicator) | |
| default_new_block | No | Default block type for new blocks (app:defaultnewblock) | |
| mac_option_is_meta | No | Treat Option key as Meta in terminal (term:macoptionismeta) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does substantial work: it declares a persistent mutation to settings.json and discloses the confirm-before-write gate, which is the key behavioral trait. Gaps remain on permissions, whether a restart or reload is required for changes to take effect, and whether unspecified settings are preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and its blast radius, followed by the confirmation protocol, then the supported set. The key enumeration is the only mildly redundant part since the schema already lists them, but as a scannable capability summary it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter optional-field mutation with no annotations and no output schema, the description covers the essential unknowns: that it writes files, that it is gated by approved=true, and what is configurable. It stops short of describing merge-vs-replace semantics, validation failures, or whether the confirmation call echoes the proposed changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each property carries a description plus its underlying settings key (e.g. term:fontsize), so the schema already does the heavy lifting. The description's list of supported keys largely restates the schema property names without adding types, ranges, or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource ("Update Wave Terminal window or terminal appearance settings") and adds a durable side-effect ("writes to settings.json"), which an agent can act on. It lists exactly which keys are mutable, separating it from the broader wave_set_setting, but it never names the sibling tools it competes with (wave_set_setting, wave_set_theme), so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-step protocol ("First call returns a confirmation; pass approved=true to execute") is real operational guidance that changes how the agent calls the tool and is the most valuable sentence here. What's missing is routing guidance: with wave_set_setting and wave_set_theme in the sibling set, there's no statement of when to prefer this tool over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_set_settingA
Update a single Wave Terminal setting in settings.json. First call returns a confirmation; pass approved=true to execute. Examples of keys: 'ai:model', 'term:theme', 'term:fontsize', 'app:tabbar'.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Setting key in Wave's colon-namespaced format (e.g. 'ai:model', 'term:theme') | |
| value | Yes | Value to set (string, number, or boolean) | |
| approved | No | Set to true to confirm and execute the write |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the important two-phase confirm/execute behavior for this mutation. It does not say whether changes persist to disk immediately, whether a restart or reload is required for the setting to take effect, or what happens on an invalid key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the action stated first and the confirmation flow immediately after — well front-loaded. The trailing examples list is mildly redundant with the key parameter description but still useful for key discovery.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The two-step write flow is covered and no output schema exists to explain, so the essentials are present. For a mutation tool with zero annotations, it is thin on persistence, validation, and error behavior, and says nothing about how it relates to the many specialized set_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both key and approved are fully documented in the schema, and the description's key examples ('ai:model', 'term:theme') repeat what the schema already shows. Baseline 3 applies; no additional semantics (value coercion, key format edge cases) are added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Update a single Wave Terminal setting in settings.json', and scopes it to one setting at a time. It does not distinguish itself from near-siblings like wave_set_theme, wave_set_appearance, or wave_set_ai_preset, which an agent could reasonably pick instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operational context: first call returns a confirmation and approved=true is required to execute, which tells the agent exactly how to drive the call sequence. It stops short of saying when to prefer this generic tool over the dedicated siblings (wave_set_theme, wave_set_ai_preset, wave_set_appearance).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_set_themeA
Set the Wave Terminal theme (writes 'term:theme' to settings.json). First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | Yes | Theme name (e.g. 'nord', 'dracula', 'solarized-dark', 'github-dark') | |
| approved | No | Set to true to confirm and execute the write |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It usefully reveals that this writes to settings.json and uses a two-step confirmation flow, but it does not state permission requirements, reversibility, what the confirmation contains, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no wasted wording. The key behavior, settings write and approval flow, is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the essential confirmation mechanism and settings file target. It remains incomplete on permissions, reversibility, failure behavior, and relationship to similar settings/appearance tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the theme and approved parameters are already documented in the schema. The description reinforces the approved parameter's role in the confirmation workflow but does not add substantial parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: setting the Wave Terminal theme, and adds implementation detail that it writes 'term:theme' to settings.json. It does not differentiate from sibling settings/appearance tools such as wave_set_setting or wave_set_appearance, so it is clear but lacks sibling routing guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives procedural usage for the confirmation flow: first call returns a confirmation, then pass approved=true to execute. However, it does not say when to use this instead of wave_set_setting or wave_set_appearance, nor does it state prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_update_widgetA
Update an existing Wave Terminal widget. First call returns a confirmation; pass approved=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Widget identifier to update | |
| cwd | No | New working directory | |
| icon | No | New icon name | |
| view | No | New block view type | |
| color | No | New colour hex code | |
| label | No | New display label | |
| hidden | No | Hide/show the widget in the widget bar | |
| command | No | New command | |
| approved | No | Set to true to confirm and execute the write | |
| description | No | New description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the confirmation gate and approved=true execution flow, which is helpful, but it does not state whether the update is destructive, whether fields are partially updated, what permissions are required, or what the confirmation contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and immediately followed by the confirmation requirement. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is fully documented, and the approval flow is mentioned. However, for a 10-parameter mutation tool with no annotations and no output schema, the description does not explain partial-update behavior, side effects, permissions, or what the confirmation response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters. The description only reinforces the approved parameter flow and adds no syntax or constraints beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Update an existing Wave Terminal widget.' This clearly distinguishes updating an existing widget from creating or deleting one, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context for the two-step confirmation flow: the first call returns a confirmation, and approved=true executes the write. It does not explicitly state when to use this versus wave_create_widget or wave_delete_widget, but 'existing' implies the situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wave_view_fileB
Open a file in a Wave Terminal preview block. Requires the Seashell Helper block.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to the file to preview | |
| tab_id | Yes | Tab ID where the preview block will open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that a preview block is opened and that a helper block is required, but does not explain side effects, whether existing blocks are replaced, permission requirements, or what happens if the helper is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted text. The main purpose is front-loaded, and the prerequisite follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter UI action with full schema coverage and no output schema, the description is mostly complete. It covers purpose and the Seashell Helper prerequisite, though it could say more about side effects and failure mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both tab_id and file are already documented in the input schema. The description adds no additional parameter meaning beyond that, which is acceptable given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: opening a file in a Wave Terminal preview block. That clearly distinguishes it from filesystem reads or editing, though it does not explicitly contrast with sibling tools such as wave_edit_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a key prerequisite: the Seashell Helper block must be available. It implies previewing a file rather than editing it, but does not explicitly say when to choose this over wave_edit_file or other preview-related tools.
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.
69 tool updates
v2.2.5- First observed
add_file_watch - First observed
capture_environment - First observed
check_interactive - First observed
cleanup_sessions - First observed
close_session - First observed
copy_to_clipboard - First observed
delete_ssh_profile - First observed
delete_workspace_profile - First observed
diff_environment - First observed
execute_and_parse - First observed
execute_command - First observed
execute_pipeline - First observed
execute_with_auto_retrieve - First observed
execute_with_streaming - First observed
get_command_output - First observed
get_environment_context - First observed
inbox_count - First observed
inbox_history - First observed
list_file_watches - First observed
list_recent_commands - First observed
list_sessions - First observed
list_ssh_profiles - First observed
list_templates - First observed
list_workspace_profiles - First observed
load_workspace_profile - First observed
open_terminal_tab - First observed
preview_command - First observed
read_from_clipboard - First observed
read_my_replies - First observed
read_session_transcript - First observed
read_user_inbox - First observed
remove_file_watch - First observed
reply_to_user - First observed
run_template - First observed
save_ssh_profile - First observed
save_template - First observed
save_workspace_profile - First observed
self_check - First observed
send_to_session - First observed
set_notification_preference - First observed
ssh_execute - First observed
suggest_command - First observed
wave_bootstrap_workspace - First observed
wave_connect_helper - First observed
wave_create_block - First observed
wave_create_fish_widget - First observed
wave_create_widget - First observed
wave_delete_block - First observed
wave_delete_widget - First observed
wave_edit_file - First observed
wave_get_ai_presets - First observed
wave_get_backgrounds - First observed
wave_get_scrollback - First observed
wave_get_settings - First observed
wave_get_widgets - First observed
wave_helper_status - First observed
wave_list_blocks - First observed
wave_list_workspaces - First observed
wave_run_in_block - First observed
wave_secret_delete - First observed
wave_secret_get - First observed
wave_secret_list - First observed
wave_secret_set - First observed
wave_set_ai_preset - First observed
wave_set_appearance - First observed
wave_set_setting - First observed
wave_set_theme - First observed
wave_update_widget - First observed
wave_view_file
TDQS
Scored across 69 tools
Several clusters of tools have fuzzy boundaries: execute_command, execute_with_auto_retrieve, execute_with_streaming, execute_pipeline, execute_and_parse, preview_command and suggest_command all occupy 'run a command' space, and wave_set_setting / wave_set_theme / wave_set_appearance overlap heavily. The verbose descriptions do mitigate this, but an agent still faces real misselection risk across the execution and Wave-config families. wave_create_widget vs wave_create_fish_widget vs wave_bootstrap_workspace are another near-duplicate trio.
Predominantly consistent snake_case verb_noun (execute_command, list_templates, save_ssh_profile, wave_list_blocks), with the wave_ family acting as a clean namespace. Minor deviations exist (ssh_execute inverts the verb_noun order, add_file_watch departs from the execute/list pattern), but overall readable and predictable.
69 tools is far beyond a well-scoped surface and includes many convenience wrappers (wave_create_fish_widget wraps wave_create_widget). The count reflects an accumulation of features rather than a deliberately designed set, and the sheer volume contributes directly to the disambiguation problems.
Coverage is genuinely broad and lifecycle-oriented: command execution, sessions, templates, environment snapshots, workspace profiles, SSH profiles, file watches, Wave config/blocks/secrets, and the inbox/reply/transcript flow. Small gaps remain — templates have list/save/run but no delete or update, and environment snapshots can be captured and diffed but not listed or removed.
Maintenance
Related MCP Connectors
MCP server for Translation Services
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server for Speech-to-Text
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server that enables Claude Desktop to communicate with A2A protocol agents, allowing Claude to access extended capabilities through agent interactions.322-
- AlicenseBqualityDmaintenanceMCP server for managing Claude Code conversation sessions1229 npmMIT
- AlicenseAqualityDmaintenanceAn MCP server that bridges Claude Desktop and Claude Code by letting Desktop read and interact with Claude Code Remote Control sessions, enabling cross-agent coordination.64MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that lets you switch between different MCP configuration profiles directly from inside Claude Desktop.-