Canopy Skills for VS Code
IntelliSense, semantic diagnostics, and go-to-definition for Canopy skills — the declarative, tree-structured execution framework for AI agents. Tracks framework v0.22.0.
What is Canopy?Canopy is a framework for writing AI skills as structured, executable code rather than freeform prose. Instead of describing what an AI agent should do in plain text, you define skills as a tree of named operations with explicit control flow, inputs, and outputs — then run them through Claude Code or GitHub Copilot. A Canopy skill looks like this:
Key ideas:
Canopy turns AI instructions into something you can read, review, version-control, lint, and refactor — like real code. InstallationThe extension is distributed as a
Quick StartOpen your project, then run these from the Command Palette (
What this extension doesTurns Canopy skill files into a first-class editor experience: live semantic validation with Quick Fixes, autocomplete for every primitive and custom op, inline hover docs, and go-to-definition across the skill → project → framework op lookup chain. Tracks the framework's evolving feature surface — subagent dispatch markers (v0.20+), per-skill In actionAutocomplete for primitives and custom opsType a tree-node prefix and get completions for every
Semantic diagnostics with Quick FixesReal-time validation catches primitive signature violations, missing frontmatter, wrong
Inline documentation for every primitiveHover any
CommandsAll commands are accessible via the Command Palette ( Install (
|
| Command | What it does |
|---|---|
| Install... | Unified entry point; presents a Quick Pick of the three install methods with availability badges based on which CLIs (git, gh skill, claude) are on PATH |
| Install (via install script) | Clone canopy and run install.sh / install.ps1. Picks target (Claude / Copilot / Both / Cross-client .agents/skills/); writes the canopy-runtime ambient marker block during install (shell-context, no agent to defer to). Requires git. |
| Install as Agent Skill (gh skill) | gh skill install per checked skill. Picks target (Claude Code / Copilot / Cross-client; cross-client uses --dir .agents/skills). Writes the marker block proactively too. Marker block also self-writes via canopy-runtime's Activation on first agent load. Requires gh ≥ 2.90.0. |
| Install as Claude Code Plugin | Copies the three /plugin slash commands (marketplace add + install + activate) to clipboard for paste in a Claude Code session. Plugin install bundles all three skills. The activate step is a safety net — canopy-runtime self-activates on first agent load. |
✨ Skill — describe it, let AI write it (Canopy Skill category)
Start here. No deep framework knowledge required — describe what you want in plain English and the Canopy AI agent writes, validates, and refines the skill for you. Auto-detects the installed AI target (Claude Code under .claude/ or GitHub Copilot under .github/) and invokes claude "<prompt>" or gh copilot suggest "<prompt>".
| Command | What it does |
|---|---|
| Create Skill | Describe a skill; the agent writes it end-to-end |
| Modify Skill | Pick a skill and describe the change |
| Scaffold Skill | Provide a name; the agent creates the blank structure |
| Convert to Canopy | Converts a plain-markdown skill to Canopy tree format |
| Validate Skill | Checks a skill against all framework rules |
| Improve Skill | Aligns a skill with the latest framework conventions |
| Advise | Ask the agent a design question about Canopy |
| Refactor Skills | Extracts shared ops and resources across multiple skills |
| Convert to Regular Skill | Converts a Canopy skill back to plain markdown |
| Help | Lists all available agent operations |
Scaffold — manual authoring (Canopy Template category)
For authors who know the framework and prefer to hand-write skills and resources. Each command drops a correctly-structured blank file at the right path — you fill in the content.
| Command | Description |
|---|---|
| New Skill | Creates SKILL.md + ops.md for a new skill |
| New Verify File | Scaffolds a verify/ checklist |
| New Template | Scaffolds a templates/ file (.md, .yaml, or .yaml.gotmpl) |
| New Constants File | Scaffolds a constants/ lookup file |
| New Policy File | Scaffolds a policies/ rule file |
| New Commands File | Scaffolds a commands/ script (.ps1 or .sh) |
| New Schema | Scaffolds a schemas/ file |
Features
Syntax highlighting
Five language IDs cover all Canopy file types:
| Language | Files | Highlights |
|---|---|---|
canopy |
SKILL.md, ops.md, references/ops.md, references/ops/*.md |
Tree notation, IF/ELSE/SWITCH/CASE/DEFAULT/FOR_EACH/BREAK/END, ASK/SHOW_PLAN/VERIFY_EXPECTED/EXPLORE, <</>>, op names, binding expressions |
canopy-verify |
assets/verify/*.md, verify/*.md, assets/checklists/*.md, checklists/*.md |
Checkbox items |
canopy-template |
assets/templates/*.md, templates/*.md, assets/templates/*.yaml, templates/*.yaml |
<token> placeholders |
canopy-resource |
assets/constants/*.md, constants/*.md, assets/policies/*.md, policies/*.md, assets/schemas/*.md, schemas/*.md, references/*.md |
Tables, numbered rules |
canopy-commands |
scripts/*.ps1, scripts/*.sh, commands/*.ps1, commands/*.sh (legacy) |
# === Section Name === headers |
All patterns cover all three skills roots: .agents/ (cross-client), .claude/ (Claude Code), and .github/ (Copilot). The agentskills.io standard layout (assets/, scripts/, references/) and the legacy flat layout (category dirs at the skill root) are both recognised.
IntelliSense
Completions in SKILL.md and ops.md:
| Completion | What it suggests |
|---|---|
| Op names | Ops from the current skill, project-level ops, and framework primitives; inserts the correct tree-node prefix (* / ├── ) automatically |
| Primitives | All framework built-ins with descriptions |
| Frontmatter | name, description, compatibility, license, metadata, allowed-tools at root (agentskills.io spec); argument-hint, user-invocable inside metadata |
| Category resources | Read `category/path` directives for constants/, policies/, templates/, schemas/, checklists/, verify/, references/ |
Hover documentation
Hovering over a framework primitive or a custom op shows its description, expected << input and >> output, and a usage example.
Go-to-definition
Press F12 (or right-click → Go to Definition) on any ALL_CAPS identifier. The extension resolves through:
- Current skill's
ops.md - Consumer-defined cross-skill ops (if any)
- Framework primitives (statically defined in the extension; canonical source is canopy's
skills/canopy-runtime/references/ops.mdindex plus per-feature slice files underskills/canopy-runtime/references/ops/<slice>.md)
Semantic diagnostics
Real-time squiggles for:
| Check | Catches |
|---|---|
| Frontmatter | Missing name or description, empty values, unknown keys, argument-hint/user-invocable at root (must live in metadata) |
| Compatibility shape | Block-form / inline-flow maps flagged with migration hint (compatibility must be a free-text string per agentskills.io spec); >500 char values flagged; canopy-runtime mention hint on ## Tree skills |
| Tree syntax | >> before <<, empty operator slots |
| Primitive signatures | IF/ELSE_IF without <<; ASK without \| options; SHOW_PLAN without >>; VERIFY_EXPECTED wrong path prefix; ELSE/BREAK with spurious operators; EXPLORE without >> |
| Resource references | Read `category/path` uses a recognised category and the file exists on disk; VERIFY_EXPECTED target file existence |
| Unknown ops | Configurable severity for ALL_CAPS names not found in any registry |
| Op conformance hints | Tree node's <</>> usage doesn't match the op's declared signature |
| Subagent dispatch (v0.20+) | Bidirectional bold-vs-marker drift between op definition and call sites; missing Output contract: schema files; strict-input-contract violations (context.<name> not in signature) |
| Universal contract markers (v0.22+) | Bare > **Input contract:** \...`` / > **Output contract:** \...`` blockquote paths must exist on disk; schema top-level properties must cover the op's << / >> named fields |
| Binding-graph type flow (v0.22+) | When an op carries an Output contract, downstream consumers binding << ctx.<key> are checked — warns when <key> is not declared in the producer's output schema |
| Canopy-features manifest (v0.21+) | metadata.canopy-features declares-but-unused / used-but-undeclared drift; core listed (implicit-always-loaded); unrecognized slice values |
| Canopy-contracts manifest (v0.22+) | metadata.canopy-contracts value other than strict; strict declared on a skill with no contract-bearing ops |
Requirements
- VS Code 1.85 or later
- For Install (via install script):
gitin PATH - For Install as Agent Skill (gh skill):
ghCLI v2.90.0+ in PATH (theskillsubcommand) - For Canopy Skill commands targeting Claude:
claudeCLI in PATH (each command surfaces an "open download" link if missing)
Settings
| Setting | Default | Description |
|---|---|---|
canopy.frameworkUrl |
https://github.com/kostiantyn-matsebora/claude-canopy |
Framework repo URL used by install commands |
canopy.validate.enabled |
true |
Enable/disable all real-time validation |
canopy.validate.unknownOps |
"warning" |
Severity for unresolved op names: error, warning, hint, none |
canopy.validate.opConformance |
true |
Show hints when <</>> usage doesn't match the op's declared signature |
Building from source
npm install
npm run compile # one-shot TypeScript compile
npm run watch # watch mode
npm run package # produces canopy-skills-<version>.vsix
Press F5 in VS Code to open an Extension Development Host with the extension loaded.


