access-control
Primary skill for access control, policies, and RBAC on Control Plane. Use when the user asks about permissions, policies,…
Secret access wiring and manifest authoring. Use when a workload needs to read a secret, the user asks to create a secret or generate secret YAML, configure a pull secret, or fix a deployment paused on a secret reference.
Claude Code
$ npx -y skills add controlplane-com/ai-plugin --skill setup-secret --agent claude-code
Codex
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a codex -y
Cursor
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a cursor -y
Gemini CLI
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a gemini-cli -y
GitHub Copilot
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a github-copilot -y
OpenCode
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a opencode -y
Windsurf
$ npx skills add controlplane-com/ai-plugin --skill setup-secret -a windsurf -y
name: setup-secret description: Secret access wiring and manifest authoring. Use when a workload needs to read a secret, the user asks to create a secret or generate secret YAML, configure a pull secret, or fix a deployment paused on a secret reference.
A workload reads a secret only when three things are in place. Miss one and the value is silently absent, or the deployment pauses on the unresolved reference.
| Step | What must be true | Without it | |---|---|---| | **Identity** | an identity linked to the workload (`spec.identityLink`) | the workload reads nothing | | **Policy** | a policy granting that identity `reveal` on the secret | the reference resolves to empty | | **Reference** | `cpln://secret/NAME` or `cpln://secret/NAME.KEY` in env or a volume | nothing to read |
`reveal`, not `view`: `view` shows metadata only. This is the most common mistake.
`mcp__cpln__create_secret` creates secrets without a value passing through the chat, and `mcp__cpln__rotate_secret` rotates them; their descriptions cover both paths. Values Control Plane generates and values the user enters belong in separate secrets. Confirm a secret exists (`get_resource`, kind "secret") before anything references it.
| Type | Keys | Example | |---|---|---| | opaque | `payload` | `cpln://secret/api-key.payload` | | userpass | `username`, `password` | `cpln://secret/creds.password` | | tls | `key`, `cert`, `chain` | `cpln://secret/web-tls.cert` | | keypair | `secretKey`, `publicKey`, `passphrase` | `cpln://secret/deploy-key.secretKey` | | dictionary | user-defined | `cpln://secret/cfg.DB_HOST` | | aws / ecr | `accessKey`, `secretKey`, `roleArn`, `externalId` | `cpln://secret/aws.accessKey` |
Inject as an env var or a volume (`{ uri: "cpln://secret/NAME", path: "/secrets/x" }`). Secret mounts are read-only, at most 15 volumes per container, and `/dev`, `/dev/log`, `/tmp`, `/var`, and `/var/log` are rejected. A workload reads a secret when it starts, so a value changed any way other than `rotate_secret` needs a redeploy.
To pull from a private registry, add a secret of type `docker`, `ecr`, or `gcp` to the GVC's `spec.pullSecretLinks`, and every workload in that GVC can pull. The user enters the registry credentials through the Console link from `create_secret`.
Users who keep secrets as code may want a manifest instead of the Console link. Write it with UPPERCASE placeholders, then tell them to fill it in locally, apply it with `cpln apply -f secret.yaml --org ORG` or the Console's cpln apply button, keep the filled file out of git, and delete it after. Never ask for the real value, and never apply the file yourself.
`data` has a fixed shape per type. The trap: for `docker`, `gcp`, and `azure-sdk`, `data` is one JSON string, never a YAML mapping.
kind: secret
name: my-registry
type: docker
data: >-
{"auths":{"REGISTRY_HOST":{"username":"USERNAME","password":"PASSWORD"}}}| `type` | `data` | Validation | |---|---|---| | `opaque` | `{payload, encoding?}` | `payload` valid base64 when `encoding: base64` (default `plain`) | | `dictionary` | object of string values | keys match `[-._a-zA-Z0-9]+` | | `userpass` | `{username, password, encoding?}` | none | | `tls` | `{cert, key?, chain?}` | `cert` and `key` valid PEM | | `keypair` | `{secretKey, publicKey?, passphrase?}` | `secretKey` a valid PEM private key | | `aws` | `{accessKey, secretKey, roleArn?, externalId?}` | `accessKey` starts with `AKIA`, `roleArn` with `arn:` | | `ecr` | aws fields plus `repos` (1 to 20) | each `ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com[/REPO]` | | `azure-connector` | `{url, code}` | `url` is https | | `nats-account` | `{accountId, privateKey}` | `accountId` a public nkey (`A…`), `privateKey` a seed (`SA…`) | | `docker` | **JSON string** | parses with an `auths` object keyed by registry host | | `gcp` | **JSON string** | a full service-account key: `type`, `project_id`, `private_key_id`, `private_key`, `client_email`, `client_id`, `auth_uri`, `token_uri`, `auth_provider_x509_cert_url`, `client_x509_cert_url` | | `azure-sdk` | **JSON string** | `subscription
Run containerized workloads across AWS, GCP, Azure, OCI, and your own hardware under one API.
Primary skill for access control, policies, and RBAC on Control Plane. Use when the user asks about permissions, policies,…
Audit trail and compliance on Control Plane. Use when the user asks about audit logs, who changed what, change tracking, audit…
Workload autoscaling and Capacity AI on Control Plane. Use when the user asks about scaling up/down, min/max replicas,…
CDN caching and request rate limiting for Control Plane workloads. Use when the user asks about CDN, Cloudflare, CloudFront, edge…
Writes cpln CLI commands and workflows for Control Plane. Use when the user asks about cpln login, cpln apply, cpln workload, CLI…
Writes, builds, and deploys an app the user asks for in the chat, with no repository and no image yet. Use when the user asks to…
Use this skill whenever the user mentions Horizon by name in a Laravel context. Covers the full Horizon lifecycle: installing…
Use when launching cloud VMs, Kubernetes pods, or Slurm jobs for GPU/TPU/CPU workloads, training or fine-tuning models on cloud…
Use this skill when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or…