Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pod Architecture

Each devaipod workspace is a podman pod containing several containers:

ContainerRole
workspaceUser's dev environment (from devcontainer image)
agentRuns the AI agent (opencode); has its own workspace copy
gatorservice-gator — fine-grained MCP server for GitHub/GitLab/Forgejo
apipod-api sidecar — HTTP server for git status, summary, completion status

All containers in a pod share the network namespace (localhost communication). The api container has a /healthz endpoint and a podman healthcheck configured.

Key source files

FilePurpose
src/main.rsCLI entry point and all subcommand handlers
src/pod.rsPod creation, container configs, volume management
src/pod_api.rsPod-api sidecar HTTP server (axum)
src/podman.rsPodman API abstraction, ContainerConfig, PodmanService
src/web.rsWeb UI server, proxy routes, auth
src/config.rsConfiguration types and loading
src/ssh_server.rsSSH server for exec --stdio connections

Volumes

Each pod creates up to 5 named volumes (suffixed with the pod name): workspace, agent-home, agent-workspace, worker-home, worker-workspace. The worker volumes are only created when orchestration mode is enabled.

Known issue: cmd_prune and prune_done_pods do not clean up volumes when removing pods. cmd_delete handles this correctly. This is a bug to fix.

Tracing

All log output goes to stderr (via tracing_subscriber with .with_writer(std::io::stderr)). This is important because some commands (e.g. exec --stdio, gator show --json) use stdout for structured data.