canvas-sync — Claude Code skill: keep the team canvas in git
Pulls and commits canvas state through git so every teammate works from the same product knowledge. Meant for the first and last minutes of a session.
npx skills add haabe/mycelium --skill canvas-sync -a claude-codeWhat canvas-sync does
Four triggers are covered: session start, session end, a team talk that shifted product direction, and conflicts from parallel edits. At the start you run git pull origin main, then /mycelium:diamond-assess reports what moved. At the end you stage .claude/canvas/, .claude/diamonds/, .claude/harness/decision-log.md and .claude/memory/, then commit with a short note on what changed and why.
Conflicts are handled only partly by tooling. Different canvas files merge cleanly. Different sections of one file usually do too. When the same field collides, the skill tells the team to let whoever has more evidence win — a manual habit, not an automated merge. Nothing weighs that evidence for you. A /canvas-merge procedure would read both versions, compare provenance depth on overlapping entries and recommend a resolution; it is not built yet. If you cannot agree, talk it through and log the call.
This one assumes the Mycelium framework. Run it standalone and you skip the canvas state, theory gates and harness behaviour it relies on. The framework installs with /plugin install mycelium@haabe-mycelium. The thinking behind the skill is GitOps applied to product knowledge: git is the source of truth, changes are declarative YAML, everything moves through version control and review.
What it helps with
- pull the current canvas at session start
- commit canvas edits with a written reason
- see what changed in the product after a team talk
- settle a canvas conflict from parallel work
- keep the team's product knowledge in one repo
Example prompts for the agent
- Sync the canvas: run
git pull origin mainand tell me what changed - Commit my canvas edits before I close the session
- My colleague and I both edited the same canvas field — help me resolve it
How to install canvas-sync
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill canvas-sync -a claude-code2Manually: put the files in place
~/.claude/skills/canvas-sync/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/canvas-sync/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill canvas-sync -a codex2Manually: put the files in place
.agents/skills/canvas-sync/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill canvas-sync -a cursor2Manually: put the files in place
.cursor/skills/canvas-sync/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install haabe/mycelium canvas-sync2Manually: put the files in place
.github/skills/canvas-sync/SKILL.md1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill canvas-sync -a gemini-cli2Platform CLI
gemini skills install https://github.com/haabe/mycelium --path plugins/mycelium/skills/canvas-syncManually: put the files in place
.devin/skills/canvas-sync/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add haabe/mycelium --skill canvas-sync -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about canvas-sync
How do I install canvas-sync in Claude Code?
Run npx skills add haabe/mycelium --skill canvas-sync -a claude-code. The skill lands at ~/.claude/skills/canvas-sync/SKILL.md.
What does canvas-sync do?
It keeps the canvas in sync across sessions and teammates via git: it pulls the latest state and commits your changes when the work is done.
Does canvas-sync work without Mycelium?
No, it is built to run inside the framework. On its own it loses the canvas state, theory gates and harness behaviour it depends on. Install Mycelium with /plugin install mycelium@haabe-mycelium.
Source text
SKILL.md · MIT
--- name: canvas-sync description: "Synchronize canvas state across team sessions via git. Ensures all team members see the same product knowledge." metadata: instruction_budget: "8" framework_dependency: "mycelium" framework_dependency_note: "This skill is designed to run within the Mycelium framework (https://github.com/haabe/mycelium). Standalone use will skip the canvas state, theory gates, and harness behavior the skill assumes. Install: /plugin install mycelium@haabe-mycelium." --- # Canvas Sync ## When to Use - Starting a new session (pull latest canvas) - Ending a session (commit canvas changes) - After team discussion that changes product direction - When canvas conflicts arise from parallel work ## Workflow ### Pull Latest ``` git pull origin main ``` Then run `/mycelium:diamond-assess` to see what changed. ### Commit Changes ``` git add .claude/canvas/ .claude/diamonds/ .claude/harness/decision-log.md .claude/memory/ git commit -m "canvas: [brief description of what changed and why]" ``` ### Conflict Resolution - Different canvas files: auto-merges (no conflict) - Same file, different sections: usually auto-merges - Same field conflicting: the person with more evidence wins — a *manual* resolution heuristic for the team, not an automated merge. No tooling evaluates evidence weight; `Gated by:` a `/canvas-merge` procedure (read both versions, compare provenance depth on overlapping entries, recommend) — not yet built. - When uncertain: discuss as team, log decision ### GitOps Principle The canvas system IS GitOps for product knowledge — git is the single source of truth, changes are declarative (YAML), and updates flow through version control with review. For infrastructure GitOps (ArgoCD, Flux), see JiT tooling detection for Kubernetes/infrastructure-as-code projects.
© haabe · MIT · haabe/mycelium