ctrlnode executes tasks locally and streams results over a single outbound WebSocket. Repositories and agent workspaces stay on your hardware.
Source: github.com/ctrlnode-ai/ctrlnode
Architecture
| Component | Role |
|---|---|
| Web app | Tasks, Kanban, workflows, routines, team, project work directory |
Bridge (ctrlnode) | Connection, dispatch, file sync, provider implementations |
| Providers | OpenClaw, Claude, Copilot, Gemini, Codex, Cursor, Hermes |
Binary name
| Platform | Release asset | Typical command |
|---|---|---|
| Windows | ctrlnode.exe | ctrlnode |
| Linux | ctrlnode-linux-x64 or ctrlnode-linux-x64-baseline | ctrlnode |
| macOS (ARM) | ctrlnode-darwin-arm64 | ctrlnode |
ctrlnode-bridge are no longer used in installers or docs.
Pairing
- Sign in at app.ctrlnode.ai.
- Open System → Bridge Setup (or the setup wizard token step).
- Generate a pairing token and copy it once.
- Run
ctrlnodewith that token (see Install).
Configuration
Installers write:PAIRING_TOKEN, SAAS_URL, and BASE_PATH (workspace parent). The Bridge also reads .env from {BASE_PATH}/.ctrlnode/.env first, then cwd. See Configuration.
Data layout under BASE_PATH
config.yaml, SOUL.md) live under ~/.hermes/profiles/{agentId}/ (HERMES_HOME at spawn). The .ctrlnode/agents/ folder is for Bridge-managed AGENTS.md copies when a Hermes agent is provisioned — Claude, Copilot, Cursor, and Gemini do not use it.
Project work directory is configured in the app per project (not BASE_PATH). Tasks in WORK DIRECTORY mode can read and edit that full directory. See Task work modes.
Agent routing (no PROVIDERS env)
All provider implementations load in every Bridge process. PROVIDERS / PROVIDER environment variables are ignored.
CtrlNode drives routing:
- Each project has a default agent type (CLI badge).
- Each agent in Team has
agent_type. - On connect, CtrlNode sends
sync_{provider}_agentsper provider. - Dispatch resolves agent id → provider → runs that CLI/SDK.
| Project agent type | Bridge provider id |
|---|---|
OpenClaw | openclaw |
ClaudeCode | claude |
ClaudeAgentSdk | claude-sdk |
Copilot | copilot |
Gemini | gemini |
CodexSdk | codex |
Cursor | cursor |
Hermes | hermes |
Runtime responsibilities
- Dispatch — run provider for task intent; stream activity to CtrlNode
- Task modes — OUTPUT ONLY (isolated task folder) vs WORK DIRECTORY (project repo or Bridge home)
- Terminal states —
completed,blocked,failed(including CLI auth errors) - File events — notify the app when agents write under task or repo paths
- Models — report models per provider after connect
- Sync — register agents from CtrlNode; OpenClaw may discover local
openclaw.jsonagents
Related docs
| Topic | Page |
|---|---|
| Install | Install |
| Environment | Configuration |
| CLIs | Providers |
| Task OUTPUT vs WORK DIRECTORY | Task work modes |
| UI tokens | Bridge Setup |