Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add kagan-sh/kagan --skill canvasgit clone --depth 1 https://github.com/kagan-sh/kaganWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/kagan-sh/kagan/canvas)<a href="https://agentmods.dev/skills/kagan-sh/kagan/canvas"><img src="https://agentmods.dev/badge/skills/kagan-sh/kagan/canvas/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/kagan-sh/kagan/canvas"><img src="https://agentmods.dev/badge/skills/kagan-sh/kagan/canvas.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00033 | $0.01956 |
| Opus 5.5 | $0.00013 | $0.00782 |
| Sonnet 5.5 | $0.00007 | $0.00391 |
| Haiku 4.5 | $0.00003 | $0.00196 |
Grade A, and why
canvas scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 144 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Canvas
The Canvas plugin gives the user a drawing panel next to the thread. The user
draws boxes, arrows, text, and freehand strokes. You see the same drawing as
text through kg canvas show <name> or the canvas_read tool. You change it
through canvas_edit. Every change shows in the panel at once.
Model
- One canvas has a name. The user picks it in the panel. A message that shares a
canvas names it and gives the command to read it:
kg canvas show my-project. - Coordinates range from −1,000,000 to 1,000,000, negative included.
ygrows down. The user pans and zooms, and Zoom to fit (Shift+1) puts the whole drawing on screen, so nothing gets lost. canvas_readstarts with a summary line saying how many elements there are and which area they use. Place new work beside that area, not on top of it. On an empty canvas, draw near0,0.- Each element has a stable id:
b1box,a2arrow,t3text,p4freehand path. Ids only increase. A deleted id is never reused. - An arrow with
fromandto(two box ids) sticks to those boxes. It routes on right angles and follows the boxes. Delete a box and its arrows go too. headssays which ends carry an arrowhead:end(the default),start,both, ornone. An arrow withheads: "none"is a plain line, andcanvas_readprints it asline.- Colors:
ink accent muted working needs failed. The active Workbench theme resolves them; omitted color isink. Theme roles may share a color, so use labels as well.
Draw a readable diagram
The panel clips a label to the box. A long sentence in a small box is lost. Keep the picture small and sparse.
- A box label is a noun phrase:
"web","coach-tools","blocked". Not a sentence. Not a paragraph. - Size the box to the label:
w = max(200, chars * 10 + 24),h = 80. A wrapped label can useh = 80 + 20 * extra lines. - Leave a gap of 80 between boxes. Align a row on one
y. Align a column on onex. - Bind every arrow with
fromandto, and setx1,y1,x2, andy2to0. Do not compute endpoints. The panel also binds an arrow the person draws when the pointer ends on or just beside a box. - Put a title or a note in
textabove or beside the row. Never put a title inside a large empty box that other boxes sit in: the title lands in the middle and covers them. - One color per lane or per row. Skip an arrow label unless it names the
relation in a few characters (
"GraphQL","blocks"). - Keep the whole diagram inside about 1600 by 1200 so it fits the panel at one glance.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 144 lines · 33 tokens per session scan A f1519bc14352
canvas is a skill published in the GitHub repository kagan-sh/kagan (106 stars, last pushed 2d ago), licensed MIT. It adds 33 tokens to every session and 1,956 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-15.
Other skills, from other repositories
symphony-skill
Single Symphony operator router for Kanban tickets, service/TUI runs, WORKFLOW.md and prompt config, lane customization, delegation, production-ready app delivery planning, OneShot runs, repo and monorepo bootstrap, and worker failure triage.
development
An index of programming guidance for Python, Go, Rust, TypeScript, Java, C++, and shell scripting.
bionic-decision-engine
Unified mathematical arbitrator for all resource allocation decisions — money, time, energy, relationships. Absorbs 46 decision protocols + 24 strategy protocols into one dense engine.
video-perception
Use when the user mentions a video file (.mp4, .mov, .avi, .mkv, .webm), a YouTube URL, asks to watch/analyze/review a video, or references video content in conversation.
macos-tools
Native macOS integrations via AppleScript. No API keys needed — works on any Mac.
sector-analysis
Analyze US market sectors and identify rotation opportunities.