* feat: seed automation API key into agent-server secrets - Add seedAutomationSecret() that calls PUT /api/settings/secrets after agent-server is ready, storing the automation API key as OPENHANDS_AUTOMATION_API_KEY - This makes the key available to agents during conversations so they can authenticate with the automation backend - Add sessionApiKey to config for optional auth header - Update help text and documentation Co-authored-by: openhands <openhands@all-hands.dev> * test: add tests for seed automation secret and fix CI failure - Add tests for localApiKey and sessionApiKey config in buildConfig - Add tests for secrets documentation in help output - Fix root-layout-refetch.test.tsx unhandled rejection from framer-motion by adding async cleanup with microtask flush Co-authored-by: openhands <openhands@all-hands.dev> * fix: detect SESSION_API_KEY when seeding automation secret The seedAutomationSecret() function was failing with 401 Unauthorized because it wasn't detecting the SESSION_API_KEY environment variable that the agent-server uses by default (V0 config). The agent-server checks these env vars for session API keys: - SESSION_API_KEY (V0 config, picked up by default factory) - OH_SESSION_API_KEYS_0 (V1 config) The original code only checked OH_SESSION_API_KEY and VITE_SESSION_API_KEY, missing the actual env vars the server reads. In OpenHands Cloud environments, SESSION_API_KEY is set automatically, causing the 401. This fix adds SESSION_API_KEY and OH_SESSION_API_KEYS_0 to the fallback chain, with SESSION_API_KEY taking highest precedence since it matches the agent-server's default behavior. Adds tests verifying: - SESSION_API_KEY detection - OH_SESSION_API_KEYS_0 detection - Precedence order (SESSION_API_KEY > OH_SESSION_API_KEYS_0 > others) Co-authored-by: openhands <openhands@all-hands.dev> * fix: add retry logic and longer timeout for secret seeding On slower systems, the agent-server may take longer to start up, causing the secret seeding to fail with 'fetch failed' errors. This fix adds: 1. Increased initial wait timeout from 30s to 60s for agent-server startup 2. Retry logic in seedAutomationSecret (5 retries with 2s delay) 3. Better error logging showing elapsed time and last error 4. AbortSignal.timeout on fetch requests to avoid hanging 5. Skip seeding if server fails to start (with warning message) The retry logic handles transient failures during server warmup but immediately fails on 401/403 auth errors (no point retrying). Co-authored-by: openhands <openhands@all-hands.dev> --------- Co-authored-by: openhands <openhands@all-hands.dev>
agent-canvas
Warning
This project is in an early incubator phase. It may be vibecoded, untested, or out of date. OpenHands takes no responsibility for the code or its support. Learn more.
Quickstart
This repository is a near-direct port of the OpenHands frontend adapted to talk directly to software-agent-sdk / agent_server without the usual OpenHands app backend.
Prerequisites
- Node.js 22.12.x or later
npmuv(for running the agent server viauvx)
1. Clone and install the frontend
git clone https://github.com/OpenHands/agent-canvas.git
cd agent-canvas
npm install
2. Install uv
If you do not already have uv installed, install it first (OpenHands SDK recommends uv 0.8.13+):
curl -LsSf https://astral.sh/uv/install.sh | sh
Need Windows or another install method? See the official uv installation guide: https://docs.astral.sh/uv/getting-started/installation/
If ~/.local/bin is not already on your PATH, add it:
export PATH="$HOME/.local/bin:$PATH"
command -v uvx
The npm run dev command uses uvx to automatically download and run the agent server, so no separate installation step is needed.
3. Optional: create a .env file
If you need to change the backend URL, frontend port, session API key, or working directory, copy the sample file:
cp .env.sample .env
Then edit the values you need.
4. Start the app
npm run dev
This starts the full stack:
- Agent server (via uvx)
- Automation backend (via uvx)
- Vite dev server
- Ingress proxy (routes traffic to all backends)
Access the UI at http://localhost:8000
Environment Variables
| Variable | Description | Default |
|---|---|---|
PORT |
Ingress port | 8000 |
OH_AUTOMATION_GIT_REF |
Git ref for automation backend | main |
OH_AGENT_SERVER_GIT_REF |
Git ref for agent-server | main |
5. First-run sanity check
After the page opens:
/should load without errors/settingsshould load- configure a working LLM model + API key under
Settings > LLMbefore running the first live task - you should be able to open or create a conversation
/api/automation/docsshould show the automation API docs
Alternative: Minimal Mode (without Automation)
To run without the automation service:
npm run dev:minimal
This runs only agent-server + Vite (no automation backend or ingress).
Access at http://localhost:3001/
More documentation
For contributor and developer workflows, including frontend-only mode, mock mode, environment variables, and build/test commands, see DEVELOPMENT.md.