cmuxlayer
cmuxLayer is an MCP server providing AI agents with programmatic control over terminal workspaces and multi-agent orchestration through 22 tools.
Terminal Control
Create split panes (terminal or browser) in any direction (left, right, up, down)
Send text input or special key presses (Enter, Escape, Tab, Ctrl-C) to any terminal
Read terminal screen content, including scrollback buffer
Rename tabs and close panes
Browser surfaces: open URLs, navigate, take snapshots, click elements, type text, evaluate JavaScript, wait for elements
AI Agent Lifecycle Management
Spawn AI agents (Claude Code, Codex, Gemini, Cursor, Kiro) in new terminal panes with a task prompt
Send follow-up prompts to running agents
Wait for a single agent to reach a target state (ready, working, idle, done, error)
Wait for all agents in a group to complete, with fail-fast on error
Interact with agents: interrupt, switch models, resume sessions, run slash commands, send MCP messages
Gracefully stop (Ctrl-C) or force-kill one or more agents
Workspace & State Management
List all terminal/browser surfaces across workspaces, with optional screen previews
List active agents, filtered by state, repo, or model; view child agents with live screen status
Get full agent state (including session ID) and extract structured output between delimiter markers
Set sidebar key-value status messages (with optional icon/color) and progress indicators (0.0–1.0)
Display notification banners in cmux
Performance: Uses Unix socket connection for ~1,423× speedup over CLI subprocess, with auto-reconnect.
cmuxLayer
cmuxLayer exposes a 10-tool public MCP surface for controlling cmux terminal workspaces and managing CLI agents.
Quick start
brew install etanhey/layers/cmuxlayer # stable, pinned release
brew install --HEAD etanhey/layers/cmuxlayer # or: dogfood the latest mainThis installs the cmuxlayer command plus cmuxlayer-app-server and
cmuxlayer-proxy. cmux must be running.
For fleet wiring, versions, dogfooding, and the CMUX_SOCKET_PATH pin, see
docs/releases-and-brew.md.
Then set up this machine:
cmuxlayer initThe wizard selects spawnable repositories, per-repo launchers or direct CLI
launches, and approval behavior. It writes ~/.config/cmuxlayer/env.sh and, in
launcher mode, a launcher registry. cmuxlayer reads both at startup, including
when an MCP client starts it from a GUI. The wizard asks before replacing a file
and creates a backup first.
For scripted installs, pass --yes with --repo <name>=<path>. cmuxlayer does
not assume a fixed repository layout. See
docs/fresh-install.md for the walkthrough and
docs/registry-optional-spawn.md for how each
lane behaves.
Optional fleet sidebar
Install the optional lane-grouped fleet view with:
bun run install:fleet-sidebarcmuxLayer refreshes ~/.config/cmux/sidebars/fleet.swift from its reconciled
live-agent snapshot. It does not change cmux settings or replace the stock
sidebar. Activate it from the sidebar toggle by choosing fleet.
Development and screenshot QA use a separate picker entry:
bun run install:fleet-sidebar:dev
bun run devThose commands publish only
~/.config/cmux/sidebars/fleet-dev.swift; choose fleet-dev in cmux while
testing. Runtime tests must inject a temporary publisher outputPath.
Add to your MCP config:
Codex CLI / T3 Code
T3 Code inherits MCP servers from the Codex CLI config file at ~/.codex/config.toml (or $CODEX_HOME/config.toml).
[mcp_servers.cmuxlayer]
command = "cmuxlayer"Claude Code, Cursor, VS Code, Claude Desktop
{
"mcpServers": {
"cmuxlayer": {
"command": "cmuxlayer"
}
}
}To keep only a per-session resident subset of tools, set
CMUXLAYER_DEFAULT_PALETTE to comma-separated bare tool names, for example
list_surfaces,spawn_agent,send_to. The server also exposes expand_palette,
which makes every deferred tool available for the rest of that MCP session.
When unset or blank, the signed 10-tool thin-core default applies. When set, the
environment value overrides that default for the session. Unknown names are
warned and ignored while valid names still load.
Autonomous prompt resolution is experimental and disabled by default.
cmuxlayer detects prompt choosers, marks the agent blocked_on_prompt, and
escalates without sending a key. Setting
CMUXLAYER_EXPERIMENTAL_PROMPT_AUTO_RESOLVE=1 restores the known-imperfect
Escape-based resolver for isolated testing only; do not enable it for fleet use.
Config locations: Codex CLI / T3 Code
~/.codex/config.toml(or$CODEX_HOME/config.toml) | Claude Code.mcp.jsonorclaude mcp add cmuxlayer -s user -- cmuxlayer| Cursor.cursor/mcp.json| VS Code.vscode/mcp.json| Claude Desktop — see MCP docs for platform-specific paths
Related MCP server: hyperpanes-mcp
What you can do
Tell your AI agent things like:
"Split a pane to the right and run my test suite there"
"Spawn a Claude Code agent in a new pane to refactor auth.ts"
"Read the screen of surface:2 and tell me if the build passed"
"Wait for all agents to finish, then read their output"
"Set the sidebar status to show our deploy progress"
cmuxLayer retains 45 internal tool definitions; only 10 are registered and callable through MCP. The other 35 are not exposed through ToolSearch or any other MCP path. reorder_surface is the single approved deletion. read_screen parses agent metadata (status, model, tokens, context %) for Claude Code, Codex, Gemini, and Cursor.
Agent routing workflow
For managed agents, use the agent-first path: list_agents to find the target, send_to to deliver work by agent_id, then wait_for when you need completion. send_to also preserves the registry-independent escape hatch: use mode:"surface", mode:"command", or mode:"key" with a raw surface ref for shells, launch/resume commands, and stuck-pane recovery.
See Agent Routing and Handling Workflow for the full operator playbook, including stuck surface recovery and safe /mcp menu reconnects.
MCP tools (10 registered and callable)
All public tools include ToolAnnotations that clients can use in safety policy.
Public MCP surface — spawn_agent report_to_parent send_to read_screen list_agents wait_for control_health close_surface update_surface list_surfaces
The other 35 internal definitions, including interact, are not callable. The detailed inventory below names 44 live definitions; the 45th source registration is a removed error-only tombstone and is omitted from operator guidance.
Terminal control (16) — list_surfaces control_health select_workspace create_workspace delete_workspace new_split new_surface move_surface send_input send_command send_key read_screen rename_tab close_surface update_surface browser_surface
Agent lifecycle (13) — spawn_agent new_worktree_split spawn_in_workspace send_to send_to_agent wait_for wait_for_all interact stop_agent kill supersede_agent_goal broadcast report_to_parent
Metacomm (agent inbox, 2) — dispatch_to_agent inbox_check
Workspace state (7) — list_agents my_agents get_agent_state read_agent_output notify set_status set_progress
Monitor registry (6) — register_monitor signal_monitor deregister_monitor list_monitors query_monitor_registry arm_watch
Read-only (10)
Tool | What it does |
| List all surfaces across workspaces |
| Report socket, binary, process, and job-control diagnostics |
| Read terminal output with parsed agent status |
| Full state of a tracked agent |
| All agents, with optional filters |
| Children of a parent agent with live screen status |
| Structured output between delimiter markers |
| Inspect an agent's inbox channel: pending messages, monitor liveness, stale dispatches |
| List shared monitor-registry records |
| Query monitor gates and liveness metadata |
Mutating (32)
Tool | What it does |
| Switch the active workspace |
| Create a new named workspace |
| Delete a workspace after live-agent and caller-workspace safety checks |
| Deprecated one-release alias; use |
| Create a tab in an existing pane |
| Move a surface to another pane or position |
| Deprecated one-release alias for |
| Deprecated one-release alias for |
| Deprecated one-release alias for |
| Rename a surface tab |
| Update a surface title or metadata |
| Show a cmux notification banner |
| Set sidebar status key-value pair |
| Set progress indicator (0.0-1.0) |
| Interact with browser surfaces |
| Spawn a CLI agent and return an |
| Deprecated one-release alias; use |
| Deprecated one-release alias; create/reuse a workspace and call |
| Append a task to an agent's inbox file (deterministic write channel) |
| Send by agent ID or raw surface using `mode:"agent" |
| Deprecated one-release alias for |
| Wait for one |
| Deprecated one-release alias for |
| Send interactive input (confirm, cancel, resume) |
| Fan out a guarded message to agents by role |
| Report structured completion to a parent agent |
| Replace a managed agent's active file-backed goal |
| Register or re-arm a monitor deadman record |
| Refresh a monitor heartbeat |
| Mark a monitor intentionally stopped |
| Arm a lifecycle watch for an agent transition |
Destructive (3)
Tool | What it does |
| Close a terminal or browser pane |
| Gracefully stop an agent |
| Force-kill agent processes |
Supported agents
CLI | Command | Auto-detected |
Claude Code |
| status, model, tokens, context % |
Codex |
| status, model, context % |
Gemini CLI |
| status, model, tokens, context % |
Cursor |
| status, model, tokens, context % |
Kiro CLI |
| spawn and lifecycle only; no Kiro-specific screen parser |
|
Architecture
AI Agent ─── MCP ───> cmuxLayer ─── Unix socket ───> cmux
├── Agent engine (spawn → monitor → teardown)
├── Screen parser (5 agent formats)
├── Mode policy (autonomous vs manual)
├── State manager + event log
├── Metacomm READ — harness JSONL (real tokens/context/model)
└── Metacomm WRITE — per-agent inbox file + Monitor dispatchThe socket client connects to cmux through a Unix socket. It reconnects after a disconnect and falls back to a CLI subprocess when the socket is unavailable.
Connection | Latency | Speedup |
CLI subprocess | ~142ms | baseline |
Unix socket | ~0.1ms | 1,423x |
Troubleshooting
cmux is not running cmuxLayer requires a running cmux instance. Install it first, then start a cmux session before using cmuxLayer.
Tools not appearing in Codex CLI or T3 Code
Restart the client after adding cmuxlayer to ~/.codex/config.toml. If you use a custom Codex home, verify $CODEX_HOME/config.toml contains the same mcp_servers.cmuxlayer entry.
Tools not appearing in Claude Code
Restart Claude Code after adding the MCP config. Run claude mcp list to verify cmuxlayer is connected.
Socket connection failed
cmuxLayer auto-discovers the cmux socket (macOS: ~/Library/Application Support/cmux/cmux.sock). Override with CMUX_SOCKET_PATH if needed.
"Cannot resolve a working directory for repo ..."
cmuxLayer could not find that checkout. Run cmuxlayer init to register it, or
set CMUXLAYER_REPO_HOME to the colon-separated directories holding your
repositories. The error lists every path it searched.
Testing
bun run test # 3023 tests via vitest
npm run typecheck # Type checkingGit hooks
Enable project hooks to run the regression gate automatically on git push:
git config core.hooksPath .githooksThis enables .githooks/pre-push, which runs scripts/run_tests.sh and blocks pushes on regression failures.
Development
npm install
npm run dev # Run with tsx (hot reload)
npm run build # Compile TypeScript
npm start # Run compiled outputContributing
See CONTRIBUTING.md for development setup and PR guidelines.
License
Apache 2.0 — see LICENSE.
Part of the Golems AI agent ecosystem. cmuxlayer.etanheyman.com | Built by @EtanHey.
Available Tools
20 toolsbrowser_surfaceC
Interact with a browser surface (open, navigate, snapshot, click, type, eval, wait)
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Browser action to perform | |
| surface | No | Target surface ref | |
| workspace | No | Target workspace ref | |
| url | No | URL for open/goto actions | |
| selector | No | CSS selector for click/type/wait actions | |
| text | No | Text for type action | |
| script | No | JavaScript for eval action | |
| timeout_ms | No | Timeout for wait action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it lists action types, it doesn't explain what 'surface' and 'workspace' refs are, whether actions are synchronous/asynchronous, error handling, or performance characteristics. For a complex 8-parameter tool with multiple action types, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that efficiently lists all available actions. It's front-loaded with the core purpose and wastes no words. Every element earns its place in this compact format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 8 parameters, multiple action types, no annotations, and no output schema, the description is inadequate. It doesn't explain return values, error conditions, or the relationships between parameters for different actions. The agent would struggle to use this tool correctly without significant trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameters thoroughly. The description adds minimal value by listing action names that correspond to the 'action' enum values, but doesn't provide additional semantic context beyond what's in the schema. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Interact') and resource ('browser surface'), and lists the available actions. However, it doesn't explicitly differentiate this tool from sibling tools like 'send_input', 'send_key', or 'read_screen' which might have overlapping browser interaction capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides no guidance on when to use this tool versus alternatives. With multiple sibling tools that might handle browser interactions (send_input, send_key, read_screen, wait_for), there's no indication of when this multi-action browser tool is preferred over more specialized tools or vice versa.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_surfaceC
Close a surface (terminal or browser pane)
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref | |
| workspace | No | Target workspace ref |
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 mentions the action ('Close') but doesn't disclose behavioral traits such as whether this requires specific permissions, if the closure is reversible, what happens to unsaved data, or any side effects. For a mutation tool with zero annotation coverage, this is a significant gap in 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?
The description is a single, efficient sentence that front-loads the core action and resource. It uses minimal words ('Close a surface') with a clarifying parenthetical ('terminal or browser pane'), making it zero waste and easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool performs a mutation (closing a surface) with no annotations and no output schema, the description is incomplete. It lacks information on prerequisites, effects, error conditions, or return values. For a tool that modifies state, more context is needed to guide safe and effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('surface' and 'workspace') with descriptions. The description does not add any meaning beyond what the schema provides, such as explaining what a 'surface ref' entails or when 'workspace' is required. Baseline 3 is appropriate as the schema handles the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Close') and the resource ('a surface'), specifying it can be a terminal or browser pane. It distinguishes the tool's purpose from siblings like 'list_surfaces' or 'new_split', but doesn't explicitly differentiate from 'kill' which might also terminate something, though 'close' implies a less destructive action on UI elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 is provided on when to use this tool versus alternatives. For example, it doesn't specify if 'close_surface' should be used instead of 'kill' for surfaces, or under what conditions (e.g., after completing a task). The description only states what it does, not when or why to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_stateB
Get the full state of an agent including cli_session_id for resume.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID |
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 the tool retrieves state information, implying a read-only operation, but doesn't clarify permissions, rate limits, or what 'full state' entails beyond cli_session_id. For a tool with no annotations, this leaves significant gaps in understanding its behavior and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get the full state of an agent') and adds a specific detail ('including cli_session_id for resume'). There is no wasted text, and it's structured to convey essential information concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter with full schema coverage and no output schema, the description is minimally adequate. It specifies what the tool does and a key inclusion (cli_session_id), but lacks details on return values, error handling, or behavioral traits. For a simple read operation, it's functional but could be more informative to compensate for the absence of annotations and 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?
The schema description coverage is 100%, with the parameter 'agent_id' clearly documented in the schema. The description adds no additional meaning beyond what the schema provides, such as format examples or context for the agent_id. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'full state of an agent', specifying it includes 'cli_session_id for resume'. This distinguishes it from siblings like 'list_agents' (which lists agents) or 'read_agent_output' (which reads output). However, it doesn't explicitly differentiate from all siblings, such as 'set_status' or 'stop_agent', which are clearly different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing agent), exclusions, or comparisons to siblings like 'list_agents' for basic info or 'read_agent_output' for specific data. Usage is implied only by the action described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interactA
Send a message to an agent, or perform an agent action (interrupt, model switch, resume, skill, usage). If the agent is alive, sends directly. If not found, returns an error — use spawn_agent first.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | Agent ID (from spawn_agent or list_agents) | |
| action | Yes | Action to perform | |
| text | No | Text to send (required for action=send) | |
| model | No | Model to switch to (required for action=model) | |
| session_id | No | Session ID to resume (optional for action=resume) | |
| command | No | Slash command to run (required for action=skill) |
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 discloses key behavioral traits: the tool can fail with an error if the agent isn't found, and it requires the agent to be 'alive' for direct sending. However, it doesn't cover other important aspects like authentication needs, rate limits, side effects of different actions, or what 'alive' means operationally.
Agents need to know what a tool does to the 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 extremely concise and front-loaded: two sentences that efficiently cover purpose, conditions, and error handling. Every word earns its place with zero waste 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?
Given the tool's complexity (6 parameters, multiple action types) and no annotations or output schema, the description is adequate but incomplete. It covers the basic workflow and error case, but lacks details on action-specific behaviors, return values, or interaction patterns with sibling tools like 'send_to_agent'. For a multi-action tool with no structured output documentation, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple 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 6 parameters thoroughly. The description adds minimal value beyond the schema—it mentions 'text' for 'send' and 'model' for 'model' actions implicitly, but doesn't provide additional semantic context or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a message to an agent, or perform an agent action (interrupt, model switch, resume, skill, usage).' It specifies the verb ('send' or 'perform') and resource ('agent'), but doesn't explicitly differentiate from sibling tools like 'send_to_agent' or 'stop_agent' beyond mentioning 'spawn_agent' for error cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides clear context for when to use the tool: 'If the agent is alive, sends directly. If not found, returns an error — use spawn_agent first.' This gives explicit guidance on prerequisites and error conditions, though it doesn't compare alternatives like 'send_to_agent' or explain when to choose specific actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
killA
Stop one or more agents. Target can be a single agent ID, an array of IDs, or 'all'.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Agent ID, array of agent IDs, or 'all' to stop all agents | |
| force | No | Force kill (SIGKILL) instead of graceful (Ctrl+C) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the action ('Stop') and target flexibility, but doesn't mention side effects (e.g., agent termination consequences), permissions needed, or error handling. It adds basic context but lacks rich behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with core action, zero waste. Every word earns its place by specifying target options concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is minimal but adequate for a destructive tool with good schema coverage. It covers the what but lacks details on outcomes, errors, or prerequisites, leaving gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., no extra syntax or format details). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Stop') and resource ('one or more agents'), distinguishing it from siblings like 'stop_agent' by specifying it can handle multiple targets including 'all'. It's specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying target types (single ID, array, or 'all'), but doesn't explicitly state when to use this vs. 'stop_agent' or other alternatives. It provides clear context but lacks explicit exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agentsB
List all agents with optional filters by state, repo, or model.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Filter by state | |
| repo | No | Filter by repository | |
| model | No | Filter by model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It doesn't mention whether this is a read-only operation, if it requires authentication, potential rate limits, pagination behavior, or what format the returned list takes. 'List all agents' implies a read operation but lacks crucial details.
Agents need to know what a tool does to the 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, efficient sentence that communicates the core functionality and filtering options without any wasted words. It's appropriately sized for this straightforward 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?
For a list operation with no annotations and no output schema, the description is minimally adequate but leaves significant gaps. It doesn't explain what information is returned about each agent, whether results are paginated, or any authentication requirements. The 100% schema coverage helps, but more behavioral context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple 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 three parameters with their types and the state enum values. The description adds marginal value by mentioning the three filter types but doesn't provide additional semantic context beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all agents'), and specifies optional filtering capabilities. However, it doesn't explicitly differentiate from sibling tools like 'get_agent_state' or 'spawn_agent', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'get_agent_state' for single-agent queries or 'spawn_agent' for creation. The description only states what the tool does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_surfacesC
List all surfaces (terminal/browser panes) across workspaces
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Filter by workspace ref | |
| include_screen_preview | No | Include screen content preview | |
| preview_lines | No | Number of preview lines |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'List all surfaces' but doesn't disclose behavioral traits such as whether this is a read-only operation, potential rate limits, authentication needs, or how results are returned (e.g., pagination, format). For a tool with no annotations, this is a significant gap in 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?
The description is a single, efficient sentence with zero waste. It front-loads the core purpose ('List all surfaces') and adds clarifying details in parentheses and a phrase. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool with three parameters and potential complexity. It doesn't explain return values, error conditions, or behavioral context, leaving the agent under-informed. For a list operation with filtering options, more completeness is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the three parameters. The description adds no additional meaning beyond implying filtering by workspace and preview options, which are already covered in the schema. This meets the baseline score of 3, as the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'surfaces (terminal/browser panes) across workspaces', making the purpose unambiguous. It distinguishes the scope as 'across workspaces', which is helpful. However, it doesn't explicitly differentiate from sibling tools like 'read_screen' or 'browser_surface', which might handle specific surface interactions, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions, or compare to siblings like 'list_agents' or 'read_screen' for related data. This leaves the agent without context for tool selection, relying solely on the name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_splitC
Create a new split pane (terminal or browser)
| Name | Required | Description | Default |
|---|---|---|---|
| direction | Yes | Split direction | |
| workspace | No | Target workspace ref | |
| surface | No | Target surface ref | |
| pane | No | Target pane ref | |
| type | No | Surface type | terminal |
| url | No | URL for browser surfaces | |
| title | No | Tab title | |
| focus | No | Focus the new pane |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention permissions needed, side effects (e.g., if it modifies layout or requires active workspace), error conditions, or what happens on success (e.g., returns a pane ref). This leaves significant gaps 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?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly without unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 complexity of an 8-parameter mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral context, usage scenarios, and expected outcomes, which are crucial for an agent to invoke this tool correctly in a multi-tool environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters. The description adds no additional meaning beyond implying 'type' can be 'terminal' or 'browser', which is already in the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and the resource ('new split pane'), specifying it can be either a terminal or browser type. It distinguishes from siblings like 'browser_surface' by focusing on splitting rather than creating standalone surfaces, though it doesn't explicitly contrast with all 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?
No guidance is provided on when to use this tool versus alternatives like 'browser_surface' or 'spawn_agent'. The description lacks context about prerequisites, such as needing an existing pane to split from, or exclusions for when splitting is not applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_agent_outputA
Extract structured output from an agent's terminal between delimiter markers (e.g., REVIEW_OUTPUT_START / REVIEW_OUTPUT_END). Returns the content between the markers, or null if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref (e.g., 'surface:78') | |
| tag | No | Delimiter tag name. Looks for {TAG}_START and {TAG}_END markers. Default: OUTPUT (matches OUTPUT_START/OUTPUT_END). Examples: REVIEW_OUTPUT, SYNTHESIS_OUTPUT, PUSHBACK_OUTPUT | OUTPUT |
| lines | No | Number of screen lines to scan (default: 200) | |
| workspace | No | Target workspace ref |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the extraction behavior and return value (content between markers or null if not found), but doesn't mention error conditions, performance characteristics, or what happens if markers are malformed. It provides basic operational context but lacks depth.
Agents need to know what a tool does to the 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 perfectly concise - a single sentence that states the purpose, mechanism, and return behavior with zero wasted words. It's front-loaded with the core functionality and efficiently communicates essential 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 tool with 4 parameters, 100% schema coverage, but no annotations or output schema, the description provides adequate basic context about what the tool does and its return behavior. However, it lacks information about error handling, performance considerations, or detailed behavioral traits that would be helpful for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all parameters. The description mentions delimiter markers and the null return case, but doesn't add significant semantic context beyond what the schema provides about parameters like 'surface', 'tag', 'lines', or 'workspace'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('extract structured output'), target resource ('from an agent's terminal'), and mechanism ('between delimiter markers'). It distinguishes from siblings like 'read_screen' (general screen reading) and 'get_agent_state' (state monitoring) by focusing on delimited content extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides clear context for when to use this tool (when needing to extract content between specific delimiter markers in an agent's terminal). However, it doesn't explicitly mention when NOT to use it or name specific alternative tools for different extraction scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_screenC
Read the current screen content of a terminal surface
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref | |
| workspace | No | Target workspace ref | |
| lines | No | Number of lines to read | |
| scrollback | No | Include scrollback buffer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions reading screen content but doesn't specify permissions needed, whether this is a read-only operation, potential rate limits, or what format the output returns. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose and doesn't waste space on redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the output looks like (text format, structure), doesn't mention error conditions, and provides minimal behavioral context. Given the complexity of terminal screen reading, more completeness 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 description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any additional semantic context about parameters beyond what's in the schema (e.g., explaining what a 'surface ref' represents or when to use scrollback). This meets the baseline for high 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?
The description clearly states the action ('Read') and resource ('current screen content of a terminal surface'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'read_agent_output' or 'browser_surface', which might have overlapping reading functionality in different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 is provided on when to use this tool versus alternatives like 'read_agent_output' or 'browser_surface'. The description only states what it does, not when it's appropriate or what prerequisites might be needed for accessing terminal surfaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_tabC
Rename a surface tab
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref | |
| title | Yes | New tab title | |
| workspace | No | Target workspace ref | |
| preserve_prefix | No | Only replace the task suffix, keeping launcher prefix |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'Rename a surface tab' implies a mutation operation but doesn't specify permissions needed, whether the change is reversible, error conditions, or what happens to the surface state during renaming. For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the 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, efficient sentence with zero wasted words. It's front-loaded with the core action and immediately communicates the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 is insufficiently complete. It doesn't explain what 'rename' entails operationally, what happens on success/failure, or how this interacts with other surface operations. The 100% schema coverage helps with parameters, but the behavioral context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds no additional parameter information beyond what's in the schema. With complete schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Rename') and target resource ('a surface tab'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'browser_surface' or 'close_surface', but the verb 'rename' is specific enough to distinguish it from other surface-related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when renaming is appropriate, or what happens if the tab doesn't exist. With multiple surface-related tools available, this lack of contextual guidance is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_inputA
Send text input to a terminal surface. When sending commands to another Claude session, press_enter can be unreliable — for critical inputs, use send_input without press_enter, then call send_key with key 'return' separately.
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref | |
| text | Yes | Text to send | |
| workspace | No | Target workspace ref | |
| press_enter | No | Press enter after sending text. For reliability with interactive programs, send text first, then use a separate send_key 'return' call. | |
| rename_to_task | No | Rename tab suffix to this task name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains a critical reliability consideration (press_enter unreliability) and provides a recommended workaround. However, it doesn't cover other behavioral aspects like error conditions, performance characteristics, or what happens when sending input to non-existent surfaces.
Agents need to know what a tool does to the 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 perfectly front-loaded with the core purpose, followed immediately by critical usage guidance. Both sentences earn their place by providing essential information without redundancy. The structure moves from general purpose to specific reliability consideration efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 5 parameters, 100% schema coverage, and no output schema, the description provides excellent contextual completeness. It addresses the most critical behavioral consideration (press_enter reliability) that wouldn't be apparent from the schema alone. The only minor gap is lack of information about return values or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all 5 parameters thoroughly. The description adds context about the press_enter parameter's reliability issues and recommended usage pattern, which provides valuable semantic context beyond the schema's technical documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Send text input') and target resource ('to a terminal surface'), distinguishing it from sibling tools like send_key (which sends individual keys) or send_to_agent (which targets agents). It provides a precise verb+resource combination that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides explicit guidance on when to use this tool versus alternatives, specifically warning that 'press_enter can be unreliable — for critical inputs, use send_input without press_enter, then call send_key with key 'return' separately.' This directly addresses a reliability concern and offers a clear alternative workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_keyA
Send a key press to a terminal surface. Use this after send_input to reliably submit commands — especially when targeting interactive programs like Claude sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| surface | Yes | Target surface ref | |
| key | Yes | Key name (e.g. 'return', 'escape', 'tab') | |
| workspace | No | Target workspace ref |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool's purpose for 'reliably submit commands' which implies it handles key press simulation, but doesn't disclose potential side effects, error conditions, or what happens if the surface doesn't exist. It provides some context about when to use it but lacks details about behavioral constraints or limitations.
Agents need to know what a tool does to the 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 perfectly concise with two sentences that each earn their place. The first sentence states the core functionality, and the second provides crucial usage guidance. There's zero wasted language, and the most important information (what it does) comes 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 tool with 3 parameters, 100% schema coverage, and no output schema, the description provides good contextual completeness. It explains the tool's purpose, when to use it, and how it relates to other tools. However, without annotations or output schema, it could benefit from more details about what constitutes success/failure or typical response patterns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all three parameters. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions the general purpose but provides no additional details about parameter usage, constraints, or examples beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('send a key press') and target ('to a terminal surface'), distinguishing it from sibling tools like send_input (which sends text) or interact (which may handle broader interactions). It provides a concrete verb+resource combination that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Use this after send_input to reliably submit commands') and provides a specific use case ('especially when targeting interactive programs like Claude sessions'). It clearly differentiates from send_input by explaining the sequential relationship and specialized purpose for command submission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_to_agentB
Send text input to an agent. Agent must be in ready or idle state.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| text | Yes | Text to send | |
| press_enter | No | Press enter after sending text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the agent state requirement, which is useful context, but doesn't address other important behavioral aspects like whether this is a read-only or destructive operation, what permissions are needed, what happens if the agent isn't in the required state, or what the response/outcome looks like. For a tool that interacts with agents, this leaves significant 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 extremely concise - just two short sentences that communicate the core purpose and a key constraint. Every word earns its place, and the most important information (what the tool does) 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?
Given that this is a tool that sends input to agents (potentially a mutation operation), the lack of annotations and output schema means the description should do more heavy lifting. While it mentions the agent state requirement, it doesn't explain what happens after sending the text, what kind of response to expect, or any error conditions. For a tool with no structured behavioral hints, this 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?
Schema description coverage is 100%, meaning all parameters are documented in the schema itself. The description doesn't add any additional parameter semantics beyond what's already in the schema (agent_id, text, press_enter). This meets the baseline expectation when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send text input') and target ('to an agent'), providing a specific verb and resource. However, it doesn't distinguish this tool from similar sibling tools like 'send_input' or 'interact', which likely have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides an important precondition ('Agent must be in ready or idle state'), which gives some context for when to use this tool. However, it doesn't explain when to choose this tool over alternatives like 'send_input' or 'interact', nor does it provide explicit exclusions or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_progressC
Set sidebar progress indicator (0.0 to 1.0)
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Progress value between 0 and 1 | |
| label | No | Progress label text | |
| workspace | No | Target workspace ref | |
| surface | No | Target surface ref |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does functionally. It doesn't disclose whether this is a UI-only change, if it persists across sessions, what permissions are needed, or how it affects user experience. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero wasted words. The description is front-loaded with the core functionality and includes essential numeric constraints in parentheses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 4 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after setting the progress indicator, whether changes are visible immediately, what error conditions might occur, or how this integrates with the broader UI system.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description adds minimal value by mentioning the 0.0-1.0 range for the 'value' parameter, but doesn't provide additional context about parameter interactions or semantics beyond what's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and the target resource ('sidebar progress indicator'), with specific numeric range context. It doesn't explicitly distinguish from sibling tools like 'set_status', but the resource specificity makes the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'set_status' or other UI manipulation tools. The description provides only functional information without context about appropriate use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_statusC
Set a sidebar status key-value pair
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Status key | |
| value | Yes | Status value | |
| workspace | No | Target workspace ref | |
| surface | No | Target surface ref | |
| icon | No | Icon name | |
| color | No | Hex color |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool sets a key-value pair but doesn't explain what happens (e.g., whether it overwrites existing keys, requires specific permissions, or has side effects like UI updates). This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and target, making it easy to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 is insufficient. It doesn't cover behavioral aspects like effects, error conditions, or return values, leaving significant gaps in understanding how to use the tool effectively in context with its 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 description coverage is 100%, so the schema fully documents all six parameters. The description adds no additional meaning beyond implying 'sidebar status' as the context for the key-value pair, but it doesn't clarify parameter interactions or usage examples. Baseline 3 is appropriate when the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and the target ('a sidebar status key-value pair'), making the purpose understandable. It doesn't explicitly distinguish from siblings like 'set_progress', but the specific mention of 'sidebar status' provides some differentiation. No tautology or misleading elements are present.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides no guidance on when to use this tool versus alternatives like 'set_progress' or other sibling tools. It lacks context about prerequisites, such as whether a sidebar or workspace must be active, and offers no explicit when-not-to-use scenarios or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spawn_agentA
Spawn an AI agent in a new terminal surface. Returns immediately — use wait_for to block until ready.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name (e.g. 'brainlayer', 'golems') | |
| model | Yes | Model name (e.g. 'sonnet', 'codex', 'opus') | |
| cli | Yes | CLI tool to launch | |
| prompt | Yes | Task prompt to send after agent is ready | |
| workspace | No | Target workspace ref |
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 discloses key behavioral traits: it spawns an agent, returns immediately (non-blocking), and suggests using 'wait_for' for readiness. However, it doesn't cover aspects like error handling, resource consumption, or permissions needed, which are gaps for a 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?
The description is highly concise and front-loaded, with two sentences that directly state the purpose and a key behavioral note. Every sentence earns its place by providing essential information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete: it covers the basic action and a critical behavioral trait (non-blocking return). However, for a tool that spawns agents, it lacks details on what the spawned agent does, potential side effects, or error conditions, leaving gaps in 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 the schema already documents all parameters thoroughly. The description adds no additional meaning beyond the schema, such as explaining interactions between parameters or usage examples. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Spawn an AI agent') and the location ('in a new terminal surface'), which is specific. However, it doesn't explicitly differentiate from sibling tools like 'browser_surface' or 'new_split', which might also create surfaces, leaving some ambiguity about uniqueness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies usage by mentioning 'Returns immediately — use wait_for to block until ready', suggesting when to use 'wait_for' as an alternative for blocking. But it lacks explicit guidance on when to choose this tool over other surface-related siblings like 'browser_surface' or 'new_split', leaving context somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_agentA
Stop an agent gracefully (Ctrl+C) or forcefully (kill process).
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to stop | |
| force | No | Force kill instead of graceful Ctrl+C |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the two stopping methods (graceful Ctrl+C and forceful kill), which adds useful context about how the tool behaves. However, it doesn't cover other important aspects like permissions needed, side effects, or what happens after stopping (e.g., cleanup, state changes), leaving gaps 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?
The description is extremely concise (one sentence) and front-loaded with the core purpose. Every word earns its place by specifying the action, resource, and key behavioral options without any fluff or redundancy, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with no annotations and no output schema), the description is somewhat complete but has gaps. It covers the basic action and parameter semantics, but lacks details on outcomes, error conditions, or integration with sibling tools. For a tool that stops agents, more context about effects would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds value by explaining the semantics of the 'force' parameter ('Force kill instead of graceful Ctrl+C'), which clarifies the tool's behavior beyond the schema's technical details. This compensates well, though it doesn't add information for 'agent_id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Stop an agent') and distinguishes between two modes ('gracefully (Ctrl+C) or forcefully (kill process)'). It uses precise verbs and resource references, making the purpose immediately understandable and distinct from sibling tools like 'kill' or 'get_agent_state'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies usage by mentioning two stopping methods (graceful vs. forceful), but it doesn't explicitly state when to use this tool versus alternatives like 'kill' or provide context about prerequisites. It offers some guidance through the parameter explanation but lacks explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forA
Block until an agent reaches a target state (ready, done, error). Checks retroactively first.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID from spawn_agent | |
| target_state | Yes | State to wait for | |
| timeout_ms | No | Timeout in milliseconds (default: 5 minutes) |
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 discloses key behavioral traits: it's a blocking operation, it checks retroactively first (implying it might return immediately if the agent is already in the target state), and it waits for state transitions. However, it doesn't mention error handling, what happens on timeout, or the return format (e.g., success/failure indicators).
Agents need to know what a tool does to the 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, efficient sentence that front-loads the core purpose ('Block until an agent reaches a target state') and adds a key behavioral detail ('Checks retroactively first'). Every word earns its place with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is adequate but has gaps. It covers the purpose and a key behavior, but doesn't explain what the tool returns (e.g., success/failure, timeout handling) or error conditions. For a blocking tool with state dependencies, more context on outcomes would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain the implications of 'checks retroactively first' on parameters). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('block until', 'checks retroactively') and identifies the resource ('agent') and target ('target state'). It distinguishes from siblings like get_agent_state (which checks current state without waiting) and wait_for_all (which waits for multiple agents).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies usage context by mentioning 'agent reaches a target state' and 'checks retroactively first', suggesting it's for monitoring agent state transitions. However, it doesn't explicitly state when to use this versus alternatives like get_agent_state (for immediate checks) or wait_for_all (for multiple agents), nor does it mention prerequisites like needing a spawned agent first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_allA
Block until ALL agents reach target state OR any agent errors (fail-fast with partial results).
| Name | Required | Description | Default |
|---|---|---|---|
| agent_ids | Yes | Array of agent IDs | |
| target_state | Yes | State to wait for | |
| timeout_ms | No | Timeout in milliseconds (default: 5 minutes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and effectively discloses key behavioral traits: it blocks execution, waits for all agents to reach a target state, implements fail-fast on any error, and returns partial results on failure. However, it does not mention permissions, rate limits, or detailed error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence with zero waste—every word contributes essential information about blocking behavior, conditions (all agents reach state or any errors), and fail-fast with partial results. It is front-loaded and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (coordinating multiple agents) and no annotations or output schema, the description is mostly complete but could enhance clarity on error types or result format. It covers core behavior adequately but leaves some operational details implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters. The description adds no additional meaning beyond what the schema provides (e.g., no clarification on 'agent_ids' format or 'target_state' implications). Baseline 3 is appropriate as the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Block until') and target ('ALL agents reach target state OR any agent errors'), distinguishing it from sibling 'wait_for' which likely handles different conditions. It precisely defines the verb (block/wait), resource (agents), and scope (all vs. any error).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies usage for monitoring multiple agents' states with fail-fast behavior, but does not explicitly state when to use this tool versus alternatives like 'get_agent_state' or 'wait_for'. It provides clear context (waiting for state changes) but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v0.1.0- First observed
browser_surface - First observed
close_surface - First observed
get_agent_state - First observed
interact - First observed
kill - First observed
list_agents - First observed
list_surfaces - First observed
new_split - First observed
read_agent_output - First observed
read_screen - First observed
rename_tab - First observed
send_input - First observed
send_key - First observed
send_to_agent - First observed
set_progress - First observed
set_status - First observed
spawn_agent - First observed
stop_agent - First observed
wait_for - First observed
wait_for_all
TDQS
Most tools have distinct purposes, but some overlap exists between 'kill' and 'stop_agent' (both stop agents) and 'interact' and 'send_to_agent' (both send messages to agents). The descriptions help clarify differences, but an agent might occasionally misselect between these pairs.
Tool names follow a consistent snake_case pattern throughout, with clear verb_noun structures (e.g., 'list_agents', 'spawn_agent', 'send_input'). Minor deviations include 'browser_surface' (noun_noun) and 'get_agent_state' (verb_noun_noun), but overall naming is highly predictable and readable.
With 20 tools, the count is on the higher side but reasonable for managing agents, surfaces, and interactions in a complex environment like cmuxlayer. It feels slightly heavy but not excessive, as each tool appears to serve a specific role in the workflow.
The toolset provides comprehensive coverage for agent and surface management, including lifecycle operations (spawn, list, interact, stop, kill), surface control (create, read, rename, close), and utility functions (wait, progress, status). No obvious gaps are present for the stated domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTerminal MCP server for AI coding agents with persistent PTY sessions, ring-buffer incremental reads, headless xterm screen capture, multi-agent orchestration, and a real-time web dashboard.2423MIT
- AlicenseAqualityAmaintenanceMCP server for hyperpanes terminal workspace app, enabling AI agents to compose and launch workspace layouts, inspect and drive terminal panes, stream output, and orchestrate agent hierarchies.471MIT
- AlicenseBqualityBmaintenanceA comprehensive MCP server for driving tmux sessions, windows, panes, sending keystrokes, and reading pane output locally or over SSH, enabling real-time collaborative pairing with AI.711MIT
- AlicenseAqualityDmaintenanceMCP server to control Onda terminal from AI agents, providing tools for splitting panes, running commands, managing tabs and workspaces, and orchestrating multi-agent workflows across multiple windows.3917MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EtanHey/cmuxlayer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server