Arbor Arbor

← Docs

Documentation

Remote Access, Web UI, and HTTP API

Running the Daemon

Start the daemon with any of these methods:

Connecting Clients

Arbor's daemon is shared by the native GUI, the bundled web dashboard, arbor-cli, and arbor-mcp.

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/*.