Problem
Recent regressions could have been caught by basic CI tests:
Currently there are no CI tests that verify the built Docker images actually work.
Proposed Solution
Add a GitHub Actions workflow that runs on PRs touching Dockerfile*, src/**, or Cargo.*. For each of the 5 image variants (default/kiro, claude, codex, gemini, copilot), test 3 layers:
1. openab binary — CMD regression check
Run the container with its default CMD and assert no "unrecognized subcommand" error.
2. Agent CLI exists
which <agent-binary> to verify the correct binary name is in PATH.
3. ACP initialize handshake
Pipe a JSON-RPC initialize request into the agent over stdio and validate the response contains agentInfo:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{},"clientInfo":{"name":"ci-test","version":"0.0.1"}}}' \
| timeout 30 docker run --rm -i --entrypoint <agent> <image> <args> \
| head -1 | jq -e ".result.agentInfo.name"
No API keys or Discord tokens needed — initialize is an unauthenticated ACP handshake.
Test Matrix
| Variant |
Dockerfile |
Agent Binary |
Agent Args |
| kiro (default) |
Dockerfile |
kiro-cli |
acp --trust-all-tools |
| claude |
Dockerfile.claude |
claude-agent-acp |
|
| codex |
Dockerfile.codex |
codex-acp |
|
| gemini |
Dockerfile.gemini |
gemini |
--acp |
| copilot |
Dockerfile.copilot |
copilot |
--acp |
What this catches
Problem
Recent regressions could have been caught by basic CI tests:
CMDpasses config path as subcommand after clap migration → container crashes on startupgithub-copilotvscopilotmismatch →No such file or directoryCurrently there are no CI tests that verify the built Docker images actually work.
Proposed Solution
Add a GitHub Actions workflow that runs on PRs touching
Dockerfile*,src/**, orCargo.*. For each of the 5 image variants (default/kiro, claude, codex, gemini, copilot), test 3 layers:1. openab binary — CMD regression check
Run the container with its default
CMDand assert no"unrecognized subcommand"error.2. Agent CLI exists
which <agent-binary>to verify the correct binary name is in PATH.3. ACP initialize handshake
Pipe a JSON-RPC
initializerequest into the agent over stdio and validate the response containsagentInfo:No API keys or Discord tokens needed —
initializeis an unauthenticated ACP handshake.Test Matrix
Dockerfilekiro-cliacp --trust-all-toolsDockerfile.claudeclaude-agent-acpDockerfile.codexcodex-acpDockerfile.geminigemini--acpDockerfile.copilotcopilot--acpWhat this catches