Skip to main content
neutral

Phase 14 — Production API

Exposes the full Cruvero agent runtime as a production-grade REST API with OpenAPI 3.1, JWT/API key auth, per-tenant rate limiting, OTel tracing, and ECS logging. Built on Huma v2 + Chi, deployed as cmd/api — independent from the existing cmd/ui operator console.

Status: Completed (2026-02-09) Depends on: Phases 1-10 complete Tech spec: CRUVERO-API.md (root) Migrations: None (API layer only — uses existing stores)


Sub-Phases

Sub-PhaseNamePromptsDepends On
14AFoundation & Scaffold3
14BAgent Runs & Lifecycle314A
14CTools & Registry214A
14DSupervisor & Graph Workflows314A
14EMemory, Traces & Provenance214A
14FModels, Cost & Diff Testing214A
14GTenants, Quota, Audit & Security314A
14HAdmin & Worker Operations214A
14ITesting & Documentation314B-14H

Dependency Graph

14A (Foundation) ──┬──→ 14B (Runs)
├──→ 14C (Tools)
├──→ 14D (Supervisor/Graph)
├──→ 14E (Memory/Traces)
├──→ 14F (Models/Cost)
├──→ 14G (Tenants/Quota/Audit)
└──→ 14H (Admin)

14B-14H ──────────→ 14I (Testing & Docs)

Sub-phases 14B-14H are independent of each other and can be built in parallel after 14A completes. Each registers its route group on the Huma API instance created in 14A.

14I must be done last — it tests all route groups and updates project documentation.

CLI-to-API Mapping

38 of 42 CLIs are exposed via API endpoints. 2 are dev tooling (migrate, temporal-agent), 2 are worker processes managed via admin endpoints (worker, graph-worker).

Agent Runs & Lifecycle (14B) — 10 CLIs

CLIHTTP MethodEndpoint
runPOST/v1/runs
queryGET/v1/runs/{id}/state, /decisions, /trace
approvePOST/v1/runs/{id}/approve
answerPOST/v1/runs/{id}/answer
controlPOST/v1/runs/{id}/control
edit-statePATCH/v1/runs/{id}/state
inspectGET/v1/runs/{id}
replayPOST/v1/runs/{id}/replay
replay-comparePOST/v1/replay-compare
cost-queryGET/v1/runs/{id}/cost

Tools & Registry (14C) — 6 CLIs

CLIHTTP MethodEndpoint
list-toolsGET/v1/tools
seed-registryPOST/v1/tools/registries
compose-toolPOST/v1/tools/compose
(tool execute)POST/v1/tools/execute
(tool approvals)POST/v1/tools/approvals
(tool repair)POST/v1/tools/repair

Supervisor & Graph Workflows (14D) — 8 CLIs

CLIHTTP MethodEndpoint
supervisor-runPOST/v1/supervisor
supervisor-queryGET/v1/supervisor/{id}
supervisor-signalPOST/v1/supervisor/{id}/signal
graph-runPOST/v1/graph
graph-run-llmPOST/v1/graph (variant)
graph-queryGET/v1/graph/{id}
graph-approvePOST/v1/graph/{id}/approve
graph-edit-statePATCH/v1/graph/{id}/state

Memory, Traces & Provenance (14E) — 3 CLIs

CLIHTTP MethodEndpoint
memory-queryGET/v1/memory
trace-queryGET/v1/traces
provenance-queryGET/v1/provenance

Models, Cost & Diff Testing (14F) — 5 CLIs

CLIHTTP MethodEndpoint
models-listGET/v1/models
models-refreshPOST/v1/models/refresh
model-prefsGET/PUT/v1/models/preferences
cost-query (agg)GET/v1/cost
diff-testPOST/v1/diff-test

Tenants, Quota, Audit & Security (14G) — 5 CLIs

CLIHTTP MethodEndpoint
tenantCRUD/v1/tenants
quotaGET/POST/v1/quota
audit-exportGET/v1/audit/export
vaccinatePOST/v1/immune/vaccinate
(security alerts)GET/v1/security/alerts

Admin & Worker Operations (14H) — 7 CLIs

