Remote Developer - Claude Code instances in isolated Kubernetes pods
|
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
The claudebox sidecar was using api.WriteJSON which wraps responses in
{data: ..., meta: ...} format. The claudebox HTTP client expects raw
JSON responses without wrapping.
This caused git clone to appear to fail - the HTTP request succeeded
and returned {data: {success: true, cloned: true}, meta: {...}}, but
the client decoded success=false because it couldn't find the fields
at the top level.
Added writeRawJSON helper and replaced all api.WriteJSON calls with it
for actual responses. Error responses still use api.WriteBadRequest
which returns proper error format.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
||
|---|---|---|
| .claude/guides | ||
| ai-lookup | ||
| changelog | ||
| cmd | ||
| cookbooks | ||
| deployments/k8s/base | ||
| docs | ||
| examples/dashboard-app | ||
| history | ||
| ideas/aeres | ||
| internal | ||
| pkg/api | ||
| scripts | ||
| tests/e2e | ||
| .env.local.example | ||
| .gitignore | ||
| .gitkeep-ci | ||
| .golangci.yml | ||
| .woodpecker.yml | ||
| aeries-preparation-thoughts.md | ||
| app-vision-gaps.md | ||
| app-vision-roadmap.md | ||
| app-vision.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CODING_GUIDELINES.md | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| Dockerfile.api | ||
| Dockerfile.api.prebuild | ||
| Dockerfile.worker | ||
| go.mod | ||
| go.sum | ||
| IMPLEMENTATION_PLAN_V2.md | ||
| IMPLEMENTATION_PLAN.md | ||
| Makefile | ||
| PLAN.md | ||
| QUICKSTART.md | ||
| README.md | ||
| vision.md | ||
rdev - Remote Developer
Run Claude Code in isolated Kubernetes pods on your k3s cluster.
Quick Start
# 1. Set kubeconfig (REQUIRED - this is k3s, not GKE)
export KUBECONFIG=~/.kube/orchard9-k3sf.yaml
# 2. Authenticate Claude locally (if not already)
claude
# 3. Create credentials secret
./scripts/create-credentials-secret.sh
# 4. Deploy
./scripts/deploy.sh
# 5. Verify
./scripts/verify.sh
Usage
# Check Claude version
kubectl exec -n rdev claudebox-0 -- claude --version
# Interactive Claude session
kubectl exec -it -n rdev claudebox-0 -- claude "what can you help me with?"
# Run in workspace
kubectl exec -it -n rdev claudebox-0 -- bash
cd /workspace
claude "create a hello world go program"
Architecture
k3s cluster
└── rdev namespace
└── claudebox-0 (StatefulSet)
├── Claude Code CLI
├── /workspace (20Gi PVC via Longhorn)
└── /root/.claude (credentials from secret)
Roadmap
- v0.1: Base case - single claudebox pod
- v0.2: Real workspace mounting (pantheon, aeries)
- v0.3: Git integration (push/pull)
- v0.4: Discord bot control
- v0.5: Streaming output
- v0.6: Multi-project routing
Development
# Build image locally
docker build -t rdev-claudebox:dev .
# Build and push to Artifact Registry
./scripts/build-push.sh v0.1.0
Troubleshooting
# Check pod status
kubectl get pods -n rdev
# View pod logs
kubectl logs claudebox-0 -n rdev
# Describe pod for events
kubectl describe pod claudebox-0 -n rdev
# Check credentials mount
kubectl exec -n rdev claudebox-0 -- ls -la /root/.claude/