Documentation
Remote Access, Web UI, and HTTP API
Running the Daemon
Start the daemon with any of these methods:
just run-httpdArbor --daemonARBOR_HTTPD_BIND=0.0.0.0:8787 cargo +nightly-2025-11-30 run -p arbor-httpdArbor --daemon --bind 0.0.0.0:8787
Connecting Clients
Arbor's daemon is shared by the native GUI, the bundled web dashboard, arbor-cli, and arbor-mcp.
http://HOST:8787/opens the bundled web UI and also serves the HTTP API under/api/v1.- The desktop GUI accepts
http://IP:port/for direct access. - The desktop GUI also accepts
ssh://IP/orssh://user@IP:22/to create a local SSH tunnel and route daemon traffic over SSH. arbor-cliandarbor-mcpuseARBOR_DAEMON_URLand optionalARBOR_DAEMON_AUTH_TOKEN.
Desktop Daemon URL Override
Set daemon_url = "http://127.0.0.1:8787" in ~/.config/arbor/config.toml.
Auth and Web UI Assets
Loopback callers are allowed without authentication. Non-loopback callers must send Authorization: Bearer <token> when [daemon].auth_token is configured in ~/.config/arbor/config.toml.
If crates/arbor-web-ui/app/dist/index.html is missing, the daemon attempts an on-demand build with npm so the bundled dashboard stays available.
HTTP API Reference (v1)
Base URL defaults to http://127.0.0.1:8787 on localhost and can bind remotely when auth is configured or ARBOR_HTTPD_BIND is set.
GET /api/v1/health
Returns daemon health.
GET /api/v1/repositories
Returns known repository roots from ~/.arbor/repositories.json.
GET /api/v1/issues
Returns provider-backed issues for one repository, including suggested worktree names and linked branch / review metadata.
Query param: repo_root (required).
GET /api/v1/worktrees
Returns worktrees across known repositories.
Query param: repo_root (optional) — filter to one repository root path.
POST /api/v1/worktrees/managed/preview
Previews the sanitized worktree name, branch, and path for a managed worktree.
POST /api/v1/worktrees/managed
Creates a managed worktree from an issue-derived or manually entered name.
GET /api/v1/terminals
Returns merged terminal session records from the daemon runtime and ~/.arbor/daemon/sessions.json.
POST /api/v1/terminals
Creates or attaches a terminal session.
{
"session_id": "daemon-1",
"workspace_id": "/Users/me/code/project",
"cwd": "/Users/me/code/project",
"shell": "/bin/zsh",
"cols": 120,
"rows": 35,
"title": "term-project"
}
session_id is optional — the daemon generates one when omitted.
GET /api/v1/terminals/:session_id/snapshot
Returns output tail and state for one session.
Query param: max_lines (optional, default 180, max 2000).
POST /api/v1/terminals/:session_id/write
Writes raw terminal input bytes to a session.
ls -la
POST /api/v1/terminals/:session_id/resize
Resizes a terminal grid.
{ "cols": 120, "rows": 35 }
POST /api/v1/terminals/:session_id/signal
Sends a signal to a terminal session.
{ "signal": "interrupt" }
Allowed values: interrupt, terminate, kill.
POST /api/v1/terminals/:session_id/detach
Detaches the current client from a daemon-managed terminal session without killing it.
DELETE /api/v1/terminals/:session_id
Kills and removes a daemon-managed terminal session.
Runtime Streams and Daemon Control
GET /api/v1/terminals/:session_id/ws
WebSocket stream for interactive terminal I/O.
Client messages
{"type":"input","data":"echo hi\n"}
{"type":"resize","cols":140,"rows":40}
{"type":"signal","signal":"interrupt"}
{"type":"detach"}
Server messages
{"type":"snapshot", ...}
{"type":"output", ...}
{"type":"exit", ...}
{"type":"error", ...}
GET /api/v1/agent/activity
Returns the current agent activity snapshot.
POST /api/v1/agent/notify
Accepts hook updates that move an agent session into working or waiting state.
GET /api/v1/agent/activity/ws
WebSocket stream for real-time agent activity updates.
GET /api/v1/processes
Returns managed processes from Procfile and arbor.toml, including source, status, restart count, memory usage, and linked terminal session id.
POST /api/v1/processes/start-all
Starts all configured managed processes. Individual start, stop, and restart endpoints also exist under /api/v1/processes/:name/*.
GET /api/v1/processes/ws
WebSocket stream for process snapshots and status updates.
GET /api/v1/tasks
Returns scheduled [[tasks]] loaded from arbor.toml.
POST /api/v1/tasks/:name/run
Manually triggers one scheduled task. Task history is available from /api/v1/tasks/:name/history, and task streaming uses /api/v1/tasks/ws.
GET /api/v1/logs/ws
Streams daemon log lines over WebSocket for the desktop app and other tooling.
POST /api/v1/config/bind
Updates the daemon bind mode. Use GET /api/v1/config/bind to read the current setting.
POST /api/v1/shutdown
Requests daemon shutdown. This is limited to localhost callers.
If Arbor is built with the optional symphony feature, additional endpoints are exposed under /api/v1/symphony/*.