Changelog
All notable changes to cmaform will be documented in this file.
The format is based on Keep a Changelog,
and this project follows Semantic Versioning.
Unreleased
0.4.0 - 2026-06-16
Added
- Deployment resource (
deployments/<localName>/manifest.yaml): manage
scheduled (cron) and on-demand managed-agent deployments declaratively.
A deployment binds an agent + environment + initial events + an optional
5-field POSIX cronscheduleinto one unit, supportscreate/update/
archive, and is wired intoplan/apply/pull/sync/list/
initand thedeployment/deploytarget aliases.agent/environment/vault_ids[]accept name-based references
(resolved via state → remote → local apply set, with forward-dependency
support) in addition to raw ids.- Omitting the agent
versiontracks the latest at create time (version
drift is ignored in the diff); pinning a version detects and re-pins it. - Write-only resource credentials (e.g. a GitHub
authorization_token) are
sent on create/update but stripped before diffing; computed schedule fields
(last_run_at/upcoming_runs_at) are ignored. The imperative
pause/unpause/runtransitions are out of scope.
Changed
- Updated
@anthropic-ai/sdkto^0.104.1(adds thebeta.deployments.*
endpoints).
0.3.0 - 2026-06-08
Changed
cmaform plan/cmaform applynow require an existing
cmaform.state.json(created byinitorpull). When the state file
is missing they fail with exit code 2 and point atcmaform init,
instead of silently proceeding against an empty state.- Updated
@anthropic-ai/sdkto^0.102.0.
0.2.1 - 2026-06-01
Changed
- Updated README and package metadata to use Anthropic's official
Claude Managed Agentsterminology.
Fixed
- Fixed resolution of
latestsub-agent versions so referenced agents use the
current remote version when planning and applying changes.
0.2.0 - 2026-05-27
Added
cmaform fmtsubcommand: rewritemultiagent.agents[].id/
skills[].skill_idin local YAML files to the name form using
cmaform.state.jsonfor the id → name lookup. One-shot migration
helper for repositories that previously hand-copied raw IDs.--by-idflag forcmaform pull/cmaform sync: keep raw IDs in
multiagent.agents[]/skills[]when writing agent YAML, instead
of rewriting to the name form. Escape hatch for users who want the
pre-name-resolution output exactly.- Plan diff now annotates known IDs with a
# = <localName>comment
in the rendered YAML, so readers can tell at a glance which
sub-agent or skill an opaque ID refers to. - Pin assertion: when a
multiagent.agents[]/skills[]entry writes
bothname:andid:(orskill_id:), cmaform resolves the name
and verifies it matches the pinned ID. Mismatches abortplan/
applywith a clear error. Useful as a safety net during migration
from id-based to name-based references. - Project-local release procedure skill for preparing, verifying, and
publishing cmaform releases.
Changed
- CI now runs format, lint, typecheck, test, build, and CLI help checks with
pnpm 11 frompackageManager. - Development workflow now uses
oxfmt,oxlint,lefthook, and broader
unit coverage for lib-level planning, warning, normalization, and diff logic.
0.1.0 - 2026-05-25
Initial public release.
Added
- Terraform-style CLI (
cmaform) for managing Claude Managed Agents
declaratively from a local directory of YAML files. - Subcommands:
pull,plan,apply,sync,init,list. - Five managed resource types:
- agents (
agents/<name>.yaml) — full CRUD with field-level diff and
update detection. - skills (
skills/<localName>/) — directory upload (SKILL.md+
auxiliary files) with SHA-256 content hashing;applycreates a new
version on change. Hard delete only. - memory stores (
memory_stores/<localName>/manifest.yaml) — create,
update (metadata patch semantics), archive. - environments (
environments/<localName>/manifest.yaml) — create,
update, archive for cloud-type environments with package + networking
configuration. - vaults (
vaults/<localName>/manifest.yaml) — create and archive of
the vault resource only. Updates and credential management are out of
scope for this release; configure credentials on the Anthropic Console
after creating a vault with cmaform.
- agents (
- Name-based references in agent YAML (
multiagent.agents[].name,
skills[].name) with topological sort and pending-id sentinels so a fresh
workspace can be bootstrapped with onecmaform apply. - Plan output in Terraform style:
[+] create,[~] update,[-] delete
headers with ANSI color (green / yellow / red, with dim secondary lines
and bold-yellowWARN:/NOTE:labels). - Plan normalization: empty arrays vs
undefined,default_config
inheritance fortools[].configs[],latestversion pairing for
multiagent.agents[].versionandskills[].version, and deterministic
key ordering in YAML diff serialization. createactions are rendered as+ field: valuediffs (symmetric with
update). Long-text fields likesystemanddescriptionare collapsed to
the first three lines plus an... (N lines hidden)marker; pass
--verbose/-vfor the full content.- Dangling-reference warnings when a
deleteorskill_deletetarget is
still referenced by another local agent. Apply switches to a dedicated
"Proceed with these dangling deletes?" confirmation message. - Target filtering on
plan/applyaccepting resource-kind aliases
(agents,skills,memory_stores,environments,vaults, and their
singular / short forms) as well as individual resource names. initcommand (Terraform-style reconcile-only) andsynccommand
(rewrite local YAML from remote) for state recovery and discovery.- TypeScript source (Node.js 22+, ESM, strict mode), bundled to a single
dist/cli.jswith tsup. MIT-licensed.
Security
- Secrets never reach disk or terminal:
ANTHROPIC_API_KEYis forwarded to
the SDK and a singlefetchcall only. Future credential secret material
is masked in plan output before display. dist/cli.js.mapis intentionally not shipped in the npm tarball.pnpm auditclean against@anthropic-ai/sdk0.98.0 andyaml2.x.