- Dockerfile 83.6%
- Shell 16.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .claude | ||
| agent | ||
| gmp | ||
| k8s-mcp | ||
| openspec | ||
| .env.example | ||
| .gitignore | ||
| compose.yaml | ||
| README.md | ||
| renovate.json | ||
agentic-env
Coding agents (Claude Code, pi, codex) in rootless podman, driven by herdr in the terminal or orca in the browser, without access to host credentials. Small credential containers expose a read-only Kubernetes MCP server and one Prometheus query proxy per GCP project.
Layout
compose.yaml agent, orca, k8s-mcp, gmp-<short> x9
agent/ Arch image: tooling, claude, pi, codex, herdr, orca
k8s-mcp/ gcloud CLI image + kubernetes-mcp-server (read-only)
gmp/ alpine + gmp-frontend
.env.example AGENT_HOME
$AGENT_HOME (default ~/agentic) is mounted as /home/stefan in the agent and orca
containers. Repos go to $AGENT_HOME/git, which is ~/git inside.
First run
cp .env.example .env, adjustAGENT_HOME, create the directory.podman compose build agent k8s-mcp gmp-tho-prod(one service per image, docker-compose would otherwise build the shared gmp image nine times in parallel).podman compose up -dpodman compose exec agent herdrattaches to the herdr session.- In a pane:
ssh-keygen -t ed25519, add the key to GitHub, clone into~/git, runclaudeto log in. podman compose logs orcaprints the pairing URL, open it in the host browser.
Daily
podman compose up -d
podman compose exec agent herdr # terminal
podman compose logs orca | grep -i pair # browser
podman compose down
Detaching from herdr or closing the browser leaves agents running.
Inside the agent container
- Kubernetes:
kubernetesMCP server, read-only, athttp://k8s-mcp:8080/mcp. - Prometheus:
http://gmp-<short>:9090, see~/.claude/CLAUDE.mdfor the list. - Nix:
nix-shell -p <pkg>andnu <pkg>use the host store through the host nix daemon. - No
kubectl,gcloud,oc,terraform.
Credentials
k8s-mcp mounts ~/.config/gcloud and ~/.kube/config read-only and copies the gcloud config
into the container at start. The gmp-* containers mount only
application_default_credentials.json. When the host login expires, run gcloud auth login
and gcloud auth application-default login on the host as usual and
podman compose restart k8s-mcp plus the gmp services. Kube contexts that authenticate through
secret-tool do not work in k8s-mcp.
The orca pairing URL grants access to the orca runtime. It is only reachable on
127.0.0.1:6768. Treat it like a password.
Rebuild
Versions are pinned as build args in the Containerfiles. Bump them, rebuild the affected image
as in step 2, then podman compose up -d.