create-canvas-app

create-canvas-app is a skill for Claude Code, Codex from jongio/skills. It costs 132 tokens per session (6,109 once invoked), scanned A, original, MIT.

A toolkit for building interactive side-panel interfaces that a GitHub Copilot agent can open and control. It supports canvases such as dashboards, editors, trackers, boards, and document previews.

In plain words
What is it for?
Scaffolding and improving interactive Copilot canvas extensions with shared state, live updates, lists, forms, and other visual workflows.
Why use it?
It avoids common problems in hand-built interfaces, such as lost input, disconnected state between the agent and user, host-theme styling issues, and inconsistent icons.

Skill for Claude CodeCodex

Part of the jongio-skills plugin — 8 skills shipped together

Install

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.

agentmods
npx agentmods add skills/jongio/skills/create-canvas-app
Any agent
npx skills add jongio/skills --skill create-canvas-app
Clone the repo
git clone --depth 1 https://github.com/jongio/skills

Made for: Claude Code, Codex.

Or install jongio-skills, the plugin that ships this one along with the rest of its 8 skills.

Wrote 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.

agentmods badge for create-canvas-app

README.md
[![agentmods](https://agentmods.dev/badge/skills/jongio/skills/create-canvas-app.svg)](https://agentmods.dev/skills/jongio/skills/create-canvas-app)
Your own site
<a href="https://agentmods.dev/skills/jongio/skills/create-canvas-app"><img src="https://agentmods.dev/badge/skills/jongio/skills/create-canvas-app.svg" alt="Measured on agentmods" height="20"></a>
Per session 132 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 6,109 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.00132 $0.06109
Opus 5 $0.00066 $0.03054
Sonnet 5 $0.00026 $0.01222
Haiku 4.5 $0.00013 $0.00611

Measured 4d ago against content hash 278486df30a2, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

create-canvas-app 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 4d ago.

The scan reads SKILL.md. This mod also ships 40 executable files (kit/client.mjs, kit/deeplinks.mjs, kit/format.mjs, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

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.

skills/create-canvas-app/SKILL.md · 424 lines

How it starts

The opening of the file, as written. The whole thing — 424 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Create Canvas App

A batteries-included way to build Copilot App canvas extensions. It exists because hand-rolled canvases keep hitting the same walls: an innerHTML repaint loop that eats keystrokes, state that lives only in one panel, ad-hoc styling that ignores the host theme, and inconsistent icons. The kit fixes all four.

What a canvas is (and when to build one)

A canvas is an interactive surface the agent opens in a side panel via open_canvas. Both the agent and the user act on the same state through the same action handlers. Reach for a canvas when chat text or a diff isn't enough: live dashboards, editors, spreadsheets, trackers, kanban/board views, document previews, tool-specific workflows.

If the user just needs a non-visual agent tool, build a normal extension tool instead — not a canvas.

Rendering tier — decide first

Tier Use when How
Static HTML string Read-only or near-static content; no inputs to protect The runtime's vanilla scaffold (extensions_manage scaffold kind:canvas).
Preact + htm + this kit Anything interactive: inputs, live updates, lists, forms, shared state This kit. Default choice for real canvases.

The single most important reason to use the kit: Preact diffs the DOM, so a live state push from the agent does not clobber focus, caret position, or half-typed text in an input. The innerHTML = ... pattern most early canvases use repaints the whole tree and loses keystrokes on every push. Don't do that.

The model (read this before coding)

extension.mjs   ── the ONLY file that imports the Copilot SDK (thin adapter; also wires host AI)
canvas.mjs      ── your canvas: id, schema, state load/save, action handlers (SDK-free)
canvas-kit/     ── the kit (copied in verbatim; do not edit)
web/index.html  ── shell: loads /kit/theme.css and ./app.mjs
web/app.mjs     ── your Preact view
  • State is shared and durable. It's keyed by a domain id resolved from the open input (resolveDomainId), not by instanceId — open the same domain in two panels and they show the same data. Persistence goes through userStore(extName, file)$COPILOT_HOME/extensions/<name>/artifacts/<domain>.json. Two more tiers exist in kit/storage.mjs for non-durable/scoped state: sessionStore(sessionId, extName, file) (per-session scratch, discarded with the session) and workspaceStore(workspacePath, file) (rooted at the session workspace). All three write atomically (temp + rename) and serialize concurrent saves to the same file, so a racing agent + UI save can't corrupt or EPERM the durable file.
  • Shared, multiplayer state (optional). For a board multiple people edit, swap the local tier for githubStore({ owner, repo, path }) from kit/github-store.mjs: it persists the same JSON to a file in a (private) repo via the GitHub Contents API, so every collaborator with push access edits ONE document — GitHub is both the store and the access control. Wire it as loadState/saveState, and add syncState: () => store.poll() + syncIntervalMs so the runtime polls for other people's edits (cheap ETag 304 when unchanged) and adopts them live — but only while a panel is being viewed. Writes are optimistic-locked by blob SHA (a conflicting commit re-reads + retries; last-writer-wins by default, or pass a merge(remote, mine)). Token comes from GH_TOKEN/GITHUB_TOKEN or gh auth token and is only ever sent as an Authorization header.
  • Agent and UI share handlers. An action invoked by the agent and the same action invoked from a button run the identical handler and produce the identical state mutation. Write the logic once, in canvas.mjs.
  • Live updates are automatic. The kit serves GET /state, GET /events (SSE), and POST /action. mountCanvas wires them up; every state change fans out to all open panels.
  • server.mjs is SDK-free so the whole runtime is testable with plain Node HTTP (see test/http.test.mjs). Keep SDK calls in extension.mjs only.

Read the full file on GitHub · 424 lines

Files

What ships with it

57 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

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.

  1. 4d ago First seen · 424 lines · 132 tokens per session scan A 278486df30a2

Subscribe to this mod's changes

create-canvas-app is a skill published in the GitHub repository jongio/skills (14 stars, last pushed today), licensed MIT. It adds 132 tokens to every session and 6,109 once invoked, about $0.0007 per session on Opus 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-08-31.

Related

Other skills, from other repositories

html-artifacts

Create or revise polished, standalone HTML documents for direct human reading. Use for technical documents, proposals, reports, specifications, guides, and review artifacts when the user wants a clear, attractive HTML deliverable.

SNIKO/agent-skills · 45 tokens

competitive-exec-brief

Creates an executive-ready competitive analysis brief with a 1-slide PPTX summary for leadership presentations. Use when: competitive brief, exec competitive summary, competitive slide, competitive pptx, board competitive update, leadership competitive briefing.

varunk130/ai-gtm-skill-library · 50 tokens

asvs-audit

Role: You are an Application Security Expert. Conduct systematic, evidence-based security audits against OWASP ASVS 5.0 Level 1 requirements using the bundled CSV as the canonical source.

Dawn-Technology/aicelerate · 63 tokens

write-prd

Create a PRD and user stories through user interview, codebase exploration, and component design. Use when user wants to write a PRD, create a product requirements document, user stories or plan a new feature.

Dawn-Technology/aicelerate · 47 tokens

external-context

Invoke parallel document-specialist agents for external web searches and documentation lookup.

RobinNorberg/oh-my-copilot · 16 tokens

instrument-data-to-allotrope

Convert laboratory instrument output files (PDF, CSV, Excel, TXT) to Allotrope Simple Model (ASM) JSON format or flattened 2D CSV. Use this skill when scientists need to standardize instrument data for LIMS systems, data lakes, or downstream analysis. Supports auto-detection of instrument types. Outputs include full…

anthropics/knowledge-work-plugins · 123 tokens