docs: add Phase 5 ACP roadmap + deploy OpenHands agent-server on Dokploy

- Added Phase 5: ACP Harness & Runtime Agnosticism to roadmap
- Created docker/docker-compose.agent-server.yml for CT 102 deployment
- Updated worker default AGENT_SERVER_URL to internal Docker DNS (http://agent-server:8001)
- Worker now runs OpenHands sessions directly on the server, no laptop/Traefik needed
This commit is contained in:
Randall Stillwell 2026-09-08 10:13:27 -05:00
parent 3fc7d01585
commit 4efaf6c0c8
3 changed files with 84 additions and 6 deletions

View file

@ -38,11 +38,11 @@ const envSchema = z.object({
.enum(["minimal", "openhands"])
.optional()
.default("minimal"),
/** OpenHands agent-server URL (local: http://localhost:18000, Cloud: from conversation). */
/** OpenHands agent-server URL. Docker: http://agent-server:8001, Local: http://localhost:18000 */
AGENT_SERVER_URL: z
.string()
.optional()
.transform((value) => value?.trim() || "http://localhost:18000"),
.transform((value) => value?.trim() || "http://agent-server:8001"),
/** OpenHands session API key for agent-server auth. */
SESSION_API_KEY: z
.string()

View file

@ -0,0 +1,51 @@
# OpenHands Agent Server for Submatter
# Deploys on Dokploy (CT 102) alongside the existing stack
# Worker connects via internal Docker DNS: http://agent-server:8001
version: '3.8'
services:
agent-server:
image: ghcr.io/open-hands/agent-server:0.19.0 # pin to stable version
container_name: echodo-agent-server
ports:
- "8001:8001" # agent-server API
environment:
# Server config
- AGENT_SERVER_HOST=0.0.0.0
- AGENT_SERVER_PORT=8001
- LOCAL_BACKEND_API_KEY=${LOCAL_BACKEND_API_KEY}
# LLM config for the agent-server's own operations
- LLM_MODEL=${OMNIROUTE_MODEL:-auto/coding}
- LLM_API_KEY=${OMNIROUTE_API_KEY}
- LLM_BASE_URL=${OMNIROUTE_BASE_URL}
# Sandbox config
- SANDBOX_TYPE=docker
- SANDBOX_DOCKER_IMAGE=ghcr.io/open-hands/sandbox:latest
- SANDBOX_TIMEOUT=300
# Workspace persistence
- WORKSPACE_BASE=/workspace
volumes:
- agent-server-workspace:/workspace
- /var/run/docker.sock:/var/run/docker.sock # for sandbox containers
networks:
- echodo-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/server_info"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
deploy:
resources:
limits:
memory: 2G
cpus: '2'
volumes:
agent-server-workspace:
networks:
echodo-network:
external: true

View file

@ -435,15 +435,42 @@ By end of Phase 4:
---
## Phase 5: ACP Harness & Runtime Agnosticism (post-v0.1)
**Goal:** Make submatter runtime-agnostic via Agent Client Protocol (ACP).
**Why:** ACP is an emerging standard that allows OpenHands, Claude Code, Gemini CLI, and other runtimes to be swapped via a single protocol. This prevents vendor lock-in and lets operators choose the best runtime per task.
**Tasks:**
1. Add `HarnessType: "acp"` to shared types
2. Create `apps/worker/src/executor/acp-executor.ts` — implements ACP client (connects to any ACP-compatible server)
3. Support ACP discovery via `/.well-known/agent.json` (runtime metadata)
4. Add `acp` harness type to executor registry
5. Support sub-agents via ACP Task Tool Set
**ACP-compatible runtimes:**
- OpenHands (primary)
- Claude Code (Anthropic)
- Gemini CLI (Google)
- Cursor (experimental)
- Custom (any ACP server)
**This is NOT required for v0.1 testing.** Ships after v0.1 ships and proves out.
---
## Rollout & Scaling
Once Phase 4 succeeds:
1. **Publish to v0.1** — Mark the orchestrator + worker as production-ready for autonomous convoys
2. **Scale briefs** — Extend to 5–6 briefs per convoy (architect → implementer → reviewer → ops-copilot → etc.)
3. **Scale roles** — Add `role-docs-writer`, `role-security-auditor`, `role-performance-reviewer` as needed
4. **Scale models** — Extend omniroute integration to support Claude/OpenAI/Gemini APIs side-by-side
5. **Migrate Cursor convoys** — For convoys that have historically run in Cursor, run them via OpenHands instead (backward compat: human-initiated, not automated)
2. **Deploy OpenHands Agent Server** — Docker container on Dokploy (CT 102), worker connects via internal Docker DNS
3. **Scale briefs** — Extend to 5–6 briefs per convoy (architect → implementer → reviewer → ops-copilot → etc.)
4. **Scale roles** — Add `role-docs-writer`, `role-security-auditor`, `role-performance-reviewer` as needed
5. **Scale models** — Extend omniroute integration to support Claude/OpenAI/Gemini APIs side-by-side
6. **Migrate Cursor convoys** — For convoys that have historically run in Cursor, run them via OpenHands instead (backward compat: human-initiated, not automated)
7. **ACP harness** — After v0.1 ships, add ACP support to enable runtime-agnostic agent execution
---