All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Adding a BYOK location to a GVC now uses the
update_gvctool.
- Creating or updating a volume set now requires the storage skill first, closing the last create and update tools that could run without one.
- Shared volume set manifests now spell out the CPU and memory bounds on
mountOptions.resources, including that leaving one bound out lets the default fill it in and trip the ratio check. - Apply failures now explain that
cpln applyreports every rejected resource rather than stopping at the first, so a workload complaining about a non-existent volume set is a cascade of the earlier failure and not a missing dependency.
- The plugin no longer fails to load its hooks in Claude Code, which now loads the standard hooks file automatically.
- The scaling metric table no longer calls CPU the default for standard workloads, contradicting the note directly below it.
- Capacity AI works on every workload type, defaulting off on stateful and vm, and on cron it applies at the next scheduled run.
- A standard workload with no named autoscaling metric ends up with autoscaling disabled.
- Running a command inside a live container is now directed to the
cplnCLI everywhere, because the MCP server no longer exposes an exec tool, while listing a workload's running replicas continues to work through MCP.
- Asking whether workloads can run on your own bare metal, on-prem VMs, or data-center servers now routes to the mk8s and BYOK skill instead of returning cloud regions, and that skill explains both routes to turning your hardware into a location along with the node minimums that decide which one applies.
- The skill router previously had no entry for Kubernetes clusters at all, and sent anything mentioning on-prem to private networking even when the user wanted to run there rather than connect to it.
- The guardrails describe the new
readonlyMCP toolset profile and how to work within it.
- Skill availability notes no longer promise that deletes work on every profile —
delete_resourceis absent fromreadonly.
- GVC and IP set locations are validated against the organization's own location list, so any location it has is usable.
- The guardrails and the Kubernetes migration agent state that the organization's location list is the authority on which locations exist.
- The GVC and IP set location tools no longer reject BYOK or built-in Oracle Cloud (
oci-*) locations as unknown. - A BYOK location whose name matches a built-in region's friendly name is no longer swapped for that region.
- When a task needs a secret that does not exist, the plugin now offers a placeholder manifest for the user to fill in and apply, documenting every secret type's accepted
datashape, including the JSON string forms fordocker,gcp, andazure-sdk. build_imageandget_image_buildbuild a container image from a GitHub or GitLab repository and report its progress.- Remote image builds with
cpln image build --remote, which run on Control Plane instead of local Docker.
- The OpenTelemetry logging workflow accepts an existing Control Plane credentials-secret reference but no longer accepts raw authentication headers.
- Credential-bearing prompts are refused without an MCP, skill, or CLI call; credential operations may resume only by referencing a secret created outside the conversation.
- CI/CD guidance now offers remote builds as an option for runners without a Docker daemon.
- The skills and guardrails no longer claim that every image build needs a local Docker daemon.
- Listed on the official MCP registry as
io.cpln/control-plane(server.json).
- Secrets are now read-only for AI: listing and reading return metadata only, and no tool or skill creates, edits, deletes, or reveals a secret — manage secret data in the Console, CLI, Terraform, Pulumi, or the API.
workload_reveal_secretis nowgrant_workload_secret_access— the same one-call workload access grant; it never returns secret values.- The
coretoolset grew to 54 tools, adding distributed traces, cron run trigger, replica stop, async command status, and quota listing.
- Corrected Antigravity command notes and stale component counts.
logql-observability:--from/--toaccept relative durations (7d,now-1M) in addition to ISO 8601 timestamps.audit-compliance: clarified that billing is processed externally by Stripe and Control Plane stores no cardholder data.
- All secret create/update tools,
reveal_secret, and the Terraform export option that embedded secret values.
- Antigravity CLI (
agy) support.
- Every client now connects to the MCP server with the full toolset.
- Gemini CLI support — use Antigravity CLI (
agy) instead.
- Plugin hooks config now loads in Codex; its strict parser rejected the editor-only
$schemahint.
- New
tagskill for resource tagging and tag-based selection. - New
workload-troubleshootingskill, loaded on demand by the troubleshooter agent.
- Continued the accuracy and token-efficiency pass across the remaining skills and agents.
- Setup workflows (secret, cloud access, agent) are now on-demand skills instead of standalone agents and commands.
- Destructive operations are now single-call with explicit approval, replacing the two-phase preview.
- Hardened the operating guardrails around secrets, fabricated commands, placeholder resources, and public-workload checks.
- Cron config folded back into
create_workload/update_workload.
- Corrected stale documentation and policy links.
- New
domainskill (custom domains, TLS, DNS, routing) plus a rewritten domain-configurator workflow. - Distributed tracing guidance (
query_traces/get_trace) in themetrics-observabilityskill.
workloadskill and tool-to-skill map updated for the leaner workload tools: cron now has dedicatedcreate_cron_workload/update_cron_workloadtools, and rollout, security, and request-retry settings each move to their ownconfigure_workload_*tool.- Operating rules now create directly without a pre-existence check — current-state reads are reserved for updates and deletes.
- Workload guidance now declares ports with the
containers[].portsarray; the scalarcontainers[].portis deprecated. - After a workload create/update, agents now fetch the
workloadskill up front, auto-verify readiness, and report the workload's canonical URL instead of guessing one or returning a per-location URL. - Revisited the skill set for accuracy and token efficiency — verified each skill against the live platform, tightened the writing, and filled in missing guidance.
- Aligned MCP tool mentions across skills, agents, and commands with the current toolset profiles, marking full-profile-only tools and their core alternatives.
- Reworked the operating guide around the MCP server's server-side enforcement: destructive actions now use a two-phase impact-preview/confirm (pre-approved actions confirmed in one turn), and firewall exposure plus GVC locations are decided at create time.
- Custom domains now route through the Domain resource; the GVC
spec.domainfield is deprecated.
workloadskill: corrected and expanded its constraint and exposure rules.access-controlskill: corrected and tightened its permission, principal, and policy rules.
- New
workloadskill: a single, token-efficient primer the AI reads before creating or updating a workload, with on-demand routing to the deep skills (images, scaling, networking, storage, security, metrics).
- Consolidated each skill's companion files and each agent's reference docs into the main file, so every skill and agent is self-contained and fully available to MCP-only clients.
- Made the operating rules and every skill, agent, and command MCP-first — slimmer, leading with the MCP tools (CLI as the fallback), with clearer tool/skill routing and corrected outdated MCP tool names.
- Reworked and slimmed the
cplnCLI skill, now the single home for CLI command reference.
- Retired the standalone CLI conventions and per-resource manifest-reference rule files (folded into the relevant skills).
- Gemini CLI extension MCP URL: restore the trailing
/mcpsuffix (https://mcp.cpln.io/mcp), reverting the 1.4.1 change.
- Gemini CLI extension MCP URL: drop trailing
/mcpso Gemini's transport (which appends the path itself) reaches the server instead of/mcp/mcp.
- MCP authentication moved to OAuth 2.1 — no
CPLN_TOKENenv var required for the hosted MCP server. On first use, your AI client prompts you to sign in and pick which Control Plane organizations it may operate on.
- Gemini CLI skills and agents missing since 1.2.0.
- Gemini CLI slash commands missing since 1.2.0.
- Cursor support. The plugin now installs into Cursor 2.6+ via Team Marketplaces (Teams and Enterprise plans). Public Cursor Marketplace listing is pending review.
- Bundled SessionStart hook script that injects always-apply rules without requiring
jqon the user's machine.
- README documents the Codex
plugin_hooksfeature flag required for the SessionStart guardrail injector to run.
- Empty plugin on Claude install — 1.2.0 marketplace used an invalid
sourceshape, so Claude loaded zero skills/agents/commands. - Codex no longer emits a missing-
idwarning every session for an Apps SDK manifest that wasn't ready to ship.
- Placeholder
.app.jsonfor OpenAI Apps SDK, until Control Plane is registered as a ChatGPT App.
- Gemini
SessionStarthook so guardrail rules are injected every session (matching Claude and Codex). descriptionfield on the Claude marketplace entry.
- Repo restructured: plugin content moved into
plugins/cpln/. End-user install commands unchanged.
- Codex plugin install failing silently due to an invalid
source.pathin the marketplace manifest. - Codex
defaultPrompttrimmed to 3 entries (Codex's max) so it's no longer ignored.
- Claude and Codex
PreToolUseBash guards forcpln secret createandcpln apply— the CLI itself rejects these clearly and the SessionStart rules now carry the same guidance.
- Three always-on guardrail rules: template catalog first; production-grade workload defaults (sizing, HA, probes); scale-to-zero forbidden unless explicitly opted in.
- Per-client "Update to a newer release" instructions in README, including auto-update opt-in flows.
- Per-client update commands in GitHub Release notes.
cpln-workload-security— added a Health Probes section (readiness vs. liveness, schema, production example).cpln-autoscaling-capacity—minScale: 2+as the production default; renamed the misleading scale-to-zero example.cpln-template-catalog— lead section reframes the catalog as the default, not the fallback.cplnandGEMINI.md— embedded the three new guardrail rules so Codex and Gemini sessions pick them up alongside Claude.
- Initial public release. Skills, agents, commands, rules, hooks, and MCP configuration for Claude Code, Codex, and Gemini CLI, plus a generic MCP client configuration for the hosted Control Plane MCP Server.
- Workflow guidance for workloads, secrets, domains, cloud access, Kubernetes migration, access control, stateful workloads, and private-network agents.
- Security, privacy, troubleshooting, contribution, and release documentation.