CLIHTTP MethodEndpoint
workerPOST/GET/v1/admin/workers/*
graph-workerPOST/v1/admin/workers/start (type=graph)
backupPOST/v1/admin/backup/*
agent-versionGET/PUT/v1/agent-versions
agent-capabilityGET/POST/v1/capabilities
record-fixturesPOST/v1/admin/fixtures
bash-allowlistPOST/v1/admin/validate-bash
python-manifestGET/v1/admin/python-manifest

Not Exposed (2 CLIs — dev tooling)

  • migrate — Database migration (ops tooling, run via CI/CD)
  • temporal-agent — Project scaffolding CLI (dev tooling)

File Structure

cmd/api/
main.go # Entrypoint, humacli setup, server lifecycle
internal/api/
config.go # API-specific config (extends internal/config)
server.go # Server setup, middleware chain, route registration
middleware/
auth.go # JWT / API key auth
logging.go # Zap ECS request logger
ratelimit.go # Per-tenant rate limiting
cors.go # CORS configuration
tenant.go # Tenant extraction and context injection
routes/
health.go # /v1/health endpoints (14A)
runs.go # /v1/runs endpoints (14B)
tools.go # /v1/tools endpoints (14C)
supervisor.go # /v1/supervisor endpoints (14D)
graph.go # /v1/graph endpoints (14D)
memory.go # /v1/memory endpoints (14E)
traces.go # /v1/traces endpoints (14E)
provenance.go # /v1/provenance endpoints (14E)
models.go # /v1/models endpoints (14F)
cost.go # /v1/cost endpoints (14F)
tenants.go # /v1/tenants endpoints (14G)
quota.go # /v1/quota endpoints (14G)
audit.go # /v1/audit endpoints (14G)
security.go # /v1/security + /v1/immune endpoints (14G)
admin.go # /v1/admin endpoints (14H)
types/
requests.go # Shared Huma input types
responses.go # Shared Huma output types
errors.go # Custom error types

Key Patterns

  • Store initialization: Follows cmd/ui/main.go lines 62-136 (Temporal client, Postgres, registry store, audit, quota)
  • Auth middleware: Reuse Keycloak JWKS from cmd/ui (lines 1553-1667) but extend with API key support
  • SSE streaming: Reuse writeSSE() pattern from cmd/ui (lines 1544-1551) adapted for Huma StreamResponse
  • Temporal operations: Same patterns as each CLI's main.go (ExecuteWorkflow, QueryWorkflow, SignalWorkflow)
  • Config loading: internal/config/config.go Config.Load() with new CRUVERO_API_* env vars
  • Pagination: Token-based using encodePageToken/decodePageToken pattern from cmd/ui

Environment Variables (new)

VariableDefaultDescription
CRUVERO_API_PORT8900API listen port
CRUVERO_API_READ_TIMEOUT30sHTTP read timeout
CRUVERO_API_WRITE_TIMEOUT60sHTTP write timeout
CRUVERO_API_IDLE_TIMEOUT120sHTTP idle timeout
CRUVERO_API_SHUTDOWN_TIMEOUT15sGraceful shutdown timeout
CRUVERO_API_AUTHnoneAuth mode: none, keycloak, apikey
CRUVERO_API_JWKS_URLKeycloak JWKS endpoint
CRUVERO_API_ISSUERJWT issuer
CRUVERO_API_AUDIENCEJWT audience
CRUVERO_API_API_KEYSComma-separated static API keys
CRUVERO_API_RATE_LIMIT1000Requests/minute per tenant
CRUVERO_API_RATE_LIMIT_BURST50Burst allowance
CRUVERO_API_CORS_ORIGINS*Comma-separated allowed origins
CRUVERO_API_CORS_MAX_AGE3600CORS max age seconds
CRUVERO_OTEL_ENDPOINTOTLP exporter endpoint
CRUVERO_OTEL_INSECUREfalseUse insecure OTLP connection
CRUVERO_LOG_LEVELinfoLog level

Prompt Files

Each sub-phase has a companion -PROMPT.md file containing implementation prompts designed for LLM-assisted coding. Prompts are ordered by dependency within each sub-phase. Load the listed context files before executing each prompt.

Verification

After all sub-phases are complete:

  1. go build ./cmd/api — compiles cleanly
  2. go test ./internal/api/... — all unit tests pass
  3. go test ./... — no regressions in existing tests
  4. Start API server, confirm GET /v1/health returns 200
  5. Confirm GET /docs returns OpenAPI 3.1 spec
  6. Test auth with both JWT and API key
  7. Test SSE streaming on /v1/runs/\{id\}/stream
  8. Verify per-tenant rate limiting works