Skip to content

v0.4.0

Latest

Choose a tag to compare

@joe-re joe-re released this 15 Jun 17:46
· 2 commits to main since this release

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 cron schedule into one unit, supports create / update /
    archive, and is wired into plan / apply / pull / sync / list /
    init and the deployment / deploy target 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 version tracks 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 / run transitions are out of scope.

Changed

  • Updated @anthropic-ai/sdk to ^0.104.1 (adds the beta.deployments.*
    endpoints).

0.3.0 - 2026-06-08

Changed

  • cmaform plan / cmaform apply now require an existing
    cmaform.state.json (created by init or pull). When the state file
    is missing they fail with exit code 2 and point at cmaform init,
    instead of silently proceeding against an empty state.
  • Updated @anthropic-ai/sdk to ^0.102.0.

0.2.1 - 2026-06-01

Changed

  • Updated README and package metadata to use Anthropic's official
    Claude Managed Agents terminology.

Fixed

  • Fixed resolution of latest sub-agent versions so referenced agents use the
    current remote version when planning and applying changes.

0.2.0 - 2026-05-27

Added

  • cmaform fmt subcommand: rewrite multiagent.agents[].id /
    skills[].skill_id in local YAML files to the name form using
    cmaform.state.json for the id → name lookup. One-shot migration
    helper for repositories that previously hand-copied raw IDs.
  • --by-id flag for cmaform 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
    both name: and id: (or skill_id:), cmaform resolves the name
    and verifies it matches the pinned ID. Mismatches abort plan /
    apply with 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 from packageManager.
  • 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; apply creates 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.
  • 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 one cmaform apply.
  • Plan output in Terraform style: [+] create, [~] update, [-] delete
    headers with ANSI color (green / yellow / red, with dim secondary lines
    and bold-yellow WARN: / NOTE: labels).
  • Plan normalization: empty arrays vs undefined, default_config
    inheritance for tools[].configs[], latest version pairing for
    multiagent.agents[].version and skills[].version, and deterministic
    key ordering in YAML diff serialization.
  • create actions are rendered as + field: value diffs (symmetric with
    update). Long-text fields like system and description are collapsed to
    the first three lines plus an ... (N lines hidden) marker; pass
    --verbose / -v for the full content.
  • Dangling-reference warnings when a delete or skill_delete target is
    still referenced by another local agent. Apply switches to a dedicated
    "Proceed with these dangling deletes?" confirmation message.
  • Target filtering on plan / apply accepting resource-kind aliases
    (agents, skills, memory_stores, environments, vaults, and their
    singular / short forms) as well as individual resource names.
  • init command (Terraform-style reconcile-only) and sync command
    (rewrite local YAML from remote) for state recovery and discovery.
  • TypeScript source (Node.js 22+, ESM, strict mode), bundled to a single
    dist/cli.js with tsup. MIT-licensed.

Security

  • Secrets never reach disk or terminal: ANTHROPIC_API_KEY is forwarded to
    the SDK and a single fetch call only. Future credential secret material
    is masked in plan output before display.
  • dist/cli.js.map is intentionally not shipped in the npm tarball.
  • pnpm audit clean against @anthropic-ai/sdk 0.98.0 and yaml 2.x.