Use Canopy Alongside GitHub Copilot
GitHub Copilot and Canopy solve different problems. Copilot generates code completions as you type. Canopy answers structural questions about the codebase — dependents, blast radius, ownership, test coverage, architecture — through one tool, canopy_answer. They don’t conflict; they complement each other.
What each tool does
Section titled “What each tool does”GitHub Copilot:
- Autocompletes the line you’re typing
- Suggests function bodies based on surrounding context
- Generates boilerplate from a comment or type signature
- Works in the editor inline, without switching context
Canopy (via canopy_answer):
- Answers “what depends on
src/lib/payments.ts?” before you rename a function - Answers “what calls
createPayment?” before you change a signature - Answers “what should I know before editing
src/lib/payments.ts?” — a pre-edit dossier covering dependents, ownership, and tests - Answers “who last changed
src/lib/payments.ts?” and “what tests coversrc/lib/payments.ts?” - Answers “architecture overview” across the whole repo
They operate at different levels: Copilot is line-level, Canopy is codebase-level.
Recommended setup
Section titled “Recommended setup”Use Copilot for inline completions in VS Code or any editor with the Copilot extension. Use Canopy through an MCP-connected assistant — Claude Code, Cursor, or Continue — or directly from the shell with canopy answer "<question>".
A typical workflow:
- Before a refactor, ask
canopy_answer: “what should I know before editingsrc/lib/payments.ts?” Review the dependents and findings. - Plan the refactor with your assistant, informed by Canopy’s structural data.
- Implement using Copilot’s inline completions for the actual edits.
- After the refactor, ask “what depends on
src/lib/payments.ts?” again and confirm every dependent was updated.
This is not a rigid ceremony — skip Canopy for trivial edits (typo fixes, documentation changes). Use it for anything that touches an exported interface, moves a file, or restructures shared code.
No conflict with Copilot
Section titled “No conflict with Copilot”Canopy runs as an MCP server — it has no VS Code extension, no autocomplete integration, and no inline suggestions. It doesn’t compete with Copilot for the completion popup or interfere with Copilot’s inference. You can have both active simultaneously.
If you’re using Copilot in VS Code, run Canopy via:
- VS Code + Continue — an AI chat panel that supports MCP
- Claude Code (separate terminal) — run alongside VS Code
- Cursor (separate window) — Cursor supports both Copilot and MCP simultaneously
- The shell — run
canopy answerwith the same question
Copilot Chat vs. Canopy answers
Section titled “Copilot Chat vs. Canopy answers”Copilot Chat can answer questions about your codebase from its own context. For questions like “what files import this component?” it works from a probabilistic model of the code, not a precise dependency graph.
Canopy answers the same question from a prebuilt structural index — a deterministic graph traversal. If you need precision (“give me every file that will break if I delete this export”), ask canopy_answer. If you want a rough sketch or a natural-language explanation, Copilot Chat is faster.
The two compose: get the precise list from Canopy, then hand it to your assistant for a refactoring plan.
Workflow example
Section titled “Workflow example”Scenario: Rename createPayment to initiatePayment in src/lib/payments.ts.
Step 1 — Canopy analysis (via your assistant or the shell):
canopy answer "what depends on `src/lib/payments.ts`?"canopy answer "what tests cover `src/lib/payments.ts`?"Step 2 — Plan: With the dependent list in hand, decide the safest order to update call sites atomically.
Step 3 — Implement with Copilot: Open each dependent file. Use Copilot’s completions to make the rename changes quickly; it learns from the pattern you establish in earlier files.
Step 4 — Confirm:
canopy answer "what calls `initiatePayment`?"Every former call site should now appear under the new name. In CI, canopy ci --fail-on-p0 (Pro tier) catches broken imports the rename left behind.
Common pitfalls
Section titled “Common pitfalls”Asking Copilot Chat for dependency information
Copilot Chat’s answers about “what imports this file” are approximate — it works from training data and open files, not a real-time graph. For accurate dependents before a breaking change, ask canopy_answer: “what depends on src/lib/payments.ts?”
Running canopy serve while Copilot is active
No conflict. canopy serve is a background MCP process — it doesn’t interact with VS Code’s extension layer or affect Copilot.