API Reference¶
Complete reference for OtterBot's REST API endpoints, Socket.IO events, and core data types.
Authentication¶
OtterBot uses session-based authentication. After initial setup, the server issues a session cookie. All subsequent requests (REST and Socket.IO) are authenticated via this cookie.
- Check auth status:
GET /api/auth/check - Logout:
POST /api/auth/logout - Socket.IO connections are authenticated on the
connectionevent
REST: Setup¶
GET /api/setup/status¶
Returns whether the initial setup has been completed and which provider types are configured.
POST /api/setup/probe-models¶
Probe available models from an LLM provider. Used during the setup wizard to list models.
// Request body
{
"provider": "anthropic",
"apiKey": "sk-ant-...",
"baseUrl": "https://api.anthropic.com" // optional
}
POST /api/setup/tts-preview¶
Preview a TTS voice. Returns audio for a sample sentence.
REST: Auth¶
GET /api/auth/check¶
Check current authentication status.
POST /api/auth/logout¶
Logout and destroy the current session.
REST: Agents & Registry¶
GET /api/agents¶
List all active agent instances.
// Response
[
{
"id": "coo-main",
"name": "COO",
"role": "coo",
"status": "idle",
"registryId": "builtin-coo",
"projectId": null
}
]
GET /api/registry¶
List all agent templates (built-in and custom) from the registry.
// Response: RegistryEntry[]
[
{
"id": "builtin-coder",
"name": "Coder",
"role": "worker",
"capabilities": ["code", "typescript", "python", "debugging"],
"tools": ["file_read", "file_write", "shell_exec", "install_package"],
"builtIn": true,
...
}
]
GET /api/registry/:id¶
Get a specific agent template by ID.
POST /api/registry¶
Create a new custom agent template.
// Request body: RegistryEntryCreate
{
"name": "API Tester",
"description": "Tests REST APIs...",
"systemPrompt": "You are an API testing specialist...",
"capabilities": ["testing", "api"],
"defaultModel": "claude-sonnet-4-5-20250929",
"defaultProvider": "anthropic",
"tools": ["shell_exec", "file_read"]
}
POST /api/registry/:id/clone¶
Clone an existing template (built-in or custom) as a new custom template.
PATCH /api/registry/:id¶
Update a custom agent template. Built-in templates cannot be modified.
DELETE /api/registry/:id¶
Delete a custom agent template. Built-in templates cannot be deleted.
REST: Conversations & Messages¶
GET /api/conversations¶
List conversations. Optionally filter by project.
Query Parameters
projectId (optional) -- Filter conversations by project ID
GET /api/messages¶
Cursor-paginated message history.
Query Parameters
projectId-- Project IDagentId-- Agent IDlimit-- Number of messages (default 50)before-- Cursor for pagination (message ID)
REST: Projects¶
GET /api/projects¶
List all projects.
// Response: Project[]
[
{
"id": "proj_abc",
"name": "Build Login Page",
"description": "Create a login page with OAuth...",
"status": "active",
"charter": "...",
"charterStatus": "finalized",
"createdAt": "2025-01-15T10:00:00Z"
}
]
REST: 3D Models & Scenes¶
GET /api/model-packs¶
List available 3D character model packs for the Live View.
// Response: ModelPack[]
[
{
"id": "otter-default",
"name": "Otter Default",
"characterUrl": "/assets/workers/otter/characters/otter.glb",
"thumbnailUrl": "/assets/workers/otter/artwork.png",
"animations": {
"idle": "/assets/workers/otter/Animations/gltf/...",
"action": "/assets/workers/otter/Animations/gltf/..."
}
}
]
GET /api/environment-packs¶
List available 3D environment packs.
// Response: EnvironmentPack[]
[
{
"id": "office",
"name": "Office",
"assets": [
{ "id": "desk", "name": "Desk", "modelUrl": "..." }
]
}
]
GET /api/scenes¶
List available scene configurations (camera, lighting, layout).
PUT /api/scenes/:id¶
Save or update a scene configuration.
REST: Settings¶
GET /api/settings¶
Get all settings as key-value pairs.
LLM Providers¶
GET /api/settings/providers¶
Get configured LLM provider settings (provider type, models).
PUT /api/settings/provider/:id¶
Update an LLM provider's configuration (API key, base URL, etc.).
PUT /api/settings/defaults¶
Update default models for each agent tier (COO, Team Lead, Worker).
POST /api/settings/provider/:id/test¶
Test connectivity to an LLM provider.
GET /api/settings/models/:id¶
Fetch available models from a specific provider.
Search Settings¶
GET /api/settings/search¶
Get search provider configuration.
PUT /api/settings/search/active¶
Set the active search provider.
PUT /api/settings/search/provider/:id¶
Update a search provider's configuration (API key, base URL).
POST /api/settings/search/provider/:id/test¶
Test connectivity to a search provider.
TTS Settings¶
GET /api/settings/tts¶
Get text-to-speech settings (provider, voice, speed).
PUT /api/settings/tts/enabled¶
Enable or disable TTS.
PUT /api/settings/tts/active¶
Set the active TTS provider.
PUT /api/settings/tts/voice¶
Set the TTS voice.
PUT /api/settings/tts/speed¶
Set the TTS playback speed.
PUT /api/settings/tts/provider/:id¶
Update a TTS provider's configuration.
POST /api/settings/tts/provider/:id/test¶
Test a TTS provider.
POST /api/settings/tts/preview¶
Preview a TTS voice with a sample sentence.
STT Settings¶
GET /api/settings/stt¶
Get speech-to-text settings (provider, model).
PUT /api/settings/stt/enabled¶
Enable or disable STT.
PUT /api/settings/stt/active¶
Set the active STT provider.
PUT /api/settings/stt/language¶
Set the STT language.
PUT /api/settings/stt/model¶
Set the Whisper model ID for local STT.
PUT /api/settings/stt/provider/:id¶
Update an STT provider's configuration.
POST /api/settings/stt/provider/:id/test¶
Test an STT provider.
Other Settings¶
POST /api/stt/transcribe¶
Transcribe audio to text. Accepts multipart form data with an audio file.
Body (multipart/form-data)
file -- Audio file (WebM format)
GET /api/settings/opencode¶
Get OpenCode integration settings.
POST /api/settings/opencode/test¶
Test the OpenCode integration configuration.
REST: Desktop, Packages, Profile¶
GET /api/desktop/status¶
Get the virtual desktop environment status (running, resolution, ports).
GET /novnc/*¶
Serve noVNC web client files. Path traversal protection is enforced.
GET /api/packages¶
List installed apt and npm packages.
POST /api/packages¶
Install a new package (apt or npm).
DELETE /api/packages¶
Uninstall a package.
GET /api/profile¶
Get the current user's profile information.
PUT /api/profile/model-pack¶
Update the user's 3D model pack for the Live View.
REST: Todos¶
GET /api/todos¶
List all todo items.
POST /api/todos¶
Create a new todo item.
// Request body
{
"title": "Review PR #42",
"description": "Check for security issues",
"priority": "high",
"dueDate": "2025-03-01T00:00:00Z"
}
PUT /api/todos/:id¶
Update a todo item (title, description, priority, status, due date).
DELETE /api/todos/:id¶
Delete a todo item.
REST: Custom Tools¶
GET /api/tools¶
List all custom tools.
POST /api/tools¶
Create a new custom tool.
// Request body
{
"name": "weather_lookup",
"description": "Get current weather for a city",
"parameters": { /* JSON Schema */ },
"code": "const resp = await fetch(...);"
}
PATCH /api/tools/:id¶
Update an existing custom tool.
DELETE /api/tools/:id¶
Delete a custom tool.
POST /api/tools/ai-generate¶
AI-generate a custom tool from a natural language description.
GET /api/tools/available¶
List all available tools (built-in + custom) that can be assigned to agents.
GET /api/tools/examples¶
Get example custom tool definitions for reference.
REST: Skills¶
GET /api/skills¶
List all skills (markdown prompt fragments).
POST /api/skills¶
Create a new skill.
PUT /api/skills/:id¶
Update a skill's content or metadata.
DELETE /api/skills/:id¶
Delete a skill.
POST /api/skills/:id/clone¶
Clone an existing skill as a new skill.
POST /api/skills/import¶
Import skills from a JSON payload.
POST /api/skills/scan¶
Scan a directory for skill files and auto-import them.
GET /api/skills/export¶
Export all skills as a JSON file.
REST: Usage Analytics¶
GET /api/usage/summary¶
Get a summary of total token usage and estimated costs.
GET /api/usage/recent¶
List recent usage entries with timestamps.
GET /api/usage/by-model¶
Get token usage broken down by LLM model.
GET /api/usage/by-agent¶
Get token usage broken down by agent instance.
REST: GitHub¶
GET /api/settings/github¶
Get GitHub integration settings.
PUT /api/settings/github¶
Update GitHub integration settings.
POST /api/settings/github/ssh/generate¶
Generate a new SSH key pair for Git authentication.
POST /api/settings/github/ssh/import¶
Import an existing SSH private key.
POST /api/settings/github/ssh/test¶
Test SSH connectivity to GitHub.
GET /api/settings/github/ssh/public-key¶
Get the public key for the current SSH key pair.
DELETE /api/settings/github/ssh¶
Delete the current SSH key pair.
REST: GitHub Accounts¶
Multi-account GitHub support with per-account SSH keys and per-project assignment.
GET /api/settings/github/accounts¶
List all GitHub accounts.
POST /api/settings/github/accounts¶
Create a new GitHub account (label, token, username, email).
PUT /api/settings/github/accounts/:id¶
Update a GitHub account.
DELETE /api/settings/github/accounts/:id¶
Delete a GitHub account.
PUT /api/settings/github/accounts/:id/default¶
Set a GitHub account as the default.
POST /api/settings/github/accounts/:id/test¶
Test connectivity for a GitHub account.
POST /api/settings/github/accounts/:id/ssh/generate¶
Generate a new SSH key pair for a specific GitHub account.
POST /api/settings/github/accounts/:id/ssh/import¶
Import an existing SSH private key for a GitHub account.
PUT /api/settings/github/accounts/:id/ssh/usage¶
Set SSH key usage for a GitHub account (auth, signing, or both).
GET /api/settings/github/accounts/:id/ssh/public-key¶
Get the public key for a GitHub account's SSH key.
DELETE /api/settings/github/accounts/:id/ssh¶
Delete the SSH key for a GitHub account.
POST /api/settings/github/accounts/:id/ssh/test¶
Test SSH connectivity for a GitHub account.
REST: Messaging¶
Each messaging bridge has GET/PUT settings endpoints and a test endpoint.
Discord¶
GET /api/settings/discord¶
Get Discord bridge settings (bot token, channel ID, enabled status).
PUT /api/settings/discord¶
Update Discord bridge settings.
POST /api/settings/discord/test¶
Test the Discord bot connection.
Slack¶
GET /api/settings/slack¶
Get Slack bridge settings.
PUT /api/settings/slack¶
Update Slack bridge settings.
POST /api/settings/slack/test¶
Test the Slack app connection.
Matrix¶
GET /api/settings/matrix¶
Get Matrix bridge settings.
PUT /api/settings/matrix¶
Update Matrix bridge settings.
POST /api/settings/matrix/test¶
Test the Matrix homeserver connection.
IRC¶
GET /api/settings/irc¶
Get IRC bridge settings.
PUT /api/settings/irc¶
Update IRC bridge settings.
POST /api/settings/irc/test¶
Test the IRC server connection.
Microsoft Teams¶
GET /api/settings/teams¶
Get Teams bridge settings.
PUT /api/settings/teams¶
Update Teams bridge settings.
POST /api/settings/teams/pairing¶
Initiate Teams webhook pairing.
Telegram¶
GET /api/settings/telegram¶
Get Telegram bridge settings (bot token, enabled status).
PUT /api/settings/telegram¶
Update Telegram bridge settings.
POST /api/settings/telegram/test¶
Test the Telegram bot connection.
WhatsApp¶
GET /api/settings/whatsapp¶
Get WhatsApp bridge settings.
PUT /api/settings/whatsapp¶
Update WhatsApp bridge settings.
POST /api/settings/whatsapp/test¶
Test the WhatsApp bridge connection.
Signal¶
GET /api/settings/signal¶
Get Signal bridge settings.
PUT /api/settings/signal¶
Update Signal bridge settings.
POST /api/settings/signal/test¶
Test the Signal bridge connection.
Mattermost¶
GET /api/settings/mattermost¶
Get Mattermost bridge settings.
PUT /api/settings/mattermost¶
Update Mattermost bridge settings.
POST /api/settings/mattermost/test¶
Test the Mattermost connection.
Nextcloud Talk¶
GET /api/settings/nextcloud-talk¶
Get Nextcloud Talk bridge settings.
PUT /api/settings/nextcloud-talk¶
Update Nextcloud Talk bridge settings.
POST /api/settings/nextcloud-talk/test¶
Test the Nextcloud Talk connection.
Tlon¶
GET /api/settings/tlon¶
Get Tlon bridge settings.
PUT /api/settings/tlon¶
Update Tlon bridge settings.
POST /api/settings/tlon/test¶
Test the Tlon connection.
Bluesky¶
GET /api/settings/bluesky¶
Get Bluesky bridge settings.
PUT /api/settings/bluesky¶
Update Bluesky bridge settings.
POST /api/settings/bluesky/test¶
Test the Bluesky connection.
POST /api/settings/bluesky/pair/approve¶
Approve a Bluesky pairing request.
POST /api/settings/bluesky/pair/reject¶
Reject a Bluesky pairing request.
DELETE /api/settings/bluesky/pair/:userId¶
Remove a paired Bluesky user.
Google Chat¶
GET /api/settings/googlechat¶
Get Google Chat bridge settings.
PUT /api/settings/googlechat¶
Update Google Chat bridge settings.
POST /api/settings/googlechat/test¶
Test the Google Chat connection.
POST /api/settings/googlechat/pair/approve¶
Approve a Google Chat pairing request.
POST /api/settings/googlechat/pair/reject¶
Reject a Google Chat pairing request.
DELETE /api/settings/googlechat/pair/:userId¶
Remove a paired Google Chat user.
POST /api/googlechat/webhook¶
Incoming webhook handler for Google Chat events.
Mastodon¶
GET /api/settings/mastodon¶
Get Mastodon bridge settings.
PUT /api/settings/mastodon¶
Update Mastodon bridge settings.
POST /api/settings/mastodon/test¶
Test the Mastodon connection.
POST /api/settings/mastodon/pair/approve¶
Approve a Mastodon pairing request.
POST /api/settings/mastodon/pair/reject¶
Reject a Mastodon pairing request.
DELETE /api/settings/mastodon/pair/:userId¶
Remove a paired Mastodon user.
Email (IMAP/SMTP)¶
GET /api/settings/email¶
Get email bridge settings (IMAP/SMTP configuration).
PUT /api/settings/email¶
Update email bridge settings.
POST /api/settings/email/test¶
Test the email bridge connection.
GET /api/email/folders¶
List email folders.
GET /api/email/messages¶
List email messages.
GET /api/email/messages/:id¶
Get a specific email message.
POST /api/email/send¶
Send a new email via SMTP.
POST /api/email/messages/:id/archive¶
Archive an email message.
REST: Coding Agents¶
OpenCode¶
GET /api/settings/opencode¶
Get OpenCode integration settings.
PUT /api/settings/opencode¶
Update OpenCode integration settings.
POST /api/settings/opencode/test¶
Test the OpenCode CLI availability.
Claude Code¶
GET /api/settings/claude-code¶
Get Claude Code integration settings.
PUT /api/settings/claude-code¶
Update Claude Code integration settings.
POST /api/settings/claude-code/test¶
Test the Claude Code CLI availability.
Codex¶
GET /api/settings/codex¶
Get Codex integration settings.
PUT /api/settings/codex¶
Update Codex integration settings.
POST /api/settings/codex/test¶
Test the Codex CLI availability.
Gemini CLI¶
GET /api/settings/gemini-cli¶
Get Gemini CLI integration settings.
PUT /api/settings/gemini-cli¶
Update Gemini CLI integration settings.
POST /api/settings/gemini-cli/test¶
Test the Gemini CLI availability.
Coding Agent Sessions¶
DELETE /api/codeagent/sessions¶
Clear all completed coding agent sessions.
Claude Code Usage¶
GET /api/settings/claude-code/usage¶
Get Claude Code token usage statistics.
REST: SSH¶
SSH Keys¶
GET /api/settings/ssh/keys¶
List all SSH keys.
GET /api/settings/ssh/keys/:id¶
Get a specific SSH key by ID.
POST /api/settings/ssh/keys/generate¶
Generate a new SSH key pair.
POST /api/settings/ssh/keys/import¶
Import an existing SSH private key.
PUT /api/settings/ssh/keys/:id¶
Update an SSH key's metadata (name, allowed hosts).
DELETE /api/settings/ssh/keys/:id¶
Delete an SSH key.
GET /api/settings/ssh/keys/:id/public-key¶
Get the public key for a specific SSH key pair.
POST /api/settings/ssh/test¶
Test SSH connectivity to a remote host.
SSH Sessions¶
GET /api/ssh/sessions¶
List all SSH sessions. Supports an optional limit query parameter.
GET /api/ssh/sessions/:id¶
Get a specific SSH session by ID.
DELETE /api/ssh/sessions/:id¶
Delete/close an SSH session.
REST: Agent Model Overrides¶
GET /api/settings/agent-model-overrides¶
List all agent-specific model overrides.
PUT /api/settings/agent-model-overrides/:registryEntryId¶
Set a model override for a specific agent template. Allows using a different model/provider than the default.
DELETE /api/settings/agent-model-overrides/:registryEntryId¶
Clear the model override for an agent template, reverting to the default.
REST: Custom Models¶
GET /api/settings/custom-models¶
List custom model definitions. Supports an optional providerId query parameter to filter by provider.
POST /api/settings/custom-models¶
Create a new custom model definition.
DELETE /api/settings/custom-models/:id¶
Delete a custom model definition.
REST: Google (Calendar & Gmail)¶
Calendar¶
GET /api/calendar/calendars¶
List all calendars on the connected Google account.
GET /api/calendar/events¶
List events, optionally filtered by calendar ID and date range.
POST /api/calendar/events¶
Create a new calendar event.
PUT /api/calendar/events/:id¶
Update an existing calendar event.
DELETE /api/calendar/events/:id¶
Delete a calendar event.
Gmail¶
GET /api/gmail/labels¶
List all Gmail labels.
GET /api/gmail/messages¶
List Gmail messages, optionally filtered by label or search query.
GET /api/gmail/messages/:id¶
Get a specific Gmail message by ID.
POST /api/gmail/send¶
Send a new email.
POST /api/gmail/messages/:id/archive¶
Archive a Gmail message (remove from inbox).
REST: MCP Servers¶
GET /api/settings/mcp-servers¶
List all configured MCP servers.
// Response
[
{
"id": "mcp_abc",
"name": "My MCP Server",
"transport": "stdio",
"command": "/usr/local/bin/mcp-server",
"args": ["--port", "3000"],
"status": "running",
"tools": ["tool_a", "tool_b"]
}
]
POST /api/settings/mcp-servers¶
Create a new MCP server configuration.
// Request body
{
"name": "My MCP Server",
"transport": "stdio",
"command": "/usr/local/bin/mcp-server",
"args": ["--port", "3000"],
"env": {}
}
GET /api/settings/mcp-servers/:id¶
Get a specific MCP server's configuration and status.
PUT /api/settings/mcp-servers/:id¶
Update an MCP server's configuration.
DELETE /api/settings/mcp-servers/:id¶
Delete an MCP server configuration.
POST /api/settings/mcp-servers/:id/start¶
Start an MCP server process.
POST /api/settings/mcp-servers/:id/stop¶
Stop a running MCP server process.
POST /api/settings/mcp-servers/:id/restart¶
Restart an MCP server process.
POST /api/settings/mcp-servers/:id/test¶
Test connectivity to an MCP server.
POST /api/settings/mcp-servers/:id/discover¶
Discover available tools from a connected MCP server.
PUT /api/settings/mcp-servers/:id/tools¶
Update the list of allowed tools from an MCP server.
REST: Backup & Restore¶
GET /api/settings/backup¶
Download a full database backup.
POST /api/settings/restore¶
Restore the database from an uploaded backup file.
REST: Modules¶
GET /api/modules¶
List all installed modules.
POST /api/modules/install¶
Install a module from a GitHub repository URL.
POST /api/modules/:id/toggle¶
Enable or disable an installed module.
DELETE /api/modules/:id¶
Uninstall a module.
POST /api/modules/webhooks/:moduleId/*¶
Webhook handler for module-registered endpoints (e.g., GitHub webhooks).
REST: World Layout¶
GET /api/world¶
Get the current world layout (all zones).
POST /api/world¶
Create or update a zone in the world layout.
DELETE /api/world/:zoneId¶
Delete a zone from the world layout.
REST: Scheduled Tasks¶
GET /api/scheduled-tasks¶
List all custom scheduled tasks.
POST /api/scheduled-tasks¶
Create a new scheduled task.
PUT /api/scheduled-tasks/:id¶
Update a scheduled task (interval, enabled status, prompt).
DELETE /api/scheduled-tasks/:id¶
Delete a scheduled task.
REST: Files¶
GET /api/projects/:id/files¶
List files in a project's workspace directory.
GET /api/projects/:id/files/read¶
Read the contents of a file in a project's workspace.
Query Parameters
path -- Relative file path within the project workspace
GET /api/projects/:id/files/git¶
Get Git status information for a project's workspace.
Socket.IO: Client --> Server¶
Events emitted by the client (browser) to the server. Most use an acknowledgment callback to return data.
Chat¶
ceo:message¶
Client --> Server
Send a message from the CEO (human) to the COO.
// Payload
{
"content": "Build a REST API for...",
"conversationId"?: "conv_1",
"projectId"?: "proj_1",
"toAgentId"?: "worker-abc",
"attachments"?: [{ "id": "att_1", "filename": "spec.pdf", "mimeType": "application/pdf", "size": 12345, "url": "/uploads/..." }]
}
// Ack callback
{ "messageId": "msg_abc", "conversationId": "conv_1" }
ceo:new-chat¶
Client --> Server
Start a new conversation, resetting the COO's context.
ceo:cancel-tts¶
Client --> Server
Cancel any in-progress text-to-speech playback.
ceo:find-agent-conversation¶
Client --> Server
Find the conversation associated with a specific agent.
ceo:compact-conversation¶
Client --> Server
Compact a conversation's context to reduce token usage.
Conversations¶
ceo:list-conversations¶
Client --> Server
List conversations, optionally filtered by project.
ceo:load-conversation¶
Client --> Server
Load a specific conversation's messages.
Registry & Agents¶
registry:list¶
Client --> Server
Get all agent templates from the registry.
agent:inspect¶
Client --> Server
Get detailed information about a specific agent instance.
agent:activity¶
Client --> Server
Get an agent's message history and activity log.
// Payload
{ "agentId": "worker-abc" }
// Ack
{ "messages": BusMessage[], "activity": AgentActivityRecord[] }
Projects¶
project:list¶
Client --> Server
List all projects.
project:get¶
Client --> Server
Get a single project by ID.
project:enter¶
Client --> Server
Enter a project context. Returns the project, its conversations, and Kanban tasks.
// Payload
{ "projectId": "proj_1" }
// Ack
{ "project": Project, "conversations": Conversation[], "tasks": KanbanTask[] }
project:conversations¶
Client --> Server
List conversations for a specific project.
project:delete¶
Client --> Server
Delete a project and cascade-delete all related data (tasks, conversations, agents, messages).
project:recover¶
Client --> Server
Recover a previously deleted project.
project:create-manual¶
Client --> Server
Manually create a project (bypasses COO orchestration).
project:get-agent-assignments¶
Client --> Server
Get agent template assignments for a project.
project:set-agent-assignments¶
Client --> Server
Set agent template assignments for a project (which templates are used for team lead, workers).
project:get-branch¶
Client --> Server
Get the target Git branch for a project.
project:set-branch¶
Client --> Server
Set the target Git branch for a project.
project:get-pipeline-config¶
Client --> Server
Get the code review pipeline configuration for a project.
project:set-pipeline-config¶
Client --> Server
Set the code review pipeline configuration for a project.
project:get-fork-settings¶
Client --> Server
Get fork mode settings for a project (upstream PR creation, fork sync).
project:set-fork-upstream-pr¶
Client --> Server
Toggle whether PRs are created against the upstream repo when using fork mode.
project:set-issue-monitor¶
Client --> Server
Enable or disable GitHub issue monitoring for a project.
project:set-github-account¶
Client --> Server
Set the GitHub account to use for a specific project.
project:set-gitea-issue-monitor¶
Client --> Server
Enable or disable Gitea issue monitoring for a project.
project:set-gitea-account¶
Client --> Server
Set the Gitea account to use for a specific project.
project:get-sign-commits¶
Client --> Server
Get the commit signing setting for a project.
project:set-sign-commits¶
Client --> Server
Toggle SSH-based commit signing for a project.
project:set-show3d¶
Client --> Server
Toggle 3D Live View visibility for a project.
Agents & Coding¶
agent:stop¶
Client --> Server
Force-stop a running agent instance.
codeagent:respond¶
Client --> Server
Send a response to a coding agent's prompt (user input during PTY session).
codeagent:permission-respond¶
Client --> Server
Approve or deny a coding agent's permission request (file write, shell command).
Terminal¶
terminal:input¶
Client --> Server
Send keyboard input to a terminal PTY session.
terminal:resize¶
Client --> Server
Resize a terminal PTY session (rows, cols).
terminal:subscribe¶
Client --> Server
Subscribe to output from a specific terminal session.
terminal:end¶
Client --> Server
End a terminal PTY session.
Memory & Soul¶
memory:list¶
Client --> Server
List episodic memories, optionally filtered by search query.
memory:save¶
Client --> Server
Save a new episodic memory.
soul:list¶
Client --> Server
List all soul documents.
soul:save¶
Client --> Server
Create or update a soul document.
soul:get¶
Client --> Server
Get a soul document for a specific agent role.
soul:delete¶
Client --> Server
Delete a soul document.
soul:suggest¶
Client --> Server
Get soul advisor suggestions for an agent.
memory:delete¶
Client --> Server
Delete a specific episodic memory.
memory:clear-all¶
Client --> Server
Clear all episodic memories.
memory:search¶
Client --> Server
Search memories by semantic query.
Merge Queue¶
merge-queue:list¶
Client --> Server
List all entries in the merge queue.
merge-queue:approve¶
Client --> Server
Approve a merge queue entry for merging.
merge-queue:remove¶
Client --> Server
Remove an entry from the merge queue.
merge-queue:reorder¶
Client --> Server
Reorder entries in the merge queue.
Kanban Pipeline¶
kanban:reset-pipeline¶
Client --> Server
Reset the pipeline status for a Kanban task, allowing it to be re-processed.
kanban:retriage¶
Client --> Server
Re-run triage on a Kanban task's associated issue.
SSH¶
ssh:connect¶
Client --> Server
Initiate an SSH connection to a remote host.
ssh:disconnect¶
Client --> Server
Close an active SSH connection.
ssh:chat¶
Client --> Server
Send a message to the SSH chat interface (natural language command assistance).
ssh:chat-confirm¶
Client --> Server
Confirm execution of a suggested SSH command.
Socket.IO: Server --> Client¶
Events broadcast from the server to connected clients.
Message Bus¶
bus:message¶
Server --> Client
Broadcast of every message on the internal agent bus. Used by the frontend to show agent communication in real-time.
COO Responses¶
coo:response¶
Server --> Client
Complete COO response message (after streaming ends).
coo:stream¶
Server --> Client
Token-by-token streaming from the COO agent. Emitted as each token is generated.
coo:thinking¶
Server --> Client
Extended thinking (reasoning) tokens from the COO.
coo:thinking-end¶
Server --> Client
Signals the end of a COO thinking block.
coo:audio¶
Server --> Client
TTS audio synthesis result for the COO's response.
Conversations¶
conversation:created¶
Server --> Client
A new conversation was created.
Projects¶
project:created¶
Server --> Client
A new project was created by the COO.
project:updated¶
Server --> Client
A project was updated (status change, charter update, etc.).
project:deleted¶
Server --> Client
A project was deleted.
Kanban¶
kanban:task-created¶
Server --> Client
A new Kanban task was created.
kanban:task-updated¶
Server --> Client
A Kanban task was updated (column change, assignment, completion report).
kanban:task-deleted¶
Server --> Client
A Kanban task was deleted.
Agents¶
agent:spawned¶
Server --> Client
A new agent instance was created (Team Lead or Worker).
agent:status¶
Server --> Client
An agent's status changed (idle, thinking, acting, done, error).
agent:destroyed¶
Server --> Client
An agent instance was destroyed.
agent:stream¶
Server --> Client
Token-by-token streaming from a worker agent.
agent:thinking¶
Server --> Client
Extended thinking tokens from a worker agent.
agent:thinking-end¶
Server --> Client
End of an agent's thinking block.
agent:tool-call¶
Server --> Client
An agent invoked a tool (file_read, shell_exec, web_search, etc.).
agent:move¶
Server --> Client
An agent moved between zones in the 3D world.
Admin Assistant¶
admin-assistant:stream¶
Server --> Client
Token-by-token streaming from the Admin Assistant.
admin-assistant:response¶
Server --> Client
Complete Admin Assistant response.
admin-assistant:thinking¶
Server --> Client
Extended thinking tokens from the Admin Assistant.
admin-assistant:thinking-end¶
Server --> Client
End of the Admin Assistant's thinking block.
Coding Agents¶
codeagent:session-start¶
Server --> Client
A coding agent PTY session has started.
codeagent:session-end¶
Server --> Client
A coding agent PTY session has ended.
codeagent:event¶
Server --> Client
A coding agent lifecycle event (tool call, file change, etc.).
codeagent:message¶
Server --> Client
A message from the coding agent (output text).
codeagent:part-delta¶
Server --> Client
Streaming delta for code generation output.
codeagent:awaiting-input¶
Server --> Client
A coding agent is waiting for user input.
codeagent:permission-request¶
Server --> Client
A coding agent is requesting permission for a file write or shell command.
Terminal¶
terminal:data¶
Server --> Client
Terminal PTY output data from an agent session.
terminal:replay¶
Server --> Client
Terminal session replay data for late-joining clients.
Conversations¶
conversation:switched¶
Server --> Client
The active conversation was switched, includes message history.
World & Todos¶
world:zone-added¶
Server --> Client
A new zone was added to the world layout.
world:zone-removed¶
Server --> Client
A zone was removed from the world layout.
todo:created¶
Server --> Client
A new todo item was created.
todo:updated¶
Server --> Client
A todo item was updated.
todo:deleted¶
Server --> Client
A todo item was deleted.
reminder:fired¶
Server --> Client
A scheduled reminder was triggered.
Messaging Platform Events¶
Each messaging platform emits status and pairing events:
| Platform | Status Event | Pairing Event |
|---|---|---|
| Discord | discord:status |
discord:pairing-request |
| Slack | slack:status |
slack:pairing-request |
| Matrix | matrix:status |
matrix:pairing-request |
| IRC | irc:status |
irc:pairing-request |
| Teams | teams:status |
teams:pairing-request |
| Telegram | telegram:status |
telegram:pairing-request |
whatsapp:status |
— (uses QR code via status event) | |
| Signal | signal:status |
signal:pairing-request |
| Mattermost | mattermost:status |
mattermost:pairing-request |
| Nextcloud Talk | nextcloud-talk:status |
nextcloud-talk:pairing-request |
| Bluesky | bluesky:status |
bluesky:pairing-request |
| Google Chat | googlechat:status |
googlechat:pairing-request |
| Mastodon | mastodon:status |
mastodon:pairing-request |
Merge Queue¶
merge-queue:updated¶
Server --> Client
Complete merge queue state updated.
merge-queue:entry-updated¶
Server --> Client
Individual merge queue entry updated.
MCP¶
mcp:status¶
Server --> Client
MCP server runtime status update (started, stopped, error).
SSH¶
ssh:session-start¶
Server --> Client
An SSH session was initiated.
ssh:session-end¶
Server --> Client
An SSH session was closed.
ssh:chat-stream¶
Server --> Client
Streaming tokens from SSH chat analysis.
ssh:chat-response¶
Server --> Client
Complete SSH chat response with an optional command suggestion.
ssh:chat-analyzing¶
Server --> Client
SSH command analysis is in progress.
Data Types¶
Agent¶
{
"id": string,
"name": string,
"role": "coo" | "team_lead" | "worker" | "admin_assistant" | "scheduler" | "module_agent",
"status": "idle" | "thinking" | "acting" | "awaiting_input" | "done" | "error",
"registryEntryId": string | null,
"model": string,
"provider": string,
"baseUrl": string | null,
"temperature": number | null,
"parentId": string | null,
"projectId": string | null,
"workspacePath": string | null,
"modelPackId": string | null,
"gearConfig": GearConfig | null,
"createdAt": string
}
RegistryEntry¶
{
"id": string,
"name": string,
"description": string,
"systemPrompt": string,
"promptAddendum": string | null,
"capabilities": string[],
"defaultModel": string,
"defaultProvider": string,
"tools": string[],
"builtIn": boolean,
"role": "coo" | "team_lead" | "worker" | "admin_assistant" | "scheduler" | "module_agent",
"modelPackId": string | null,
"gearConfig": GearConfig | null,
"clonedFromId": string | null,
"createdAt": string
}
Project¶
{
"id": string,
"name": string,
"description": string,
"status": "active" | "completed" | "failed" | "cancelled",
"charter": string | null,
"charterStatus": "gathering" | "finalized",
"githubRepo": string | null,
"githubBranch": string | null,
"githubIssueMonitor": boolean,
"signCommits": boolean,
"show3d": boolean,
"githubAccountId": string | null,
"giteaRepo": string | null,
"giteaBranch": string | null,
"giteaIssueMonitor": boolean,
"giteaAccountId": string | null,
"rules": string[],
"createdAt": string
}
KanbanTask¶
{
"id": string,
"projectId": string,
"title": string,
"description": string,
"column": "backlog" | "in_progress" | "done",
"position": number,
"assigneeAgentId": string | null,
"createdBy": string | null,
"completionReport": string | null,
"labels": string[],
"blockedBy": string[],
"createdAt": string,
"updatedAt": string
}
Conversation¶
BusMessage¶
{
"id": string,
"fromAgentId": string | null,
"toAgentId": string | null,
"type": "chat" | "directive" | "report" | "status" | "status_request" | "status_response",
"content": string,
"metadata": object,
"projectId": string | null,
"conversationId": string | null,
"correlationId": string | null,
"timestamp": string
}
Todo¶
{
"id": string,
"title": string,
"description": string | null,
"status": "pending" | "in_progress" | "done",
"priority": "low" | "medium" | "high",
"dueDate": string | null,
"createdAt": string,
"updatedAt": string
}
CustomTool¶
{
"id": string,
"name": string,
"description": string,
"parameters": object, // JSON Schema
"code": string,
"enabled": boolean,
"createdAt": string,
"updatedAt": string
}
Skill¶
{
"id": string,
"name": string,
"description": string,
"content": string, // Markdown prompt fragment
"tags": string[],
"createdAt": string,
"updatedAt": string
}
Memory¶
{
"id": string,
"category": "observation" | "decision" | "learning" | "preference" | "fact" | "instruction",
"content": string,
"source": "agent" | "user" | "system" | "compactor",
"agentScope": string | null, // null = all agents, or specific role
"projectId": string | null, // null = global, or project-scoped
"importance": number, // 1-10
"accessCount": number,
"lastAccessedAt": string | null,
"createdAt": string,
"updatedAt": string
}
SoulDocument¶
{
"id": string,
"agentRole": string, // "coo", "team_lead", "worker", "admin_assistant", "global"
"registryEntryId": string | null, // null for role-level defaults, or specific registry entry ID
"content": string, // markdown document
"createdAt": string,
"updatedAt": string
}
GitHubAccount¶
{
"id": string,
"label": string,
"tokenSet": boolean,
"username": string | null,
"email": string | null,
"sshKeySet": boolean,
"sshFingerprint": string | null,
"sshKeyType": string | null,
"isDefault": boolean,
"createdAt": string
}
GiteaAccount¶
{
"id": string,
"label": string,
"tokenSet": boolean,
"username": string | null,
"email": string | null,
"instanceUrl": string,
"isDefault": boolean,
"createdAt": string
}
ProjectAgentAssignments¶
ProjectPipelineConfig¶
{
"enabled": boolean, // master toggle — pipeline on/off for this project
"stages": Record<string, { "enabled": boolean, "agentId": string }>
}