Changelog
All notable changes to Canopy are documented here. Format follows Keep a Changelog.
[0.22.2] — 2026-05-11
Runtime spec fix for the Copilot platform. The Copilot runtime now recognises Copilot’s native subagent dispatch capability as the default parallel-execution path, so PARALLEL blocks and bold-marked subagent calls actually run in parallel instead of falling back to sequential inline evaluation when neither /fleet nor a named custom agent is configured. No skill content changes; behaviour is corrected at the runtime-spec layer.
Fixed
skills/canopy-runtime/references/runtime-copilot.md— added a unified Dispatch path resolution section that all subagent dispatch (marker-based calls,PARALLELchildren, soft-compat## Agent) shares. New four-path chain (first match wins):/fleetorchestration@CUSTOM-AGENT-NAMEreference- Native Copilot subagent dispatch — new default path; uses Copilot’s built-in subagent capability (e.g.
runSubagent) to spawn each subagent in its own context window in parallel. - Sequential inline fallback — now gated on an explicit user
ASKbefore degrading, so parallelism loss is never silent.
- Failure semantics codified — paths 1–3 follow
Promise.allSettled(sibling failure does not abort); path 4 short-circuits on first failure. Previously this was implicit and varied per call site. - Spec-level deduplication — the per-section duplicated path lists under Marker-based dispatch, Soft-compat
## Agent, and Parallel subagent invocation were replaced with references to the single canonical chain.
Changed
docs/reference/RUNTIMES.mdregenerated viascripts/sync-runtime-docs.pyto mirror the runtime-copilot.md update. CI--checkmode was failing on this drift before the regenerate.
Notes
- Claude Code runtime (
runtime-claude.md) unchanged — Claude’s native parallelTaskdispatch was already the documented default there. - No primitive, op-lookup, or skill-content changes; every existing skill executes unchanged on both platforms. Consumers on Copilot should now observe true parallelism for marker-based
PARALLELblocks where they previously got sequential inline reads. - All 7 version sources of truth bumped to
0.22.2per the standard release procedure.
[0.22.1] — 2026-05-11
Doc-only patch. Updates the contributor-facing examples-sync.md rule so future feature rollouts don’t repeat the v0.20-era mistake of leaving legacy-form skills in the demo set “for soft-compat coverage”. No runtime, primitive, or skill-content changes.
Changed
.claude/rules/examples-sync.md— corrected the “New dispatch mode / convention” decision-flow row. Previous guidance said “leave some skills on soft-compat to test soft-compat”, which led to 4-of-6 example skills carrying the legacy## Agentform for two releases (v0.20–v0.22) and misled new authors learning by example. New guidance: retrofit every demo to the canonical form; soft-compat coverage moves to a dedicated test fixture indocs/TEST_SCENARIOS.md.- New “Soft-compat coverage” section in the rule explaining the rationale (why soft-compat doesn’t belong in the demo set, where it does belong, the per-feature decision shape).
- New anti-pattern entry flagging soft-compat-via-examples as the v0.20-era mistake the rule prevents going forward.
Notes
- This release pairs with
claude-canopy-examplesv0.9.0, which decommissioned## Agentfrombump-version,review-file, andgenerate-readme(the practical correction the rule update now codifies for future feature rollouts). - No published-skill content changes — the rule lives in
.claude/rules/, which is contributor-facing and not part of thegh skill installbundle. Consumers upgrading from v0.22.0 to v0.22.1 see no behavior difference. - All 7 version sources of truth bumped to
0.22.1per the standard release procedure.
[0.22.0] — 2026-05-10
S3 release — universal op contracts plus opt-in runtime enforcement. Any op (inline or subagent) may now declare typed JSON Schema input/output contracts via blockquote markers. The vscode extension (separate package, v0.15.0) walks the binding graph to flag drift between producer and consumer at authoring time. Strict-contract mode (metadata.canopy-contracts: strict) opts skills into per-op runtime validation. Fully backward-compatible — every existing skill executes unchanged.
Added
-
Universal op contracts. Inline ops gain contract markers with the same syntax as the v0.20 subagent marker, minus the dispatch flag:
## RENDER << input >> output > **Input contract:** `assets/schemas/render-input.json` > **Output contract:** `assets/schemas/render-output.json`Subagent ops continue to declare contracts inside the
> **Subagent.**blockquote. Both forms populate the sameinputContract/outputContractfields. Schema-less ops continue to work unchanged. metadata.canopy-contracts: strictopt-in. Skills declare strict mode in frontmatter; the runtime then validates each contract-bearing op’s input before firing and output before binding. Halts with[contract-violation]on drift. Default (omitted) keeps contracts descriptive only.- Schema composition through bindings. A consumer op’s input contract may
$refinto the producer op’s output schema (same skill). The vscode extension surfaces drift across the binding graph as authoring-time diagnostics. /canopy improvecontract-scaffolding pass. New audit step: for each op without contracts, proposeassets/schemas/<op-name>-{input,output}.jsongenerated from the op’s<</>>named fields. Permissive defaults (additionalProperties: true, every propertytype: string) — author refines. Opt-in via--scaffold-contractsflag in the apply prompt./canopy validatecontract checks. New error/warning catalog covering missing schema files, schema-vs-signature drift, binding-edge drift between producer and consumer, and the strict-mode-without-contracts no-op case./canopy adviseand/canopy convert-to-canopycontract recommendations. Both ops now propose contract markers for ops with stable signatures, and propose strict mode once the skill carries contracts on the majority of non-trivial ops.
Changed
docs/reference/FRAMEWORK_SPEC.mdgains an “Op Contracts” section + aContract-bearing oprow in the Tree Execution Model node-types table.skills/canopy-runtime/references/skill-resources.mdgains an “Op contracts” section describing the marker syntax, contract composition, strict-contract mode, and the scaffolding pathway.skills/canopy-runtime/references/ops/subagent.mdgains a brief “Contracts on subagent ops” section cross-referencing the universal form so readers don’t conclude that contracts are subagent-only.skills/canopy/assets/policies/authoring-rules.mdgains a “Universal op contracts” section covering marker forms, schema location, when to declare, when to skip, and the strict-mode opt-in.skills/canopy/assets/constants/control-flow-notation.mdgains rows mapping (a) signature-stable inline ops to contract-marker adoption and (b) contract-bearing skills to the strict-mode flag.
Notes
- vscode extension v0.15.0 (separate package) ships the static type-flow analyzer + binding-graph builder + new diagnostics, hover, completion, and snippets.
claude-canopy-examples/parallel-reviewretrofitted as the canonical S3 demo: input contracts on every subagent op + universal contracts onMERGE_ASPECT_FINDINGSandREPORT_BY_SEVERITY(the inline ops) +metadata.canopy-contracts: strict. Other example skills intentionally remain contract-less to demonstrate the back-compat path.- Cross-skill
$refis out of scope for this release — single-skill schema composition only.
[0.21.0] — 2026-05-09
Context-optimization release. Cuts the per-skill canopy tax from ~700 lines of always-loaded runtime spec to ~150–400 depending on feature usage. Fully backward-compatible — skills authored on prior versions continue to work without changes.
Added
- Sliced primitive spec.
skills/canopy-runtime/references/framework-ops.md(monolithic, 151 lines) is replaced by per-feature slice files underreferences/ops/:core.md—IF,ELSE_IF,ELSE,END,BREAK(always loaded)interaction.md—ASK,SHOW_PLANcontrol-flow.md—SWITCH,CASE,DEFAULT,FOR_EACHparallel.md—PARALLELsubagent.md— subagent dispatch (marker + bold call-site)explore.md—EXPLORE+## Agentsoft-compatverify.md—VERIFY_EXPECTEDreferences/ops.md— index pointing at the slices
- Per-skill
metadata.canopy-featuresmanifest. Skills declare which feature slices they use; the runtime loads only those (coreis implicit-always-loaded). Auto-generated by/canopy create/scaffold/improve/convert-to-canopy. Authors don’t maintain it by hand. /canopy measure-context <skill>op (skills/canopy/references/ops/measure-context.md). Reports the line-count breakdown a skill costs to load — marker block + runtime baseline + manifest-driven slices + skill-local files. Highlights drift between the manifest and actual feature usage. Pure inspection; no mutations.- MEASURE_CONTEXT registered in operations dispatch + detection +
dispatch-schema.jsonenum. Trigger phrases include “measure context”, “context size”, “context cost”, “manifest size”.
Changed
- Slim marker block in
assets/constants/marker-block.md(and the byte-identical mirrors ininstall.sh build_marker_block()andinstall.ps1 Build-MarkerBlock). The block is now a 2-line trigger + pointer (~5 lines including markers) — down from ~30 lines. Pre-v0.21.0 markers inlined the full spec dump in every canopy-active project’s ambient instructions; the new block defers all spec tocanopy-runtime/SKILL.md, loaded only when the runtime is engaged. canopy-runtime/SKILL.mddocuments the manifest-aware load procedure: read the skill’s frontmatter, parsemetadata.canopy-features, loadcore.mdplus the listed slices. Manifest absent → load every slice (back-compat).runtime-claude.mdandruntime-copilot.mdreference the slice index instead of the deleted monolithicframework-ops.md. Cross-references updated throughout.skill-resources.mdtrimmed: subagent dispatch content moved toops/subagent.md. Adds a new section documenting the manifest.- Authoring agent ops updated for the manifest:
create.md— computes the manifest from the planned tree and emits it in produced SKILL.md frontmatter.scaffold.md— template includes the manifest stub.improve.md— audits skills for missing or drifted manifests; proposes additions/corrections in the decision table.validate.md— new check pass: manifest presence (warning), feature-vs-tree drift (warning),corelisted (warning), unknown values (warning).convert-to-canopy.md— emits the manifest in produced SKILL.md.
assets/constants/validate-checks.md— new “Warnings → manifest” section enumerating the four drift cases and the “manifest absent” warning.assets/templates/skill.md— template now includesmetadata.canopy-features: [interaction](the typical small-skill default).
Removed
skills/canopy-runtime/references/framework-ops.md— the monolithic primitive file is split acrossreferences/ops/<slice>.md. Skills that referenced it by path will need to update; this is rare in practice (the runtime resolves primitives by lookup, not by path)./canopy improvereports any stale path references.
Notes
- No new feature surface. All v0.20.1 features (subagent dispatch, PARALLEL, etc.) keep working unchanged. v0.21.0 only changes how the runtime spec is structured and loaded.
- Marker-block parity. Canonical,
install.sh,install.ps1all updated. The vscode extension’sMARKER_BLOCKconstant must follow in a sibling-repo PR. - Back-compat. Skills without a
canopy-featuresmanifest continue to run — the runtime falls back to load-everything./canopy validatewarns; never errors. Adoption is gradual. - Footprint estimate. A skill using
[interaction, verify]loads roughly 400 lines of runtime context (down from ~700). A skill using[parallel, subagent]loads ~470. A skill with[interaction, control-flow, parallel, subagent, explore, verify](full feature surface) loads ~770 — comparable to pre-v0.21.0.
[0.20.1] — 2026-05-09
Patch release. Closes a versioning-process gap exposed during the v0.20.0 release.
Fixed
metadata.versionin all threeSKILL.mdfrontmatters bumped to0.20.1. Thecanopy,canopy-runtime, andcanopy-debugskills had been carryingversion: "0.18.1"since that release —gh skill install --pin vX.Y.Zonly pins the git ref it pulls from, so these per-skill values stayed stale through the v0.19.0 and v0.20.0 bumps. No runtime behavior change; the fields are informational metadata that consumers see embedded in the installed file.
Changed
.claude/rules/versioning.mdextended from 4 → 7 sources of truth. Adds the three per-skillmetadata.versionfields to the lockstep group and includes a sanity-checkgrepsnippet for pre-tag verification. Auto-loads on everySKILL.mdopen in addition to the existing version-tracking files..claude/rules/versioning.md“How to bump” rewritten as a manual procedure — there is no/bump-versionskill in this repo (it was removed; only the references lingered).CLAUDE.mdanddocs/CONTRIBUTING.mdupdated to match.
Notes
- No spec or runtime changes.
gh skill install --pin v0.20.1is the same install as v0.20.0 modulo the corrected metadata strings. Consumers who pinned v0.20.0 don’t need to upgrade unless they readmetadata.versionfrom the installedSKILL.md.
[0.20.0] — 2026-05-09
S2 of the parallel-subagent design. Adds subagent dispatch via per-op markers — an op’s definition decides whether it runs inline (today’s behavior) or out-of-context as a subagent. No new primitives, no new section types.
Added
- Subagent dispatch by marker. Op definitions in
references/ops.md(orreferences/ops/<name>.md) may carry a> **Subagent.** Output contract: <schema-path>blockquote as the first content under the heading. Calls to such ops use**OP_NAME** << input >> output(bold around the op name) — bold = out-of-context dispatch; plain = inline. Op-call syntax stays uniform; the marker decides dispatch. Documented inskills/canopy-runtime/references/skill-resources.md→## Subagent dispatch. - Strict-contract rule for subagent ops. Bodies of marked ops may use only
<<inputs + static skill assets (assets/constants/...,assets/templates/...,assets/policies/...). Ambientcontext.*reads not in the signature are contract violations — reserved for inline ops only. - Bidirectional consistency. Bold call site ↔ op-def marker must match.
/canopy validateflags mismatches in either direction. - Composition with
PARALLEL(S1). Bold-marked op calls asPARALLELchildren give multi-typed parallel subagent fan-out — the canonical multi-source-explore / multi-aspect-review pattern. No grammar change to PARALLEL needed.
Changed
skills/canopy-runtime/references/skill-resources.md— replaces## Explore subagentwith## Subagent dispatch; covers marker shape, call-site convention, strict-contract rule, composition withPARALLEL, and soft-compat for## Agent+EXPLORE.skills/canopy-runtime/references/runtime-claude.mdandruntime-copilot.md—## Agent Executionrewritten as## Subagent dispatchwith marker-based path (preferred) and## Agent+EXPLOREsoft-compat path.## Parallel Subagent Invocationextended to mention marker-based children insidePARALLEL.skills/canopy-runtime/references/framework-ops.md—## PARALLELblock notes that marker-based op-call children dispatch out-of-context; cross-referencesskill-resources.md.skills/canopy/assets/policies/authoring-rules.md—## Subagent contractrewritten with marker dispatch as the primary form; legacy## Agentbody shapes (A/B/C) retained as a soft-compat subsection for existing skills only.skills/canopy/assets/constants/validate-checks.md— adds bidirectional-mismatch / missing-schema / strict-contract-violation / missing-input-schema / top-level-redundancy checks.skills/canopy/assets/constants/control-flow-notation.md— adds rows mapping legacy## Agent/**explore**body to the marker form, and inline-op promotion.- Authoring ops —
improve.mdproposes migration of## Agentskills to the marker form and promotion of strict-contract-honoring inline ops;convert-to-canopy.mdproduces marker-form skills (no## Agentfor new skills);advise.mdrecommends marker form for new subagent work;validate.mdcites the new check rules;create.md/scaffold.mdno longer emit## Agentfor new skills. docs/CONCEPTS.md— adds “Inline op vs subagent op (dispatch model)” subsection under Op Lookup.docs/reference/FRAMEWORK_SPEC.md— Tree Execution Model table gains a row for the bold-marked subagent op call.
Soft-compat
## Agent(singular) section +EXPLORE >> contextfirst-tree-node continues to work — the runtime treats it as a single-element marked op namedEXPLORE. No skills break. Hard removal of the legacy path is deferred to a pre-1.0 cleanup.- Existing inline ops without markers continue to run inline. No mass migration is required.
Deferred to S3
- Universal input/output contracts on every op (not just subagent-marked) + JSON Schema
$refcomposition through bindings + static type-flow analysis in vscode + runtime call-time input validation. S2 introduces the dispatch model; S3 layers the type system on top. - Async/await opt-in (
| asyncmodifier) for non-blocking sequential subagents. Out of scope here.
[0.19.0] — 2026-05-08
Added
PARALLELblock primitive — heterogeneous parallel-subagent fan-out as a real grammar element.PARALLELtakes no input and accepts ≥2 indented children; each child runs in its own context window. Defined inskills/canopy-runtime/references/framework-ops.md(mirrored todocs/reference/PRIMITIVES.md); platform emission rules inruntime-claude.md(multi-Taskin one assistant turn) andruntime-copilot.md(fleet subtask /@CUSTOM-AGENT-NAME/ sequential inline fallback). Failure semantics:Promise.allSettled— sibling failures don’t abort. Backward-compatible: prose fan-out continues to work as the dynamic-shape escape hatch.
Changed
- Authoring agent now recognizes
PARALLELas a structural target./canopy improveflags prose-fan-out patterns and proposesPARALLEL-block migration alongside existing primitive-migration suggestions./canopy convert-to-canopymaps “spawn N in parallel” prose toPARALLELblocks during conversion./canopy adviserecommendsPARALLELwhen a skill has ≥2 sequential## Agentinvocations with no data dependency between them. - Marker-block updated in all framework sources (
marker-block.md,install.sh,install.ps1) to listPARALLELin the control-flow primitives. The vscode-extension mirror (claude-canopy-vscode/src/commands/installCanopy.ts) is updated separately in extension v0.12.0; parity check passes once both PRs land. - Spec narrative docs (
CONCEPTS.md,FRAMEWORK_SPEC.mdTree Execution Model + Op Lookup Order) extended to enumeratePARALLELalongside existing primitives.
Notes
- This is the Tier 1 / S1 step from the parallel-subagent design ideation. S2 (
## Agents+SPAWNper-subagent schema declarations) and S3 (PARALLEL_FOR_EACHdata-parallel iterator) are deferred — escalate only if real skills demonstrate Tier 1 isn’t enough. - No behavioral break: every existing skill continues to parse and run unchanged.
[0.18.1] — 2026-04-30
Fixed
scripts/validate.shsafety-preamble check: regex now matches the canonical period form (> **Runtime required.**); previously required a colon (> **Runtime required:**), which no actual template, policy, op, orSKILL.mdin the repo uses — only the validator and one stray spot indocs/README.md. Result: post-merge CI on master flagged spec-compliant skills (including the bundledcanopyandcanopy-debug) as missing the preamble.
Notes — release integrity
- Tags are now SSH-signed. Verify with
git verify-tag v0.18.1. The local clone hastag.gpgsign trueset; the public key is registered as a Signing Key on GitHub. - SLSA build provenance is attached to every release.
release.ymlnow usesactions/attest-build-provenance@v2to produce a Sigstore-signed provenance record over the install tarball (canopy-${VERSION}.tar.gz), eachSKILL.md, and both plugin manifests. Verify withgh attestation verify canopy-0.18.1.tar.gz --owner kostiantyn-matsebora. - Install tarball is now uploaded as a release asset. Same install surface as
gh skill install/ plugin marketplace, just packaged for offline / scripted consumption. SECURITY.mdadded at the repo root (private vulnerability reporting, supported versions, integrity-verification snippet, in-scope / out-of-scope list). Auto-surfaces on the repo’s Security tab.masterbranch protection enabled: PR required, status checkvalidatemust pass, no force pushes, no deletions, linear history, conversation resolution required, admin enforcement on (no bypass).- Docs site published at https://kostiantyn-matsebora.github.io/claude-canopy/ — full reference rendered with cayman theme, dark/light toggle, and per-section TOC.
No skill behavior changes from 0.18.0; this is a patch release for repo hygiene + verifiable supply-chain.
[0.18.0] — 2026-04-29
Added
- agentskills.io standard layout: framework skills migrated to the spec-aligned layout — only
SKILL.mdat the root, withscripts/(executable code),references/(docs loaded on demand, includingops.md/ops/), andassets/(static resources:templates/,constants/,schemas/,checklists/,policies/,verify/). Old flat layout (category dirs at the skill root) remains fully supported by canopy-runtime —Readreferences resolve literally./canopy improvecan migrate legacy skills on user opt-in. compatibilityfield on every## Treeskill: spec-compliant free-text declaring the canopy-runtime requirement and its source repo, listing install tools as alternatives (gh skill install,git clone,install.sh/install.ps1, plugin marketplace) so the agent picks the install method its environment supports. Per agentskills.io spec,compatibilityis a max-500-char string — structured shapes likecompatibility: { requires: [...] }are non-spec and rejected by/canopy validate/ migrated by/canopy improve. Authoring ops (CREATE,SCAFFOLD,CONVERT_TO_CANOPY,MODIFY) emit the canonical free-text form automatically.- Safety preamble on every
## Treeskill: a fail-fast guard block at the top of the body that halts execution on agents without canopy-runtime active. Prevents silent wrong execution on unsupported platforms. - canopy-runtime self-activation:
canopy-runtime/SKILL.mdnow includes an Activation section that writes the marker block toCLAUDE.md(Claude Code) or.github/copilot-instructions.md(Copilot). Replaces the explicit/canopy:canopy activatestep for all install paths.- Who writes the marker block, by install path:
install.sh/install.ps1— the script writes it during install. Shell-context, no agent to defer to → project is fully activated when install completes.gh skill install— file placement only. Marker block is written by the next agent invocation that loadscanopy-runtime/SKILL.mdand runs Activation.- Claude Code plugin marketplace — same as
gh skill install: file placement only; agent writes the block on first load.
- Idempotent — running Activation on a fully activated project is a no-op.
- Who writes the marker block, by install path:
- Repo context detection:
CREATEandSCAFFOLDchoose the target skill location based oncontext.repo_context— distribution repos (skills/at root) get skills written toskills/<name>/; consumer projects get them in.claude/skills/<name>/or.github/skills/<name>/. - Cross-skill extraction constraint:
REFACTOR_SKILLSnow requires extracted shared logic to become a complete, named, installable skill (with its ownSKILL.md,compatibilityfield, and safety preamble); dependent skills declare it viacompatibility. No more bare shared files referenced from sibling directories — preserves agentskills.io skill autonomy. SKILL.mduppercase enforcement:validate.shand/canopy validateflag lowercaseskill.mdfiles. Required for case-sensitive filesystems (Linux, macOS APFS) and forgh skill installdiscovery.- Frontmatter compliance enforcement:
argument-hintanduser-invocableare non-spec at frontmatter root and must live insidemetadata.validate.shrejects root-level placement. - Cross-client install target (agentskills.io spec): a single install at
.agents/skills/serves both Claude Code and GitHub Copilot. canopy-runtime self-identifies the active host at runtime and applies the matching runtime spec (runtime-claude.mdorruntime-copilot.md) — no path-derived platform detection. Cross-client is additive; existingclaude/copilot/bothinstall targets are preserved.install.sh --target agentsandinstall.ps1 -Target agentsinstall to.agents/skills/. Marker block goes to whichever instructions file already exists (CLAUDE.mdand/or.github/copilot-instructions.md);CLAUDE.mdis created as fallback.gh skill install ... --dir .agents/skillsis the equivalent path for the gh-CLI flow. Newergh(2.91+) defaults Copilot installs to.agents/skills/automatically.- VSCode extension’s install commands include a Cross-client pick alongside Claude Code, Copilot, and Both, in both the install-script and gh-skill flows.
- Skills-root resolution in canopy-runtime:
<skills-root>is the first matching directory containingcanopy-runtime/SKILL.md. Recognized roots, in order:.agents/skills/→.claude/skills/→.github/skills/.dispatch-schema.json’sexplicit_target_platformenum gainscross-client.
Changed
commands/directory renamed →scripts/(matches agentskills.io standard).ops.mdandops/moved underreferences/(as documentation loaded on demand, per the agentskills.io progressive-disclosure pattern).- All static resource directories (
schemas/,templates/,constants/,checklists/,policies/,verify/) moved underassets/. IMPROVEop extended with agentskills.io compliance checks: missingcompatibility, missing safety preamble, root-levelargument-hint/user-invocable, lowercaseskill.md, structured-objectcompatibility(migrated to spec-compliant free-text). Optionally migrates legacy flat layout to the standard layout.CONVERT_TO_REGULARop now stripscompatibilityfield and safety preamble (regular agentskills.io skills don’t require them).- canopy-runtime category-directory documentation updated for new layout in
skill-resources.md,framework-ops.md,runtime-claude.md,runtime-copilot.md. - canopy-runtime platform detection moved from path-derived to runtime self-identification — the agent identifies itself (Claude Code / Copilot / other) instead of inferring from the skills-root path.
runtime-claude.mdandruntime-copilot.mduse the abstract<skills-root>placeholder so both specs work regardless of install location. - Marker block content restructured as bulleted (with nested) lists for readability and updated to mention all three skills roots. CI parity check across
marker-block.md,install.sh,install.ps1, and the vscode extension’sMARKER_BLOCKconstant still enforced. - Marker block canonical file moved from
skills/canopy/assets/constants/marker-block.mdtoskills/canopy-runtime/assets/constants/marker-block.md. Reason:gh skill install canopy-runtimedoes not transitively pullcanopy; the runtime must be self-contained for activation. Authoring ops (/canopy activate) cross-reference the new location via../canopy-runtime/....
Notes
- Not a breaking change: existing consumer skills using the legacy flat layout continue to execute correctly. canopy-runtime resolves
Readreferences literally; old skills don’t need migration. Existing--target claude/copilot/bothinstall flows unchanged. Cross-client is purely additive. - VSCode extension
claude-canopy-vscodeupdated in lockstep — language ID file patterns rewritten for new layout (commands/*.{ps1,sh}→scripts/*.{ps1,sh};templates/*→assets/templates/*; etc.) AND extended to also recognize.agents/skills/paths. Diagnostics flag old-layout skills with a “consider migrating” hint.
[0.17.1] — 2026-04-25
Added
ACTIVATEop (/canopy:canopy activateor/canopy activate): writes the canopy-runtime marker block to the current project’sCLAUDE.mdand/or.github/copilot-instructions.md. Closes the runtime-activation gap for the two install paths that don’t write the block automatically —/plugin install canopy@claude-canopyand manualgh skill install. Fully idempotent: same write contract asinstall.sh write_marker_block()(create / append / replace / unchanged / refuse-on-malformed). Run once per project after a plugin or gh-skill install; user-authored canopy skills under.claude/skills//.github/skills/then load runtime ambiently. Detection phrases:activate,activate runtime,wire up runtime,install runtime,write marker block,ambient activation,runtime not loading.skills/canopy/constants/marker-block.md: canonical source of the marker block content + the idempotent write contract. Documented as needing to stay byte-identical withinstall.sh build_marker_block()andinstall.ps1 Build-MarkerBlock.
Notes
- Existing install paths are unchanged. Users who installed via
install.sh/install.ps1(or via the vscode extension’sinstallAsAgentSkill) already have the block — running ACTIVATE on those projects is a safe no-op.
[0.17.0] — 2026-04-24
Changed (BREAKING)
- Distribution shape: Canopy is now a set of agentskills.io-format Agent Skills, not a git subtree + setup-script bundle. Ships as three skills split along authoring-vs-execution lines:
canopy-runtime— execution engine. Platform detection, primitives spec, op lookup chain, category semantics, subagent contract, per-platform runtime rules. Hidden from/menu. Loaded ambiently viaCLAUDE.md/.github/copilot-instructions.md(install script writes a marker block). Install this alone to execute existing canopy skills.canopy— authoring agent. Create/modify/validate/improve/scaffold/refactor/advise/convert skills. Depends oncanopy-runtime.canopy-debug— trace wrapper./canopy-debug <skill>emits phase banners and node traces.
- Claude Code plugin support: Added
.claude-plugin/plugin.json(plugin manifest) and.claude-plugin/marketplace.json(marketplace catalog) at repo root. The whole repo now doubles as a Claude Code plugin AND a self-hosting marketplace./plugin install canopy@claude-canopybundles all three skills. Theskills/directory serves all three install paths (plugin, gh skill, install script) from one source of truth. install.sh/install.ps1: idempotent installer scripts at repo root, callable viacurl | bashorirm | iex. Install all three skills AND idempotently write a marker-delimitedcanopy-runtimeblock toCLAUDE.md/.github/copilot-instructions.mdfor ambient runtime activation. Resolution order:--ref(git branch/tag/SHA; transient) →--version→.canopy-version→ latest release. Writes.canopy-versionon version-pinned installs; skips it for--refinstalls. Platform-agnostic:--target claude|copilot|both.gh skill install:gh skill install kostiantyn-matsebora/claude-canopy <skill> --agent claude-code|github-copilot --scope project --pin v0.17.0installs individual skills. Requires GitHub CLI v2.90.0+. Does NOT write ambient instruction files (use the install script if you want deterministic runtime activation).- The agent is now a skill: the canopy agent (formerly
agents/canopy.md+agents/canopy/<resource-dirs>/) was consolidated intoskills/canopy/SKILL.mdplus its existing resource subdirectories. agentskills.io skills auto-register/<skill-name>slash commands, so no wrapper skill is needed. - Runtime/spec extracted to
canopy-runtime:framework-ops.md(primitives),skill-resources.md(category semantics, op lookup, tree format, subagent contract),runtime-claude.mdandruntime-copilot.md(platform-specific rules) live inskills/canopy-runtime/references/. The canopy authoring agent reads them via sibling-relative path (../canopy-runtime/references/...). Minimum install = canopy-runtime alone. - Ambient runtime activation: user-authored canopy skills stay runtime-unaware. The install script writes a marker-delimited canopy-runtime block to the platform’s ambient instruction file. Re-runs idempotently update the block. Recognition trigger: presence of
## Treein any SKILL.md under.claude/skills/or.github/skills/. canopy-debug: file rename to uppercaseSKILL.md; frontmatter updated to agentskills.io spec; tree gains up-front platform-branched Reads of../canopy-runtime/SKILL.md+ references for formal runtime adherence during tracing.- User skill files: the spec uses
SKILL.md(uppercase). All canopy resource files now referenceSKILL.mdinstead ofskill.md. - Cross-skill ops:
skills/shared/project/ops.mdis no longer a built-in concept. Consumers who want shared cross-skill ops author their own skill (e.g. aproject-opsskill) and reference it explicitly.REFACTOR_SKILLSnow asks where to extract.
Removed
agents/directory — consolidated intoskills/canopy/.runtimes/directory — moved toskills/canopy-runtime/references/.rules/directory — moved toskills/canopy-runtime/references/.skills/shared/directory (framework/, project/, top-level ops.md stub).skills/canopy-help/— redundant; HELP op inside canopy covers it (/canopy help).- Old
setup.sh/setup.ps1— replaced by the new install scripts at repo root.
Migration guide
Consumer repos:
# Remove the subtree
git rm -r .claude/canopy
# Install all three skills + ambient runtime wiring (recommended)
curl -sSL https://raw.githubusercontent.com/kostiantyn-matsebora/claude-canopy/master/install.sh \
| bash -s -- --target claude --pin v0.17.0 # or --target both for Claude+Copilot
# Alternative: gh skill (no ambient-file write)
gh skill install kostiantyn-matsebora/claude-canopy canopy-runtime --agent claude-code --scope project --pin v0.17.0
gh skill install kostiantyn-matsebora/claude-canopy canopy --agent claude-code --scope project --pin v0.17.0
gh skill install kostiantyn-matsebora/claude-canopy canopy-debug --agent claude-code --scope project --pin v0.17.0
User-authored skills under .claude/skills/ keep working with no changes — ambient canopy-runtime activation via CLAUDE.md provides the interpretation rules; skills themselves stay runtime-unaware.
[0.16.0] — 2026-04-22
Added
install.sh/install.ps1andsetup.sh/setup.ps1now accept--target claude|copilot(-Targeton PowerShell) to wire either.claude/or.github/on a fresh install. Previously the scripts were Claude-only despite the framework’s dual-platform compatibility rule.- Copilot target: canopy source is placed at
.github/canopy/; skills and agents are linked under.github/skills/and.github/agents/; a marker-delimited## Canopy Skill Resourcessection is appended to.github/copilot-instructions.md(Copilot has no glob-based ambient rules, so the Claude-flavoredrules/skill-resources.mdisn’t created). - README Quick Start: dedicated Copilot invocation line for each installer.
Changed
- Setup scripts now emit
$BASE-aware paths in bothshared/ops.mdstubs and the “Next steps” output, so Copilot users see.github/...paths instead of.claude/....
[0.15.0] — 2026-04-21
Added
agents/canopy/policies/authoring-rules.md— consolidated policy file merging five prior files (skill-structure-rules.md,writing-rules.md,op-naming-rules.md,subagent-rules.md,debug-rules.md). VALIDATE now loads one policy file instead of four.agents/canopy/constants/validate-checks.md— extracted the Error/Warning/Optimization check catalog out ofops/validate.md(was ~30 inline lines).validate.mdshrinks from 61 → 15 lines.agents/canopy/constants/apply-block-protocol.md— single definition of the fencedapplyblock format and re-invocation rule. 7 ops (CREATE, MODIFY, IMPROVE, SCAFFOLD, REFACTOR_SKILLS, CONVERT_TO_CANOPY, CONVERT_TO_REGULAR) now reference the protocol instead of each repeating ~10 lines of boilerplate.agents/canopy/constants/platform-detection.md—.claude/→claude,.github/→copilotmapping; previously inlined inagents/canopy.md## Agentbody.agents/canopy/constants/target-platform-triggers.md— trigger-phrase lookup (“for copilot”, “as claude”, etc.); previously inlined.agents/canopy/ops/fetch-dispatch-context.md— tree-form op implementing the canopy agent’s dispatch context resolution (intent classification, platform detection, target-platform resolution, skill extraction, extra context).agents/canopy/policies/authoring-rules.md— new “## Agentbody shape” section with three canonical shapes (A: minimal / B: sub-task bullets / C: op reference), must-not list, and multi-concern MUST rule.agents/canopy/constants/validate-checks.md— two new Errors (inline mapping/enumeration in## Agent, inline quoted examples in## Agent) and two new Warnings (schema-field lists in## Agent, multi-concern prose in## Agent).
Changed
agents/canopy.md—## Agentbody reduced from ~6-line prose paragraph (inlining mapping, examples, and schema-field list) to a single shape (C) line:**explore** — execute FETCH_DISPATCH_CONTEXT. Output contract: schemas/dispatch-schema.json.agents/canopy/ops/validate.md— readspolicies/authoring-rules.md(single file) instead of four separate policy files; readsconstants/validate-checks.mdfor the check catalog.agents/canopy/ops/create.md,convert-to-canopy.md— references updated fromskill-structure-rules.md/writing-rules.mdtoauthoring-rules.md.agents/canopy/ops/create.md,modify.md,improve.md,scaffold.md,refactor-skills.md,convert-to-canopy.md,convert-to-regular.md— apply-block boilerplate replaced with single-line reference toconstants/apply-block-protocol.md.agents/canopy/constants/operations-dispatch.md— absolute.github/agents/canopy/ops/…paths replaced with paths relative to the agent directory (ops/…). Fixes Claude Code dispatch — previously only worked on Copilot.agents/canopy/policies/authoring-rules.md“Subagent contract” — runtime fallback behavior removed (was duplicated withruntimes/copilot.md); replaced with cross-reference to runtime specs.agents/canopy/schemas/explore-schema.json— exampleexisting_resourcesentry updated frompolicies/writing-rules.mdtopolicies/authoring-rules.md.runtimes/claude.md,runtimes/copilot.md— added op-resolution rule for## Agentshape (C):**explore** — execute NAMED_OPis resolved via the standard op lookup chain and the op body is injected as the subagent’s task (or inlined on Copilot).agents/canopy/ops/scaffold.md— scaffoldedskill.mdtemplate now includes an optional commented-out## Agentstanza with pointer topolicies/authoring-rules.mdfor shape selection.docs/AUTHORING.md— trimmed from 262 → ~170 lines by replacing duplicated tables/sections (notation, framework primitives, category directories, op lookup order) with links to the corresponding FRAMEWORK.md anchors;## Agentsubsection rewritten with three canonical shapes.docs/FRAMEWORK.md— Skill Anatomy section cross-references AUTHORING.md’s three## Agentshapes; directory-layout comment updated to reflect new policy filenames.docs/CHEATSHEET.md— added## Agent body shapesquick-reference table.docs/CONTRIBUTING.md— sync-required file list referencesauthoring-rules.mdinstead of the deletedoptimization-rules.md.CLAUDE.md—agents/canopy/policies/description updated to list current policy filenames.skills/canopy-help/SKILL.md— added platform detection branch; previously hardcoded only.github/paths so was Copilot-only.setup.sh,setup.ps1— generatedskill-resources.mdnow includeschecklists/row in the category table (was missing).- VS Code extension
src/commands/setupCanopy.ts—SKILL_RESOURCES_COPYandSKILL_RESOURCES_COPILOTtemplates now includechecklists/in the category table andSWITCH,CASE,DEFAULT,FOR_EACHin the primitives list.
Removed
agents/canopy/policies/skill-structure-rules.md,writing-rules.md,op-naming-rules.md,subagent-rules.md,debug-rules.md— consolidated intoauthoring-rules.md.agents/canopy/policies/optimization-rules.md— was a dead index file pointing at the files now merged intoauthoring-rules.md.
[0.14.0] — 2026-04-21
Changed
agents/canopy/ops/validate.md— two new Errors added: inline fixed text in any tree node (includingReport:, natural language steps, op descriptions) must be extracted toconstants/; inline parameterised text with<token>slots must be extracted totemplates/; procedural note added: for content-class rules, iterate every tree node in order and apply each check explicitly — do not rely on a holistic scan
[0.13.0] — 2026-04-20
Changed
agents/canopy/ops/validate.md— added scope line: all checks apply to tree nodes in bothskill.mdandops.mdequally; new Error for complex inline command invocations (must extract tocommands/); new Warning for long prose nodes (must extract to named op)agents/canopy/ops/improve.md— step 9 changed to iterative: repeat VALIDATE + fix loop until no Errors or Warnings remain (previously stopped after one pass, leaving residual violations)agents/canopy/ops/create.md—ops.mdquality spec added: nodes must comply with same writing-rules and skill-structure-rules asskill.md; footer added reinforcing short nodes and commands-extraction requirementagents/canopy/policies/writing-rules.md— two new sections: “Tree nodes → ops” (long prose must be extracted); “Static and parameterised content → constants or templates” (applies to all node types)agents/canopy/policies/skill-structure-rules.md— added to must-NOT-contain list: complex inline command invocations must be extracted tocommands/scripts
[0.12.0] — 2026-04-20
Added
skills/shared/framework/ops.md— newFOR_EACH << item in collectionprimitive for iterating over collections; body executes once per element; empty collection skips body entirely;BREAKinside exits the loop early;BREAKoutside a loop exits the current op (dual role clarified)
Changed
docs/FRAMEWORK.md— addedFOR_EACHto node types table, Control Flow Primitives section, and Op Registries table; primitives sentence updateddocs/AUTHORING.md— addedFOR_EACHand updatedBREAKin Framework Primitives tableagents/canopy/constants/control-flow-notation.md— added migration entries forFOR_EACH(replace prose loops and numbered-step-per-item patterns)agents/canopy/ops/validate.md—FOR_EACHadded to error check for framework primitives defined in skill/project opsagents/canopy.md— primitives list updatedskills/canopy-debug/ops.md—FOR_EACHadded to never-simulated primitives listrules/skill-resources.md,setup.sh,setup.ps1,CLAUDE.md— primitives lists updated
[0.11.0] — 2026-04-20
Added
skills/shared/framework/ops.md— three new control-flow primitives:SWITCH << expression,CASE << value,DEFAULT;SWITCHevaluates an expression once and executes the first matchingCASE;DEFAULTfires when noCASEmatched; use in place of longIF/ELSE_IFchains that branch on a single value
Changed
docs/FRAMEWORK.md— addedSWITCH/CASE/DEFAULTto Control Flow Primitives section and Op Registries table; updated primitives list in Op Lookup Orderdocs/AUTHORING.md— addedSWITCH,CASE,DEFAULTto Framework Primitives tableagents/canopy/constants/control-flow-notation.md— added migration entries forSWITCH/CASE(replace repeatedELSE_IFchains matching one value)agents/canopy/ops/validate.md—SWITCH,CASE,DEFAULTadded to error check for framework primitives defined in skill/project opsagents/canopy.md— primitives list updatedskills/canopy-debug/ops.md—SWITCH,CASE,DEFAULTadded to never-simulated primitives listrules/skill-resources.md,setup.sh,setup.ps1,CLAUDE.md— primitives lists updated
[0.10.0] — 2026-04-20
Added
skills/canopy/skill.md— new bundledcanopyskill; detects active platform and delegates to.claude/agents/canopy.mdor.github/agents/canopy.md; enables/canopy <request>as the primary invocation shorthand on Claude Codeagents/canopy/policies/platform-targeting.md— platform targeting policy for write ops (CREATE, SCAFFOLD, CONVERT_TO_CANOPY): maps execution platform and explicit user target to the correct skills base path; enforces no hardcoded.claude/or.github/paths in generated skill content
Changed
agents/canopy.md—dispatch-schema.jsonexplore output extended withavailable_platforms(all detected platform dirs) andexplicit_target_platform(from user input or null); added rule: always load platform runtime spec before executing any op procedureagents/canopy/schemas/dispatch-schema.json— addedavailable_platforms(array) andexplicit_target_platform(string or null) fields to the dispatch output contractagents/canopy/ops/create.md,scaffold.md,convert-to-canopy.md— platform-aware skill path resolution viapolicies/platform-targeting.mdagents/canopy/ops/validate.md— added cross-platform content check: flags hardcoded.claude/or.github/paths in skill filesagents/canopy/policies/skill-structure-rules.md— added cross-platform content rule:skill.mdmust not contain hardcoded platform pathsagents/canopy/policies/subagent-rules.md— documented platform-specific subagent execution: native Explore subagent on Claude Code; inline sequential file-reading fallback on Copilotagents/canopy/verify/create-expected.md,scaffold-expected.md— verify target-platform path rather than hardcoded.claude/pathruntimes/claude.md— invocation updated to/canopy <request>via the bundledcanopyskilldocs/README.md— invocation section rewritten:/canopy <request>as primary form for Claude Code;Follow .github/agents/canopy.md and <request>for Copilot; operations table updated with concrete/canopyexamplesCLAUDE.md— Contributing Rules: added documentation verification requirement — every framework change must be verified againstruntimes/,AUTHORING.mdfor staleness before the work is considered done
[0.9.0] — 2026-04-19
Added
runtimes/claude.md— Claude Code runtime spec: base paths (.claude/), native explore subagent execution, ambient rules via globs, agent and skill invocation formsruntimes/copilot.md— GitHub Copilot runtime spec: base paths (.github/), inline sequential file-reading fallback when native subagent is unavailable,copilot-instructions.mdrules wiring, explicit agent invocation form-
agents/canopy/schemas/dispatch-schema.json— output contract for the canopy agent’s own intent-classification subagent; fields:operation,platform(claudecopilot),target_skill,extra_context
Changed
agents/canopy.md— restructured from free-form prose to Canopy skill format (frontmatter +## Agent+## Tree+## Rules+## Response:);## Agentexplore subagent now classifies intent and detects platform;## Treereplaces LLM-inferred dispatch with an explicitIF/ELSE_IFchain overcontext.operation— deterministic routing to one of 10 ops; falls back toASKwhen intent is ambiguousdocs/README.md— added “Skills that run on Claude Code and GitHub Copilot” to Why Canopy; updated How It Works to describe platform-aware execution and self-hosting agent design; updated Under the Hood diagram with Stage 2 (detect platform + load runtime), Stage 3 (explore with native vs inline fallback), and runtime specs legenddocs/FRAMEWORK.md— added Runtime Model section (interpreter model rationale, feature delta table, runtime spec file list); updated directory layout to showruntimes/and both schema filesCLAUDE.md— updated Key Files to documentruntimes/,dispatch-schema.json, and the new canopy agent structure
[0.8.1] — 2026-04-16
Changed
agents/canopy/ops/improve.md,modify.md,refactor-skills.md,convert-to-canopy.md,create.md,scaffold.md,convert-to-regular.md— all confirmation-pause ops now emit a fencedapplyblock (op name, skill name, per-file change list) immediately before asking “Proceed?”; if re-invoked after the block is visible in context the agent skips analysis and applies directly, preventing plan context loss across invocationsagents/canopy/ops/help.md— corrected Claude Code CLI invocation section:/canopyinvokes a skill, not the agent; natural language requests auto-apply the agent from.claude/agents/canopy.md; explicit form documented asFollow .claude/agents/canopy.md and <request>
[0.8.0] — 2026-04-16
Added
agents/canopy/ops/— per-operation procedure files extracted fromagents/canopy.md:create.md,modify.md,scaffold.md,convert-to-canopy.md,validate.md,convert-to-regular.md,improve.md,advise.md,refactor-skills.md,help.mdagents/canopy/constants/— extracted lookup tables:category-dirs.md,control-flow-notation.md,operation-detection.md,operations-dispatch.mdagents/canopy/verify/— expected-state checklists forVERIFY_EXPECTEDper operation:create-expected.md,modify-expected.md,scaffold-expected.md,convert-to-canopy-expected.md,convert-to-regular-expected.md,improve-expected.md,refactor-skills-expected.mdagents/canopy/policies/skill-structure-rules.md,writing-rules.md,op-naming-rules.md,subagent-rules.md,debug-rules.md,preservation-rules.md,category-decision-flowchart.md,conversion-expansion-rules.md—optimization-rules.mddecomposed into targeted single-concern policy files- New operations on the
canopyagent:IMPROVE(fix violations, re-categorise resources, align with framework),ADVISE(read-only “how to” plans),REFACTOR_SKILLS(extract ops/resources shared across > 2 skills toshared/),HELP(usage reference) skills/canopy-help/SKILL.md— read-only skill that emits the canopy agent help reference or a specific operation procedure
Changed
agents/canopy.md— inline operation procedures and constants replaced withRead <category>/<file>references; tree examples expanded with a fullreleaseskill illustration;REFACTOR_SKILLSandHELPadded to operation detection; two new rules added (no duplicate shared ops/resources; verify references after every change)agents/canopy/policies/optimization-rules.md— now an index table pointing to the decomposed policy filesagents/canopy/schemas/explore-schema.json—existing_resourcesfield updated to reference new policy file namesdocs/FRAMEWORK.md,CLAUDE.md— directory layout updated to showops/,constants/,verify/underagents/canopy/; sync-required note updated to referenceagents/canopy/policies/instead of the singleoptimization-rules.mddocs/README.md— usage table extended with IMPROVE, ADVISE, REFACTOR_SKILLS, HELP operations
[0.7.0] — 2026-04-13
Added
skills/canopy-debug/skill.md— newcanopy-debugskill; traces any Canopy skill with live phase banners and per-node tree tracking; respects Claude Code mode (plan mode simulates mutations, edit mode executes normally)skills/canopy-debug/ops.md— skill-local ops:EMIT_PHASE_BANNER(renders double-box phase banners),EXECUTE_WITH_TRACE(drives full skill execution with tracing),TRACE_NODE(emits stream one-liner and overwrites trace file per state change),TRACE_EXECUTE_NODES(iterates nodes with mode-aware branch evaluation),WRITE_TRACE_FILE(overwrites.canopy-debug-trace.logwith current full-tree snapshot)skills/canopy-debug/policies/debug-output.md— debug output protocol: dual-channel output (chat stream + trace file), phase registry with ordinals and descriptions, phase banner format, node state symbol table (→ ⟳ ✓ ◎ ⊘ ✗ ⏸ ⊙), stream and trace file formats, mode-aware execution rules, ASK interaction protocol, EXPLORE subagent handling, END/HALTED display
Changed
docs/README.md— added “Failures you can trace to a single node” bullet to the “Why Canopy?” section; references/canopy-debugfor live phase and per-node tracing
[0.6.0] — 2026-04-12
Changed
agents/canopy-skill.md→agents/canopy.md— agent renamed fromcanopy-skilltocanopyagents/canopy-skill/→agents/canopy/— agent resource directory renamed to matchagents/canopy.md— frontmattername:updated tocanopy;optimization-rules.mdglob updated to**/canopy/policies/optimization-rules.mddocs/FRAMEWORK.md,docs/README.md,docs/AUTHORING.md,docs/CONTRIBUTING.md,.github/PULL_REQUEST_TEMPLATE.md— allcanopy-skillagent references updated tocanopy
[0.5.0] — 2026-04-12
Added
agents/canopy-skill.md—canopy-skillpromoted from skill to Claude Code agent; handles six operations: CREATE (new skill from description), MODIFY (targeted edits to existing skill), SCAFFOLD (blank skeleton with all dirs), CONVERT_TO_CANOPY (flat skill → Canopy format), VALIDATE (errors, warnings, optimization report), CONVERT_TO_REGULAR (Canopy → flat skill)agents/canopy-skill/templates/skill.mdandagents/canopy-skill/templates/ops.md— skeleton templates used by the SCAFFOLD operationAUTHORING.md— manual skill authoring reference: full anatomy walkthrough, both tree syntaxes with examples, op definition patterns, primitives table, category resource directory reference, andskill.mdcontent constraintssetup.shandsetup.ps1— agent wiring: symlink/junction each bundled agent.mdfile and its resource directory into.claude/agents/(mirrors existing skill symlink pattern)
Changed
agents/canopy-skill/policies/optimization-rules.md— moved fromskills/canopy-skill/policies/; content unchangedagents/canopy-skill/schemas/explore-schema.json— moved fromskills/canopy-skill/schemas/; content unchangedREADME.md— Usage section rewritten around thecanopy-skillagent (operation table with example invocations); manual authoring content replaced with a link toAUTHORING.md;## Skill Anatomysection trimmed to structural overview only; Features bullet updated to reflect agent promotion;AUTHORING.mdadded to Directory StructureFRAMEWORK.md— added## Framework Agentssection documenting agent format, resource subdirectory conventions, and setup wiring; directory layout updated to showagents/alongsideskills/CONTRIBUTING.md— sync-required file list updated to referenceagents/canopy-skill/policies/optimization-rules.md
Removed
skills/canopy-skill/skill.mdandskills/canopy-skill/ops.md— superseded byagents/canopy-skill.md
[0.4.0] — 2026-04-12
Added
- Markdown list syntax (
*nested lists) as an alternative to box-drawing characters for tree definitions — write trees directly under## Treewithout a fenced code block examples/documentation split out toclaude-canopy-examplesrepo; canopy repo stays submodule-clean
Changed
rules/skill-resources.md— Tree format section now documents both syntaxes with examplesFRAMEWORK.md— Tree Execution Model section shows both formats side-by-side; Skill-Local ops.md section shows markdown list format as alternative for branching op definitionsREADME.md—## Treeanatomy and minimal example updated to lead with markdown list syntaxskills/canopy-skill/policies/optimization-rules.md— Rule 6 updated to list both formats; markdown list marked as preferred for new/simple trees
[0.3.2] — 2026-04-12
Added
- community health files for GitHub:
CONTRIBUTING.md, issue templates, and pull request template
[0.3.1] — 2026-04-12
Changed
README.md— replaced the broken external examples link with plain repo mention, made the## Agentexample generic instead of project-specific, and reduced duplication betweenSkill AnatomyandWriting a Skill
[0.3.0] — 2026-04-12
Fixed
setup.ps1— create directory junctions in.claude/skills/for each bundled canopy skill so VS Code discovers them outside the submodule boundarysetup.sh— create symlinks in.claude/skills/for each bundled canopy skill for the same reason on Linux/macOS
[0.2.0] — 2026-04-12
Added
setup.shandsetup.ps1— submodule setup scripts; create wiring files in the user’s project so Claude Code can see both canopy internals and project skillsskills/canopy-skill/— renamed fromoptimize-skill; bundled meta-skill for auditing and optimizing Canopy skills
Changed
README.md— added “How It Works” diagram showing full skill anatomy; added inline examples in Features; added Skill Anatomy section; rewrote Quick Start Option A (vendored via curl/tar, explicit warning against git clone) and Option B (git submodule + setup script); removed manual Submodule Wiring sectionFRAMEWORK.md— removed content duplicated in README (intro paragraph, submodule directory tree, Skill Anatomy); added pointer to README for setup instructionsrules/skill-resources.md— updated standalone note to reference setup scripts
[0.1.0] — 2026-04-12
Added
- Initial framework release — extracted from home-data-center project
FRAMEWORK.md— full Canopy specification (tree execution model, op lookup order, category resources)rules/skill-resources.md— ambient rules for standalone useskills/shared/framework/ops.md— framework primitives:IF,ELSE_IF,ELSE,BREAK,END,ASK,SHOW_PLAN,VERIFY_EXPECTEDskills/shared/project/ops.md— stub with commented examples for project-wide opsskills/shared/ops.md— redirect stubskills/canopy-skill/— bundled meta-skill for auditing and optimizing Canopy skillsREADME.md— setup instructions for standalone and submodule usageLICENSE— MIT- Submodule wiring documentation