Local-first orchestration for coding agents — classify, decompose, dispatch Claude/Codex, and supervise from a dashboard.
Relay defines 16 tools with mostly complete schemas and descriptions. Naming follows verb_noun conventions (crosslink_discover, channel_create, coordination_send). Descriptions are present and contextual (avg ~120 chars), meeting the 10-1024 char baseline. However, several tools lack parameter descriptions (crosslink_register, crosslink_reply, crosslink_deregister show no visible input schemas in source), and output schemas are not documented. Error handling guidance is absent, tools do not indicate what to do on failure or whether errors are retryable. Some parameter relationships are undocumented (e.g., channel_handoff_finalize's four required blocks lack guidance on when to call this vs. other channel tools). Composition is strong: tools chain well (e.g., crosslink_discover → crosslink_send → crosslink_poll), and most accept natural identifiers (sessionId, channelId). Security is reasonable: no credentials in parameters, but no explicit permission gates or audit trail declarations visible.
Assert that this agent has finished onboarding and is ready to receive tasks. Call this exactly once per session, at the end of your onboarding turn (after you have read the channel board and oriented yourself). Subsequent calls are no-ops. Observers (TUI, GUI, other agents) will then see `readyAt` populated on your crosslink record, distinguishing 'process is alive' from 'agent is ready to be addressed.'
Create a new channel for agents to collaborate in.
Get channel details including members, pinned refs, recent feed, and active runs.
Capture working-memory context before this session ends. Call this when context is near its limit OR when the user has accepted a handoff prompt. The four blocks are persisted as the agent-authored section of the next handoff brief.
Post a message to the channel feed.
Record a decision in this channel with rationale and alternatives considered.
Three tools (crosslink_register, crosslink_reply, crosslink_deregister) have no visible input schemas in source code.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what does crosslink_discover return? Is it an array of sessions with sessionId, capabilities, readyAt?). Violates pattern:tool and mxe:include-chaining-ids.
Error handling is absent. Tools do not indicate what to do on failure (e.g., if crosslink_send fails because toSessionId is invalid, should the agent retry, call crosslink_discover first, or ask the user?). Violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Get tickets grouped by status for this channel (kanban view).
Pull unread cross-repo coordination messages addressed to this repo-admin. Call at the start of each work cycle. Returns an array of messages that arrived since the last call. Cursor is persisted so messages are delivered exactly once per session.
Send a typed cross-repo coordination message to another repo-admin. Use 'blocked-on-repo' when a ticket cannot proceed until another repo's ticket completes; 'repo-ready' to announce that a PR you own is open or merged and downstream repos may be waiting on it; 'merge-order-proposal' to record an ordering rationale across multiple open PRs. DO NOT free-text these coordination handoffs in the channel feed — use this tool so the scheduler and other admins can parse them programmatically. Works whether the MCP server is in-process (tests) or spawned as a child process (production) — the tool auto-falls-back to a file-based IPC bridge in the latter case.
Deregister a crosslink session.
List active crosslink sessions across all repos. Use this to find other agent sessions you can collaborate with.
Check for inbound crosslink messages from other sessions. Returns pending messages and marks them as delivered.
Register a crosslink session with description and capabilities.
Reply to an inbound crosslink message.
Send a message or question to another crosslink session. The receiving agent will see it in their next turn and can reply.
Cross-workspace view of all active tasks and agents.
Parameter descriptions are missing or minimal for several tools. E.g., channel_get's feedLimit lacks guidance on what 'feed' means or why the agent should choose a specific limit. Violates pattern:tool-description.
No confirmation or dry-run pattern for destructive operations. channel_handoff_finalize and coordination_send are WRITE operations that persist state, but lack a confirmation step or preview. Violates pattern:confirmation-request.