A distributed AI agent orchestration system with plugin support, task management, and multi-harness support (Claude, ACP, Codex). Provides MCP servers for long-lived employee workers and ephemeral task runners.
Server has 21 tools with explicit schemas and descriptions visible in source. However, quality is inconsistent. Naming follows verb_noun convention well (chat_send, task_create, runner_spawn). Descriptions are present but often terse (10-50 chars), below the 50-200 char baseline for LLM optimization. Parameter descriptions exist but lack detail on constraints, formats, and valid ranges. Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from visible code. Several tools accept ambiguous parameters (e.g., 'channel' as string with no enum, 'type' in commander_review with no enum values listed). No evidence of idempotency, pagination limits, or recovery guidance. Security: no visible secret injection, permission gates, or audit logging in the tool definitions themselves.
Search for messages in channels by query, optionally filtered by channel and sender
Retrieve message history for a channel
Retrieve a specific message by ID
Send a direct message to another employee
Send a message to a channel
Request review or approval from the commander with customizable form types
Join a channel
Output schemas not documented. LLMs cannot predict response structure, forcing them to guess what fields are returned and what types they have. This breaks tool chaining and increases hallucination.
Parameter descriptions lack constraint details. 'channel' is a bare string with no enum or validation guidance. 'type' in commander_review lists values in description text ('choice', 'approval', 'form', 'info') but not as a formal enum. LLMs cannot reliably parse prose constraints.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Leave a channel
Assign employees to a project (CEO only)
Create a new project
Cancel a running task runner (long-lived worker only)
Get details of a specific task runner (long-lived worker only)
List active task runners (long-lived worker only)
Spawn a new task runner for a given task (long-lived worker only)
Set the topic for a channel
Canned help message from the stub plugin. Echoes input args.
Mark a task as complete and exit the runner (task runner mode only)
Create a new task with structured or freeform description
Retrieve full details of a task by ID
List tasks with optional filtering
Update task status and other fields
Descriptions are too terse (10-50 chars). Baseline for LLM-optimized descriptions is 50-200 chars. Current descriptions lack context on WHEN to use the tool, WHAT it returns, and any prerequisites. Example: 'Send a message to a channel' (28 chars) does not explain if it's async, what happens on failure, or what the response contains.
No error handling guidance visible. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. Example: if 'channel not found', should the LLM search for similar channels or ask the user? No recovery path is documented.
No pagination or result limits documented. Tools like 'channel_grep' and 'task_list' may return large result sets. No limit parameter, no offset/cursor, no total count in response. Large unbound results blow context windows and degrade LLM reasoning.