Remote Developer - Claude Code instances in isolated Kubernetes pods
|
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
5 fixes from stress test analysis: 1. CRITICAL: Add pull-before-push to claudebox GitOperations.CommitAndPush, matching the fix already in PodGitOperations (prevents push rejections when concurrent builds advance the remote). 2. HIGH: Extract ResetToMain into PodGitOperations as a shared public method. Wire into BuildExecutor after CloneRepo and update SDLCTaskExecutor to use the shared method. Prevents builds from running on wrong branch when worker pods are reused across tasks. 3. HIGH: Make branch create push failure fatal with retry+rollback in cmd/sdlc/cmd_branch.go. Prevents orphaned .sdlc/ state that causes merge failures after completing all 10 SDLC phases. 4. MEDIUM: Shell-escape token in credential helpers (both PodGitOperations and claudebox GitOperations) to prevent shell injection via tokens containing special characters. 5. MEDIUM: Add GitResetToMain to claudebox sidecar (git.go implementation, server.go endpoint, client.go HTTP method) and wire into HTTPSDLCTaskExecutor for the HTTP sidecar path. Co-Authored-By: Claude Opus 4.6 <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/