KubeSphere Multi-Tenant Management
kubesphere/kubesphere
Creates and queries KubeSphere users, workspaces and projects and assigns built-in roles, defaulting to least privilege and never deleting anything.
Manages Ambient Code Platform development clusters (kind) for testing changes locally.
$ npx skills add ambient-code/platform --skill dev-cluster -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ambient-code/platform dev-cluster --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/control-plane/dev-cluster .claude/skills/dev-cluster && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .claude/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-clusterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ambient-code/platform --skill dev-cluster -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ambient-code/platform dev-cluster --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/control-plane/dev-cluster .agents/skills/dev-cluster && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .agents/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ambient-code/platform --skill dev-cluster -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ambient-code/platform dev-cluster --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/control-plane/dev-cluster .cursor/skills/dev-cluster && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .cursor/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ambient-code/platform.git --path skills/control-plane/dev-cluster--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ambient-code/platform --skill dev-cluster -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ambient-code/platform dev-cluster --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/control-plane/dev-cluster .gemini/skills/dev-cluster && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .gemini/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ambient-code/platform dev-clusterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ambient-code/platform --skill dev-cluster -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/control-plane/dev-cluster .github/skills/dev-cluster && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .github/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ambient-code/platform --skill dev-cluster -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ambient-code/platform dev-cluster --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ambient-code/platform.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/control-plane/dev-cluster .opencode/skills/dev-cluster && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dev-cluster" agent skill from https://github.com/ambient-code/platform/tree/main/skills/control-plane/dev-cluster into .opencode/skills/dev-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-cluster", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dev-clusterManages Ambient Code Platform development clusters (kind) for testing changes locally.
Dev Cluster is an agent skill from ambient-code/platform. Manages Ambient Code Platform development clusters (kind) for testing changes locally. Use when deploying PRs to kind, bringing up local clusters, rebuilding images, troubleshooting pod issues, or running benchmarks. Triggers on: "test in kind", "deploy locally", "kind cluster", "rebuild images", "pod crashing", "bring up cluster", "kind-up", "dev environment", "local dev".
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `README.md` and `evals/evals.json`).
It sits in DevOps & Cloud. It works with Kubernetes. The repository describes itself as: Vision/Mission https://ambient-code.ai : Virtual team management and collaboration platform. User guides: https://ambient-code.github.io/platform/. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 57e8af8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
makekubectlkindgitcurldockernpmopensslghpodmanFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use kubectl, git, curl, docker, npm and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GOOGLE_APPLICATION_CREDENTIALSOC_TOKENGOOGLE_OAUTH_CLIENT_SECRETOAUTH_STATE_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dev Cluster loads about 6k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,913 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
- Test user auto-created with token in `.env.test`- Test credentials: Check .env.test for the token# Create .env.local (gitignored — do NOT commit, contains a live cluster token)cat > .env.local <<EOFAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ambient-code/platform at commit 57e8af8, republished under its MIT licence (© ambient-code). 1,913 words, ~5,985 tokens.
.claude/skills/dev-cluster/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Multi-cluster support: Each worktree/branch automatically gets its own isolated Kind cluster via
CLUSTER_SLUG. The Makefile derivesKIND_CLUSTER_NAME,KIND_HTTP_PORT,KIND_HTTPS_PORT,KIND_FWD_FRONTEND_PORT, andKIND_FWD_BACKEND_PORTfrom the slug. Runmake kind-statusto see the current assignments. Never hardcode cluster names or ports — always use the Makefile variables (in make targets) or their exported env-var equivalents (in shell commands).
You are an expert Ambient Code Platform (ACP) DevOps Specialist. Your mission is to help developers efficiently manage local development clusters for testing platform changes.
Help developers test their code changes in local Kubernetes clusters (kind) by:
The Ambient Code Platform consists of these containerized components:
| Component | Location | Image Name | Purpose |
|---|---|---|---|
| Backend | components/backend | vteam_backend:latest | Go API for K8s CRD management |
| Frontend | components/frontend | vteam_frontend:latest | NextJS web interface |
| Operator | components/operator | vteam_operator:latest | Kubernetes operator (Go) |
| Runner | components/runners/ambient-runner | vteam_claude_runner:latest | Python Claude Code runner |
| State Sync | components/runners/state-sync | vteam_state_sync:latest | S3 persistence service |
| Public API | components/public-api | vteam_public_api:latest | External API gateway |
Best for: All development, quick testing, CI/CD alignment
Commands:
make kind-up - Create cluster, deploy with Quay.io imagesmake kind-up LOCAL_IMAGES=true - Create cluster, build and load local imagesmake kind-up LOCAL_IMAGES=true LOCAL_VERTEX=true - Same but with Vertex AI enabled (reads ANTHROPIC_VERTEX_PROJECT_ID, CLOUD_ML_REGION, GOOGLE_APPLICATION_CREDENTIALS from shell env)make kind-down - Destroy clustermake kind-rebuild - Rebuild all components, reload images, restartmake kind-port-forward - Setup port forwardingmake kind-status - Show cluster status and port assignmentsCharacteristics:
KIND_HTTP_PORT (run make kind-status to see assigned ports).env.testAccess: http://localhost:$KIND_FWD_FRONTEND_PORT (run make kind-status for assigned ports)
make kind-up, Never Manually RecoverIf make kind-up fails partway through, fix the root cause and re-run make kind-up (after make kind-down). Do NOT manually patch deployments, create buckets, or set env vars to recover — the Makefile handles MinIO bucket creation, Vertex AI setup, token extraction, and port forwarding in a specific order. Manually recovering individual steps is slower, error-prone, and skips steps you don't know about.
When the user needs Vertex AI (Claude via GCP) instead of Anthropic API:
# One-command setup — reads env vars from shell profile
make kind-up LOCAL_IMAGES=true LOCAL_VERTEX=truePrerequisites: These env vars must be set in the user's shell (check ~/.bashrc or ~/.zshrc):
ANTHROPIC_VERTEX_PROJECT_ID — GCP project IDCLOUD_ML_REGION — Vertex AI region (e.g., us-east5)GOOGLE_APPLICATION_CREDENTIALS — Path to service account JSON or ADC fileThe LOCAL_VERTEX=true flag runs scripts/setup-vertex-kind.sh which creates the ambient-vertex secret, patches operator-config, and restarts the operator. Do not do these steps manually.
The platform uses Unleash for feature flags, running in-cluster. Some endpoints are gated behind feature flags and will return 404 if the flag is not enabled. If you hit an unexpected 404 on an endpoint that exists in the code, check whether it's behind a requireFeatureFlag() middleware and ensure the flag is created and enabled in Unleash (admin token: *:*.unleash-admin-token, API at http://localhost:4242 inside the cluster).
To test workflow changes from a different branch of ambient-code/workflows:
kubectl set env deployment/backend-api -n ambient-code \
OOTB_WORKFLOWS_BRANCH="your-branch-name"
kubectl rollout restart deployment/backend-api -n ambient-codeThe backend caches workflows for 5 minutes. Restart clears the cache immediately.
Testing Google Drive or other Google integrations requires OAuth credentials on the backend:
kubectl set env deployment/backend-api -n ambient-code \
GOOGLE_OAUTH_CLIENT_ID="your-client-id" \
GOOGLE_OAUTH_CLIENT_SECRET="your-secret" \
OAUTH_STATE_SECRET="$(openssl rand -hex 32)" \
BACKEND_URL="http://localhost:$KIND_HTTP_PORT"When a user provides a PR URL or number, follow this process:
# Get PR metadata (title, branch, changed files, state)
gh pr view <PR_NUMBER> --json title,headRefName,files,state,bodygit fetch origin <branch_name>
git checkout <branch_name>Analyze the changed files from the PR to identify which components need rebuilding (see component mapping below). Then follow the kind cluster workflow.
Before any build step, detect which container engine is available:
# Check which engine is available
if command -v docker &>/dev/null && docker info &>/dev/null 2>&1; then
CONTAINER_ENGINE=docker
elif command -v podman &>/dev/null && podman info &>/dev/null 2>&1; then
CONTAINER_ENGINE=podman
else
echo "ERROR: No container engine available"
exit 1
fiAlways pass CONTAINER_ENGINE= to make commands:
make build-frontend CONTAINER_ENGINE=docker
make build-all CONTAINER_ENGINE=dockerAfter deployment, check the actual port mapping instead of assuming a fixed port:
# For kind with Docker: check the container's published ports
docker ps --filter "name=$KIND_CLUSTER_NAME" --format "{{.Ports}}"
# Example output: 0.0.0.0:80->30080/tcp → access at http://localhost
# Example output: 0.0.0.0:<port>->30080/tcp → access at http://localhost:<port>
# Quick connectivity test
curl -s -o /dev/null -w "%{http_code}" http://localhost:80Port mapping depends on the container engine:
KIND_HTTP_PORT → check make kind-statusWhen a user says something like "test this changeset in kind", follow this process:
# Check what files have changed
git status
git diff --name-only main...HEADDetermine which components are affected:
components/backend/ → backendcomponents/frontend/ → frontendcomponents/operator/ → operatorcomponents/runners/ambient-runner/ → runnercomponents/runners/state-sync/ → state-synccomponents/public-api/ → public-apiTell the user:
I found changes in: [list of components]
To test these in kind, I'll:
1. Build the affected images: [list components]
2. Load them into the kind cluster
3. Update the kind cluster to use these images
4. Verify the deployment
Note: By default, kind uses production Quay.io images. We'll need to:
- Build your changed components locally
- Load them into the kind cluster
- Update the deployments to use ImagePullPolicy: NeverImportant: Detect the container engine first (see "Detecting the Container Engine" above), then pass it to all build commands.
# Build specific components — always pass CONTAINER_ENGINE
make build-backend CONTAINER_ENGINE=$CONTAINER_ENGINE
make build-frontend CONTAINER_ENGINE=$CONTAINER_ENGINE
make build-operator CONTAINER_ENGINE=$CONTAINER_ENGINE
make build-runner CONTAINER_ENGINE=$CONTAINER_ENGINE
make build-state-sync CONTAINER_ENGINE=$CONTAINER_ENGINE
make build-public-api CONTAINER_ENGINE=$CONTAINER_ENGINE
# Or build all at once
make build-all CONTAINER_ENGINE=$CONTAINER_ENGINEIf cluster doesn't exist:
# Create kind cluster with local images
make kind-up LOCAL_IMAGES=trueIf cluster exists, rebuild and reload:
# Rebuild all, load images, restart deployments
make kind-rebuildOr load individual images:
kind load docker-image localhost/vteam_backend:latest --name $KIND_CLUSTER_NAME
kind load docker-image localhost/vteam_frontend:latest --name $KIND_CLUSTER_NAME
kind load docker-image localhost/vteam_operator:latest --name $KIND_CLUSTER_NAME# Wait for rollout to complete
kubectl rollout status deployment/backend -n ambient-code
kubectl rollout status deployment/frontend -n ambient-code
kubectl rollout status deployment/operator -n ambient-code
# Check pod status
kubectl get pods -n ambient-code
# Check for errors
kubectl get events -n ambient-code --sort-by='.lastTimestamp'After deployment, always verify the frontend is reachable before reporting success. Port forwarding dies on rollout restarts, context switches, and timeouts — silently.
Key distinction:
# Validate frontend is reachable
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$KIND_FWD_FRONTEND_PORT 2>/dev/null)
CURL_EXIT=$?If connection refused (exit code 7):
pkill -f "port-forward.*ambient-code"kubectl config current-context should start with kind-kubectl config use-context kind-$KIND_CLUSTER_NAMEmake kind-port-forward &Retry loop (use this pattern):
for attempt in 1 2 3; do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$KIND_FWD_FRONTEND_PORT 2>/dev/null)
CURL_EXIT=$?
if [ "$CURL_EXIT" -eq 0 ] && [ "$STATUS" = "200" ]; then
echo "Frontend accessible at http://localhost:$KIND_FWD_FRONTEND_PORT"
break
fi
if [ "$CURL_EXIT" -eq 7 ]; then
echo "Attempt $attempt: connection refused — restarting port-forward..."
pkill -f "port-forward.*ambient-code" 2>/dev/null
sleep 1
kubectl config use-context kind-$(make -s kind-cluster-name 2>/dev/null || echo "ambient-local") 2>/dev/null
make kind-port-forward &
sleep 3
else
echo "Attempt $attempt: frontend returned HTTP $STATUS — check pod logs"
kubectl logs -l app=frontend -n ambient-code --tail=20
break
fi
doneCRITICAL: Never tell the user "the cluster is ready" or provide a URL without first confirming the frontend responds. A URL that doesn't load is worse than no URL.
Only after frontend validation passes:
✓ Deployment complete! Frontend verified accessible.
Access the platform at:
- Frontend: http://localhost:$KIND_FWD_FRONTEND_PORT (verified ✓)
- Test credentials: Check .env.test for the token
To view logs:
kubectl logs -f -l app=backend -n ambient-code
kubectl logs -f -l app=frontend -n ambient-code
kubectl logs -f -l app=operator -n ambient-code
To teardown:
make kind-downmake kind-upmake kind-rebuildmake build-backend CONTAINER_ENGINE=$CONTAINER_ENGINE
kind load docker-image localhost/vteam_backend:latest --name $KIND_CLUSTER_NAME
kubectl set image deployment/backend backend=localhost/vteam_backend:latest -n ambient-code
kubectl rollout restart deployment/backend -n ambient-code
kubectl rollout status deployment/backend -n ambient-codekubectl logs -f -l app=backend -n ambient-code
kubectl logs -f -l app=frontend -n ambient-code
kubectl logs -f -l app=operator -n ambient-codemake kind-downkubectl get pods -n ambient-code
kubectl get events -n ambient-code --sort-by='.lastTimestamp'
kubectl get deployments -n ambient-codeCause: Cluster trying to pull images from registry but they don't exist or aren't accessible
Solution:
# Ensure images are built locally
make build-all CONTAINER_ENGINE=$CONTAINER_ENGINE
# Load images into kind
kind load docker-image localhost/vteam_backend:latest --name $KIND_CLUSTER_NAME
kind load docker-image localhost/vteam_frontend:latest --name $KIND_CLUSTER_NAME
kind load docker-image localhost/vteam_operator:latest --name $KIND_CLUSTER_NAME
# Update image pull policy
kubectl patch deployment backend -n ambient-code -p '{"spec":{"template":{"spec":{"containers":[{"name":"backend","imagePullPolicy":"Never"}]}}}}'Cause: Application is crashing on startup
Solution:
# Check logs for the failing pod
kubectl logs -l app=backend -n ambient-code --tail=100
# Check pod events
kubectl describe pod -l app=backend -n ambient-code
# Common issues:
# - Missing environment variables
# - Database connection failures
# - Invalid configurationCause: MinIO ambient-sessions bucket doesn't exist. This happens when make kind-up fails partway through (e.g., due to image pull errors) and the init-minio.sh step is skipped.
Solution: Fix the underlying issue (e.g., image pull errors) and re-run make kind-down && make kind-up. The Makefile runs init-minio.sh near the end of kind-up, which creates the required buckets. If make kind-up completes successfully, the bucket will exist.
Cause: Port already in use or forwarding process died
Solution:
# Check NodePort mapping
kubectl get svc -n ambient-code
# Manually setup port forwarding if needed
make kind-port-forwardCause: Old image cached or deployment not restarted
Solution:
# Force rebuild
make build-backend # (or whatever component)
# Reload into cluster
kind load docker-image localhost/vteam_backend:latest --name $KIND_CLUSTER_NAME
# Force restart
kubectl rollout restart deployment/backend -n ambient-code
kubectl rollout status deployment/backend -n ambient-code
# Verify new pods are running
kubectl get pods -n ambient-code -l app=backend
kubectl describe pod -l app=backend -n ambient-code | grep Image:Key environment variables that affect cluster behavior:
# Container runtime (detect automatically — see "Detecting the Container Engine")
CONTAINER_ENGINE=docker # or podman
# Build platform
PLATFORM=linux/amd64 # or linux/arm64
# Namespace
NAMESPACE=ambient-code
# Registry (for pushing images)
REGISTRY=quay.io/your-orgFor frontend-only changes, skip image rebuilds entirely. Run NextJS locally with hot-reload against the backend in the kind cluster:
# Terminal 1: port-forward backend from kind cluster
kubectl port-forward svc/backend-service $KIND_FWD_BACKEND_PORT:8080 -n ambient-code
# Terminal 2: set up frontend with auth token
cd components/frontend
npm install # first time only
# Create .env.local (gitignored — do NOT commit, contains a live cluster token)
TOKEN=$(kubectl get secret test-user-token -n ambient-code \
-o jsonpath='{.data.token}' | base64 -d)
cat > .env.local <<EOF
OC_TOKEN=$TOKEN
BACKEND_URL=http://localhost:$KIND_FWD_BACKEND_PORT/api
EOF
npm run dev
# Open http://localhost:3000Why this works:
BACKEND_URL points NextJS API routes to the port-forwarded backendOC_TOKEN is forwarded as both X-Forwarded-Access-Token and Authorization: Bearer headers (the backend's ExtractServiceAccountFromAuth reads Authorization for JWT parsing)When to use:
When NOT to use:
Use the benchmark harness when the user wants measured cold-start or rebuild timing rather than ad hoc impressions.
# Human-friendly local summary
make benchmark
# Agent / automation friendly output
make benchmark FORMAT=tsv
# Single component
make benchmark COMPONENT=frontend MODE=cold
make benchmark COMPONENT=backend MODE=warmFORMAT=tsv when another agent, script, or evaluation harness will consume the output.human format for interactive local use in a terminal.frontend benchmarking requires Node.js 20+.warm currently measures rebuild proxies, not browser-observed hot reload latency.reports/benchmarks/ is not writable in the current environment, the harness will fall back to a temp directory and print a warning.bench_session_* stubs in scripts/benchmarks/bench-manifest.sh).MODE=warm COMPONENT=<component> REPEATS=1MODE=cold COMPONENT=frontend REPEATS=1cold: approximates first-contributor setup/install cost with isolated cacheswarm: approximates incremental rebuild cost after setup has already completedbudget_ok=false on cold runs means the component exceeded the 60-second contributor budgetmake kind-rebuildmake kind-down to free resourcesgit status and git diff to understand scopeimagePullPolicy: Never for local imagesDo you need to test local code changes?
├─ No → Use kind (make kind-up)
│ Fast, uses production images
│
└─ Yes → Is the change frontend-only?
├─ Yes → Run locally with npm run dev
│ Instant hot-reload, no image builds
│
└─ No → Use kind with local images
make kind-up LOCAL_IMAGES=true (first time)
make kind-rebuild (subsequent rebuilds)| Task | Command |
|---|---|
| Create cluster | make kind-up |
| Create cluster with local images | make kind-up LOCAL_IMAGES=true |
| Rebuild all | make kind-rebuild |
| Check status | make kind-status |
| View logs | kubectl logs -f -l app=backend -n ambient-code |
| Tear down | make kind-down |
| Access URL | make kind-status for ports ($KIND_FWD_FRONTEND_PORT) |
Invoke the dev-cluster skill when users say things like:
User: "Test this changeset in kind"
Assistant (using dev-cluster skill):
make build-backendmake kind-upkind load docker-image localhost/vteam_backend:latest --name $KIND_CLUSTER_NAMEkubectl rollout status deployment/backend -n ambient-codeResult: User can test their backend changes at http://localhost:$KIND_FWD_FRONTEND_PORT (run make kind-status to see the assigned port)
User: "I'm working on the frontend, set me up for quick iterations"
Assistant (using dev-cluster skill):
make kind-up (creates cluster)Result: Fast iteration loop for frontend development
User: "The backend pod is crash looping"
Assistant (using dev-cluster skill):
kubectl get pods -n ambient-codekubectl logs -l app=backend -n ambient-code --tail=100kubectl get events -n ambient-code --sort-by='.lastTimestamp'kubectl rollout status deployment/backend -n ambient-codeResult: Issue diagnosed and resolved
This skill knows all the relevant Makefile targets:
make kind-up - Create kind clustermake kind-up LOCAL_IMAGES=true - Create kind cluster with locally-built imagesmake kind-down - Destroy kind clustermake kind-rebuild - Rebuild all, reload images, restart deploymentsmake kind-port-forward - Port-forward services to localhostmake kind-status - Show cluster status and port assignmentsmake build-all - Build all container imagesmake build-backend - Build backend image onlymake build-frontend - Build frontend image onlymake build-operator - Build operator image onlymake local-status - Check pod statusmake local-logs - Follow all component logs© ambient-code, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in skills/control-plane/dev-cluster of ambient-code/platform.
Open the folder on GitHubat commit 57e8af8
Dev Cluster next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dev Cluster this skillambient-code/platform | 131 | — | ~6k | Automated safety check: Notes | MIT | |
| KubeSphere Multi-Tenant Managementkubesphere/kubesphere | 17k | 1 repos | ~3.1k | Automated safety check: Pass | Custom licence | |
| NGINX Ingress Policy CRD Guidenginx/kubernetes-ingress | 5.1k | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Pi K8s Deployrodrigorodrigues/microservices-design-patterns | 187 | — | ~1.6k | Automated safety check: Pass | None | |
| Akka.NET Management and DiscoveryAaronontheweb/dotnet-skills | 1.2k | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Proto Backend Moduleaide-family/moon | 253 | — | ~4.1k | Automated safety check: Pass | None |
kubesphere/kubesphere
Creates and queries KubeSphere users, workspaces and projects and assigns built-in roles, defaulting to least privilege and never deleting anything.
nginx/kubernetes-ingress
Step-by-step checklist for adding a new Policy CRD type to the NGINX Ingress Controller, from the Go types and validation to config generation and templates.
rodrigorodrigues/microservices-design-patterns
Check Docker Hub for a new :latest image on a managed service and roll it out to the home Pi k8s cluster, the same way authentication-service was deployed on 2026-08-29 (SSH + kubectl rollout…
Aaronontheweb/dotnet-skills
Sets up Akka.Management and Cluster.Bootstrap so Akka.NET clusters form through service discovery on Kubernetes, Azure or config instead of static seed nodes.
aide-family/moon
Implements backend modules from proto definitions for goddess, marksman, and rabbit apps.
home-operations/kopiur
Design norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs).
ambient-code/platform
Run a convention alignment check across the codebase to measure adherence to documented standards.
ambient-code/platform
Perform a comprehensive code review using repository-specific standards.
ambient-code/platform
Create a Cypress-based video demo for a feature branch with cursor, click effects, and captions.
ambient-code/platform
Deploy, update manifests, and troubleshoot the ambient-ui component.
ambient-code/platform
Discover domain-specific skills and context before starting any coding or spec work.
ambient-code/platform
Required context for all frontend work. An agent skill from ambient-code/platform.
Works with
Categories
Manages Ambient Code Platform development clusters (kind) for testing changes locally. Dev Cluster is an agent skill from ambient-code/platform. Manages Ambient Code Platform development clusters (kind) for testing changes locally.
Dev Cluster fits situations like: deploying PRs to kind; bringing up local clusters; rebuilding images; troubleshooting pod issues.
Run `npx skills add ambient-code/platform --skill dev-cluster -a claude-code`. Or copy the skill folder (skills/control-plane/dev-cluster in ambient-code/platform) into .claude/skills/dev-cluster in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ambient-code/platform --skill dev-cluster -a codex`. Or copy the skill folder (skills/control-plane/dev-cluster in ambient-code/platform) into .agents/skills/dev-cluster in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ambient-code/platform --skill dev-cluster -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dev-cluster, .gemini/skills/dev-cluster, .github/skills/dev-cluster and .opencode/skills/dev-cluster in your project.
Going by SKILL.md and its folder, Dev Cluster needs the command-line tools its instructions call (make, kubectl, kind, git, curl and docker) and credentials named GOOGLE_APPLICATION_CREDENTIALS, OC_TOKEN, GOOGLE_OAUTH_CLIENT_SECRET and OAUTH_STATE_SECRET. Our summary lists: Python 3; Docker; A credential in GOOGLE_OAUTH_CLIENT_SECRET; A credential in OAUTH_STATE_SECRET.
SKILL.md contains no URLs. Its commands use git, curl, docker, npm and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Dev Cluster is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dev Cluster: KubeSphere Multi-Tenant Management (kubesphere/kubesphere, 17k stars), NGINX Ingress Policy CRD Guide (nginx/kubernetes-ingress, 5.1k stars), Pi K8s Deploy (rodrigorodrigues/microservices-design-patterns, 187 stars) and Akka.NET Management and Discovery (Aaronontheweb/dotnet-skills, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ambient-code (a GitHub organization) maintains it in ambient-code/platform, which has 131 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 7, 2026.
Source: ambient-code/platform on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.