Skill Canvas är en whiteboard‑liknande canvas‑app för att visuellt designa AI‑skills med text‑först‑tekniker som Markdown, Draw.io, Mermaid och HTML. Den gör det möjligt att kombinera diagram, dokumentation och exempel i en och samma yta för att snabbt skissa, iterera och dela ko
SaferSkills independently audited skill-canvas (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Skill Canvas
En PHP-baserad whiteboard-app för team som vill paketera kompetens till tydliga, visuella skills. Bygg och redigera storyboards med Markdown, Mermaid-diagram, ArchiMate 4 (ArchiCode), Draw.io-ritningar, BPMN-processdiagram, bilder (inkl. inbyggd målare), labels, annotations (text+pil), notes, HTML/iframe, PromptBook (chattkort med LLM) och relationer mellan moduler, och exportera allt som en .zip med SKILL.md och YAML frontmatter.
Se CHANGELOG.md för senaste ändringar.
Kompatibel med Claude Skills-formatet — name och description är obligatoriska. name används som canvas-titel i verktygsraden (ingen separat title i metadata).
Skill Canvas paketerar allt i en .zip-fil med SKILL.md i centrum, så samma innehåll kan användas direkt av agentisk AI utan efterbehandling. Samtidigt får team en snygg visuell whiteboard-upplevelse för att bygga, granska och vidareutveckla samma skill tillsammans.
Resultatet är ett gemensamt arbetsformat där människor och AI samarbetar i samma moduluppbyggda struktur: visuellt på canvasen och maskinläsbart i SKILL.md-paketeringen.
Du kan klistra in en bild direkt i Skill Canvas, rita eller redigera den i målaren, och allt följer automatiskt med i .zip-filen vid export. Markdown-kort visar inbäddade bilder från zip vid import. Det gör att samma material kan öppnas av en kollega, delas vidare i teamet eller användas direkt av AI och agentiska AI-skills.
All paketering styrs via SKILL.md-standarden från Anthropic (Claude AI Skills), vilket ger ett tydligt och portabelt format för både människor och AI.
Du får en inbyggd markdown-editor (Monaco), DOCX-import till Markdown med bilder, Mermaid-stöd, Draw.io-integration, BPMN-editor (bpmn-js) och en enkel paint-editor för bildnoder.
Skill Canvas är ett open source-projekt och vi välkomnar bidrag från både utvecklare, designers och AI-praktiker.
Se CONTRIBUTING.md för riktlinjer kring issues, pull requests och rekommenderat arbetssätt.
php -S localhost:8080 i projektroten) och öppna index.php.zip eller .skill-fil (samma format), dra den till fönstret, eller välj Ny tom canvas via öppna-menynname, description, …) vid ny canvas — standardvärden fylls i automatiskt (standardnamn t.ex. my-skill-2026-05-31 med dagens datum).zip (eller Ctrl+S) — eller som .png för en bild av canvasenKörs som en PHP-webbapp och gör det enkelt att ta en idé till en delbar, visuellt förankrad skill.
Legacy:html/skill-canvas.htmlär en äldre monolitisk version. Den aktiva appen ärindex.phpmed modulär PHP/JS-struktur. Fristående verktyg (html/drawio-skill-editor.html,html/bpmn-skill-editor.html,html/paint-skill-editor.html) kan användas utan canvas; embed från canvas går via respektive.php-editor.
| Element | Funktion |
|---|---|
Titel (name) | Klicka för att öppna skill-metadata. Beskrivningen (description) visas som underrad. |
| Öppna ▾ | Klick = filväljare (.zip / .skill). Pil = meny: Öppna .zip / .skill / Ny tom canvas |
| Exportera ▾ | Spara .zip (SKILL.md + filer) eller Spara .png (bild av alla objekt) |
| Canvas | Öppna skill-metadata (inkl. Skill-träd — filöversikt i paketet) |
| Centrera | Zooma ut så att alla noder syns |
| Tema | Växla ljust/mörkt läge |
Exportfiler namnges automatiskt (skill-namn + tidsstämpel):
my-skill-2026-05-31_2026-05-31_14.30.45.zip
my-skill-2026-05-31_2026-05-31_14.30.45.pngNy canvas får som standard name med datum-suffix (my-skill-YYYY-MM-DD). Styr basnamn och suffix i config/defaults.php (nameBase, nameDateSuffix).
| Åtgärd | Hur |
|---|---|
| Panorera | Mellanslag + dra eller mittenmusknapp |
| Zooma | Scrollhjul |
| Centrera allt | Centrera |
| Fokusera en nod | Dubbelklick på handtaget, eller fokus-ikonen (ej Notes) |
| Markera nod | Klick |
| Flytta nod | Dra i handtaget (Markdown, Mermaid, ArchiCode, Bild, Draw.io, BPMN, HTML, PromptBook, Annotation) — eller direkt på ytan (Label, Note) |
| Ändra storlek | Resize-hörn nere till höger (Note, Annotation, HTML: bredd och höjd; övriga: bredd) |
| Kontextmeny | Högerklick på nod — inkl. Spara som .png (enskilt kort) och Flytta längst fram (z-ordning på canvas och exportordning) |
| Ta bort markerad | Delete / Backspace |
| Duplicera markerad | Ctrl+D |
| Spara .zip | Ctrl+S |
Handtaget på Markdown, Mermaid, ArchiCode, Bild, Draw.io, BPMN, HTML och PromptBook ligger ovanför kortet (trycker inte ner innehållet vid hover). En osynlig hover-brygga gör det lättare att nå handtaget utan att träffa noden.
På Markdown-kort med fast höjd scrollar mushjulet innehållet i kortet i stället för att zooma canvas.
Full Markdown-support: rubriker, listor, tabeller, kodblock, citat, länkar. Innehåll sparas som .md under nodes/. Bilder i Markdown (relativa sökvägar i zip) visas på kortet efter import. Standardbredd på nya kort: 720 px (läsbredd). Valfri fast höjd (px) ger scroll i kortet vid längre innehåll.
html/markdown.php) i iframe med postMessage-sparande.html/docx-to-skill.php); konverterad Markdown (med bilder i zip-minnet) kan skickas tillbaka till editorn.Diagram med Mermaid-syntax. Kod sparas som .mmd under diagrams/.
html/mermaid-editor.php): Monaco med Mermaid-syntax, live-förhandsvisning, exempeldiagram (flöde, sekvens, Gantt, C4 m.m.), ArchiMate 4 (C260)-exempel i egen dropdown (domänöversikt + sju domäner, referens), zoom/pan, kopiera kod, PNG/SVG-export. Tema följer Skill Canvas (ljust/mörkt).ArchiMate 4-diagram med ArchiCode-syntax. Källkod sparas som .ac under diagrams/.
html/archicode.php) med Monaco, live diagram, exempel-dropdown och Spara till kortarchicode.js / archicode.css) laddas från CDN vid behovRitningar via inbäddad diagrams.net i fullskärm. XML sparas som .drawio under diagrams/; kortet visar en PNG-förhandsvisning.
Processdiagram med bpmn-js i fullskärm. XML sparas som .bpmn under diagrams/; kortet visar en PNG-förhandsvisning — samma mönster som Draw.io.
html/bpmn-skill-editor.php) och laddar sparad XML.bpmn + PNG till zip och uppdaterar kortethtml/bpmn-skill-editor.htmlUppladdning, extern URL eller Ctrl+V (klistra in från urklipp). Lokala bilder sparas under images/ med tidsstämpel i filnamnet (YYYY-MM-DD_HH.mm.ss.png). Caption och alt-text stöds.
html/paint-skill-editor.php): penna, pensel, former, fyll, text, suddgummi, pipett, ångra/gör om. Tom canvas vid ny bild, befintlig bild laddas vid redigering. Spara till kort exporterar PNG tillbaka till noden.Fri text direkt på canvas — ingen kortyta. Teckenstorlek och färg väljs i modal. Handtaget (LBL + Redigera/Fokusera/Ta bort) visas ovanför texten vid hover/markering — som Markdown och Bild — så länkar i texten inte täcks.
[Hej](https://…) visas på canvas som Hej; full syntax [Hej](https://…) redigeras i modalenhttps://… blir klickbar länk (visas som hela URL:en)Text med pil (SVG) för att förklara eller peka ut delar av canvasen. Modal med live-förhandsvisning — klicka för att placera pilspetsen. Välj riktning (↗↖↘↙), pilform (böjd, rak, swoosh, skiss), färg, typsnitt (Caveat/Kalam m.fl.), textstorlek och pilens längd. Transparent på canvas; justera yta med resize-hörnet. Handtaget döljs tills hover/markering.
Post-it-liknande kort med inline-redigering (contenteditable). Ingen redigeringsmodal — skriv direkt på kortet.
Bädda in webbinnehåll på canvas via iframe — samma kortlayout oavsett källa. Lägg till via ⋯ → HTML / iframe.
Modalen har två flikar:
| Flik | Innehåll |
|---|---|
| iFrame | Extern Website URL (standard https://blog.yllemo.com) |
| HTML | Egen HTML-kod som sparas som .html i paketet; du väljer filnamn (t.ex. min-sida → html/min-sida.html) |
Gemensamt för båda: höjd och kortbredd på canvas, samt live iframe-kod (hopfällbar) med knapp Kopiera iframe-kod.
X-Frame-Options) — använd då länken eller HTML-fliken med egen fil# Extern URL
- id: n008
type: html
source: url
url: https://blog.yllemo.com
width: 640
height: 400
iframeWidth: 100%
# Intern HTML-fil i zip
- id: n009
type: html
source: file
file: html/min-sida.html
width: 640
height: 400
iframeWidth: 100%Chattkort med en konfigurerbar prompt — anslut till OpenAI, LM Studio eller Ollama. LLM-inställningar sparas i webbläsarens localStorage (exporteras inte i zip); nodens prompt och chatt sparas i promptbook/{id}.json.
html/promptbook.php) för systemprompt, variabler och inställningarapi/llm-proxy.phpGränssnittet är anpassat för telefon och surfplatta utan att ändra canvas-modellen:
Fullskärmseditorer (Markdown, Mermaid, ArchiCode, Draw.io, BPMN, PromptBook, målare) har redan viewport och egna responsiva verktygsrader. Diagram-editorerna visar diskret credit med länk till respektive open source-projekt i headern.
Knappen Inställningar (bredvid Tema) öppnar en panel med app-preferenser. Val sparas i localStorage (samma webbläsare).
--canvas-bg och --grid så ljust/mörkt tema fungerar automatiskt.Nya inställningar läggs i config/settings.php (schema och standardvärden). Rendering sker via includes/settings.php; beteende i js/settings.js. Vid ändring skickas sc-settings-change (som sc-theme-change).
Knappen Canvas (eller titeln i headern) öppnar skill-metadata: name, description, author, version, tags.
Längst ner till vänster i samma modal: Skill-träd — visar alla filer i paketet (samma innehåll som exporteras till zip), storlek, och vilka som är kopplade till noder. SKILL.md markeras som genererad vid export om den saknas i minnet.
Flera moduler använder overlay med iframe och postMessage-protokoll:
| Modul | URL | Meddelanden (urval) |
|---|---|---|
| Markdown | html/markdown.php | sc-markdown-ready, sc-markdown-init, sc-markdown-save |
| Mermaid | html/mermaid-editor.php | sc-mermaid-ready, sc-mermaid-init, sc-mermaid-save |
| ArchiCode | html/archicode.php | sc-archicode-ready, sc-archicode-init, sc-archicode-save |
| Draw.io | html/drawio-skill-editor.php | sc-drawio-ready, sc-drawio-init, sc-drawio-save |
| BPMN | html/bpmn-skill-editor.php | sc-bpmn-ready, sc-bpmn-init, sc-bpmn-save |
| Bild (målare) | html/paint-skill-editor.php | sc-paint-ready, sc-paint-init, sc-paint-save |
| PromptBook | html/promptbook.php | sc-promptbook-ready, sc-promptbook-init, sc-promptbook-save |
DOCX-import använder html/docx-to-skill.php och js/docx-import.js med samma overlay-mönster.
Fullskärmseditorer för Mermaid, Draw.io och BPMN visar en diskret pill-länk högst upp till respektive officiella projekt (gemensam stil i html/css/editor-credit.css):
| Editor | Länk |
|---|---|
| Mermaid | mermaid.js.org, mermaid.live |
| Draw.io | diagrams.net |
| BPMN | bpmn.io |
skill-canvas/
├── index.php ← huvudapp
├── app.js ← canvas, zoom, export, noder, markdown-bilder
├── style.css
├── favicon.svg
├── config/
│ ├── app.php ← apptitel, språk, tema, favicon
│ ├── defaults.php ← standardvärden för skill, canvas, nodtyper, moduler
│ ├── settings.php ← app-inställningar (schema, standardvärden)
│ └── add-menu.php ← ⋯-menyn: HTML, BPMN, PromptBook, ArchiCode
├── includes/ ← bootstrap, modul-laddare, settings/add-menu, head-meta, hjälpfunktioner
├── modules/ ← PHP: modal-HTML per nodtyp
│ ├── markdown.php
│ ├── mermaid.php
│ ├── archicode.php
│ ├── promptbook.php
│ ├── bild.php
│ ├── drawio.php
│ ├── bpmn.php
│ ├── label.php
│ ├── annotation.php
│ ├── notes.php
│ └── html.php
├── js/
│ ├── modal.js
│ ├── add-menu.js ← ⋯-meny i lägg-till-panelen
│ ├── skill-import.js ← zip/.skill-validering + fallback-import
│ ├── skill-tree.js ← filträd i skill-metadata-modalen
│ ├── connections.js ← relationer mellan moduler (SVG)
│ ├── docx-import.js
│ └── modules/ ← JS: add/edit/render per nodtyp
├── api/
│ ├── modal.php ← returnerar modal-HTML som JSON
│ └── llm-proxy.php ← proxy för lokala LLM (PromptBook)
└── html/
├── markdown.php ← Monaco fullskärm
├── mermaid-editor.php ← Mermaid Monaco + live preview + AM4-exempel
├── archicode.php ← ArchiCode Monaco + live diagram
├── promptbook.php ← PromptBook chatt + inställningar
├── drawio-skill-editor.php
├── bpmn-skill-editor.php
├── bpmn-skill-editor.html ← fristående BPMN → SKILL.md / ZIP
├── paint-skill-editor.php
├── docx-to-skill.php
├── archicode.html ← fristående ArchiCode-demo (legacy)
├── js/
│ ├── drawio-embed.js
│ ├── bpmn-embed.js
│ ├── paint-editor.js
│ ├── paint-embed.js
│ └── docx-converter.js
└── css/
├── editor-credit.css
└── paint-editor.cssNya nodtyper läggs till som par av modules/<slug>.php + js/modules/<slug>.js, registrerade automatiskt via ModuleRegistry och includes/module-loader.php.
Varje .zip eller .skill (samma format) bör innehålla SKILL.md med YAML frontmatter och en nodes-array för full Skill Canvas-layout. Övriga filer refereras via file- (och vid Draw.io/BPMN även previewFile-) fält i noderna.
Import: Om frontmatter saknas eller inte har nodes importeras filen ändå — SKILL.md och övriga .md blir markdown-noder, .mmd mermaid, .ac archicode, .drawio draw.io, .bpmn BPMN (med matchande .png som förhandsbild om den finns), .html html-noder (intern fil), .json under promptbook/ promptbook-noder, bilder blir bild-noder. Metadata från giltig YAML (namn, beskrivning m.m.) används när den går att läsa.
---
name: my-skill-2026-05-31
description: Describe when an AI agent should activate this skill. Agentic systems compare the user's request to this text to decide if the skill is relevant—list concrete situations, topics, or example questions (e.g. "Use when the user asks about our onboarding process or needs a visual overview of X"). The canvas holds the knowledge; description is the trigger.
author: ''
version: '1.0'
tags:
- klos
- bas
nodes:
# ... se nodschema nedan
edges:
# valfritt — relationer mellan moduler (ej Notes)
- id: e001
from: n001
to: n002
label: "läser"
style: curve
strokeWidth: 2
color: "#0077bc"
markerEnd: arrow
multiplicityStart: "1"
multiplicityEnd: "0..*"
---| Fält | Typ | Beskrivning |
|---|---|---|
name | sträng | Obligatorisk. Skill-id, canvas-titel och bas för exportfilnamn |
description | sträng | Obligatorisk. När/hur skillen ska användas |
author | sträng | Valfri |
version | sträng | Valfri, standard 1.0 |
tags | lista | Valfria sökbara taggar |
edges | lista | Valfria kopplingar mellan moduler (se nedan) |
edges)Kopplingar ritas som SVG-linjer bakom noderna. Skapa via länk-ikonen i modulens handtag (dra till en annan modul). Notes kan varken kopplas från eller till. Klicka på en linje för att redigera text, utseende (böjd/rak/streckad), tjocklek, färg och ändpunkter (pil, diamant, cirkel eller ingen).
| Fält | Typ | Beskrivning |
|---|---|---|
id | sträng | Unikt ID |
from, to | sträng | Käll- och mål-nod (id) |
label | sträng | Valfri text på linjen |
style | sträng | curve (standard), straight, dashed |
strokeWidth | heltal | Linjebredd i px, standard 2 |
color | sträng | Hex-färg, standard #0077bc |
markerStart | sträng | none (standard), arrow, diamond, circle — vid källmodulen |
markerEnd | sträng | arrow (standard), none, diamond, circle — vid målmodulen |
multiplicityStart | sträng | Valfri kardinalitet vid källan, t.ex. 1, 0..1 |
multiplicityEnd | sträng | Valfri kardinalitet vid målet, t.ex. 1..*, 0..* |
Äldre filer med arrowEnd: false tolkas som markerEnd: none. Multiplicitet visas vid linjens ändpunkter (ArchiMate 4-stil). Förifyllda förslag i dialogen: 1, 0..1, 1..1, 1..*, 0..*, *, n, n..m — fri text stöds också.
Standardvärden i config/defaults.php under edges.
Vid import av äldre zip-filer med title (utan name) används title som name.
| Fält | Typ | Beskrivning | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | sträng | Unikt ID, genereras automatiskt | ||||||||||
type | sträng | markdown \ | mermaid \ | archicode \ | drawio \ | bpmn \ | image \ | label \ | annotation \ | note \ | html \ | promptbook |
x, y | heltal | Position i px | ||||||||||
width | heltal | Bredd i px | ||||||||||
height | heltal | Höjd i px (Note, Annotation, HTML; Markdown vid fast höjd) | ||||||||||
title | sträng | Valfri rubrik i nodhandtaget (Markdown, Mermaid, ArchiCode, Bild, Draw.io, BPMN, HTML, PromptBook) |
- id: n001
type: markdown
x: 80
y: 200
width: 720
title: "Visas i handtaget"
file: nodes/n001.md- id: n002
type: mermaid
x: 540
y: 200
width: 500
title: "Systemlandskap"
file: diagrams/n002.mmd- id: n011
type: archicode
x: 100
y: 180
width: 520
title: "Orderflöde"
file: diagrams/n011.ac- id: n007
type: drawio
x: 100
y: 180
width: 480
title: "Processflöde"
file: diagrams/n007.drawio
previewFile: diagrams/n007.png- id: n010
type: bpmn
x: 100
y: 180
width: 480
title: "Orderprocess"
file: diagrams/n010.bpmn
previewFile: diagrams/n010.png- id: n003
type: image
x: 80
y: 600
width: 400
file: images/2026-05-31_14.30.45.png
caption: "Bildtext"
alt: "Beskrivning"- id: n004
type: label
x: 80
y: 60
content: "GT Domänarkitektur"
fontSize: 38
color: "#0077bc"- id: n005
type: annotation
x: 120
y: 300
width: 320
height: 160
content: "Snabba idéer"
tipX: 280
tipY: 130
dir: ne
arrowStyle: curve
arrowLen: 90
rotation: 0
color: "#F5A623"
fontSize: 26
strokeWidth: 2.5
fontFamily: "'Caveat', cursive"- id: n006
type: note
x: 200
y: 400
width: 220
height: 160
color: "#fff9a8"
content: "Skriv här…"Se nodtyper ovan för flikarna i modalen. I YAML sparas antingen url (extern) eller file (intern .html).
- id: n008
type: html
source: url
url: https://blog.yllemo.com
width: 640
height: 400
iframeWidth: 100%
title: "Min blogg"
- id: n009
type: html
source: file
file: html/min-sida.html
width: 640
height: 400
iframeWidth: 100%my-skill-2026-05-31.zip
├── SKILL.md
├── nodes/
│ └── n001.md
├── html/
│ └── min-sida.html
├── diagrams/
│ ├── n002.mmd
│ ├── n011.ac
│ ├── n007.drawio
│ ├── n007.png
│ ├── n010.bpmn
│ └── n010.png
├── promptbook/
│ └── n012.json
└── images/
└── 2026-05-31_14.30.45.pngMappnamn följer konventioner i config/defaults.php men styrs i praktiken av file-sökvägar i noderna.
Standardvärden i config/defaults.php kan justeras utan kodändring:
nameBase (t.ex. my-skill), nameDateSuffix (lägger till -YYYY-MM-DD på ny canvas), description, author, version, tagsApptitel, språk, favicon och SEO-meta (description, keywords, författare): config/app.php.
index.php sätter SC_APP.basePath utifrån webbplatsens sökväg så att editor-iframe:ar fungerar även om appen ligger i en undermapp.
Ljust och mörkt tema. Favicon: favicon.svg (konfigurerbar i config/app.php).
CDN-bibliotek: Mermaid 11, marked, JSZip, js-yaml, html2canvas (PNG-export), Monaco Editor (markdown fullskärm), bpmn-js 18 (BPMN fullskärm), ArchiCode (yllemo/ArchiCode via jsDelivr).
Externa tjänster vid redigering: diagrams.net (Draw.io embed), bpmn.io (bpmn-js via CDN). Paint-editorn och BPMN/Draw.io-sparning sker lokalt i zip-minnet; Draw.io embed kräver internet.
Testad i Chrome 120+, Edge 120+, Firefox 121+.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.