Local-first personal ops board with a minimal web UI, snapshotting, and agent action logging.
- Node.js 18+
npm installThe ingest scripts read from your clawd workspace. Provide one of:
SOURCE_ROOT(preferred)- or explicit flags:
--briefly-dir,--mission-control-dir,--memory-file
Example:
export SOURCE_ROOT="/Users/thuptenwangpo/clawd"Required (ingest/snapshot):
SOURCE_ROOTor CLI flags (--briefly-dir,--mission-control-dir,--memory-file)
Optional:
AGENT_SESSIONS_PATH: path to sessions JSON or a directory containingsessions.jsonDB_PATH: override SQLite file (defaultops_board/ops_board.sqlite)PORT: UI port (default3333)OPENCLAW_GATEWAY_ENABLED: set to1to use the Gateway as session sourceOPENCLAW_GATEWAY_URL: Gateway WS URL (examplews://127.0.0.1:18789)OPENCLAW_GATEWAY_TOKEN: Gateway token (preferred)OPENCLAW_GATEWAY_PASSWORD: Gateway password (fallback)OPENCLAW_GATEWAY_SCOPES: comma-separated scopes (defaultoperator.read,operator.write)OPENCLAW_GATEWAY_FALLBACK: set to1to fallback to file sessions on errorsOPENCLAW_SESSION_ID_FIELD: required session id field path for normalizationOPENCLAW_SESSION_TITLE_FIELD: optional title field pathOPENCLAW_SESSION_AGENT_FIELD: optional agent field pathOPENCLAW_SESSION_LAST_MESSAGE_FIELD: optional last message field pathOPENCLAW_SESSION_LAST_ACTIVE_FIELD: optional last active field pathOPENCLAW_CHAT_SEND_SESSION_FIELD: session field name forchat.send(defaultsessionKey)OPENCLAW_CHAT_SEND_MESSAGE_FIELD: message field name forchat.send(defaultmessage)
Example:
export SOURCE_ROOT="/Users/thuptenwangpo/clawd"
export AGENT_SESSIONS_PATH="/Users/thuptenwangpo/.openclaw/agents/main/sessions"
export DB_PATH="/Users/thuptenwangpo/Documents/GitHub/agentdeck/ops_board/ops_board.sqlite"
export PORT=3333
export OPENCLAW_GATEWAY_ENABLED=1
export OPENCLAW_GATEWAY_URL="ws://127.0.0.1:18789"
export OPENCLAW_GATEWAY_TOKEN="your-token"
export OPENCLAW_SESSION_ID_FIELD="id"
export OPENCLAW_SESSION_TITLE_FIELD="title"
export OPENCLAW_SESSION_LAST_MESSAGE_FIELD="last_message"npm run ingest:dry
npm run snapshotSnapshots are written to reports/ops-board/YYYY-MM-DD.json.
npm startOpen http://localhost:3333.
The UI reads sessions from a JSON file. By default:
ops_board/agent/sessions.json
If OpenClaw is installed, AgentDeck will automatically look for
~/.openclaw/agents/<agent>/sessions (preferring main, then main2) before
falling back to the repo default. Set AGENT_SESSIONS_PATH to override.
To point at a different file:
export AGENT_SESSIONS_PATH="/path/to/sessions.json"Example format:
{
"sessions": [
{
"id": "session-123",
"title": "Daily ops",
"last_message": "Working on ingest.",
"history": [
{ "role": "assistant", "content": "Task received." }
]
}
]
}To use the OpenClaw Gateway as the session source, enable it and provide the
session field mapping you want to normalize from the live Gateway response.
Gateway auth is sent on connect as connect.params.auth.token or .password.
Minimal example:
export OPENCLAW_GATEWAY_ENABLED=1
export OPENCLAW_GATEWAY_URL="ws://127.0.0.1:18789"
export OPENCLAW_GATEWAY_TOKEN="your-token"
export OPENCLAW_SESSION_ID_FIELD="id"npm run validateRun Playwright regression tests:
npx playwright install chromium
npm run test:e2eRun browser automation smoke checks (requires agent-browser CLI):
npm run test:browser:smoke