skills/graphilizer/SKILL.md
Generate interactive graph visualizations in the browser from any data - codebases, infrastructure, relationships, knowledge maps
npx skillsauth add asgeirf/agent-skills graphilizerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate interactive graph visualizations that open in the browser for live exploration. You describe a domain — codebases, infrastructure, relationships, knowledge maps, anything — and this skill produces a React Flow app with search, filtering, and detail inspection. Unlike flow-graph which records videos, graphilizer keeps a live dev server running so the user can pan, zoom, click nodes, and explore.
Parse the user's description to identify:
service, database, user for infrastructure)depends-on, calls, reads-from)Create domain-specific type definitions in settings.nodeTypes and settings.edgeTypes. Each type gets a color, optional icon (emoji or image URL), optional border/line style, and a shape that controls how the node is rendered visually. Types are fully custom — define whatever makes sense for the domain.
Choose the right shape for each entity type:
| Shape | Best for | Visual |
|-----------|---------------------------------------------|-----------------------------------------------|
| default | Services, entities, generic items | Icon + label + type badge (horizontal) |
| card | People, products, detailed entities | Large icon/image, title, description, tags |
| table | Databases, configs, specs, inventories | Header + visible key-value rows |
| pill | Milestones, statuses, tags, phases | Compact inline rounded label |
Mix shapes freely — a single graph can have card nodes for team members, table nodes for databases, default nodes for services, and pill nodes for deployment phases, all connected with edges.
Create the graph data JSON following the schema in references/graphilizer-schema.md.
{
"settings": {
"title": "My Service Map",
"description": "Production microservices and their dependencies",
"layout": { "direction": "LR", "nodeSpacing": 80, "rankSpacing": 120 },
"nodeTypes": {
"service": { "color": "#4A90D9", "icon": "🔧" },
"database": { "color": "#E8A838", "icon": "🗄️", "shape": "table" },
"person": { "color": "#53d769", "icon": "👤", "shape": "card" },
"phase": { "color": "#a855f7", "icon": "🏁", "shape": "pill" }
},
"edgeTypes": {
"calls": { "color": "#4A90D9", "style": "solid", "animated": true },
"reads": { "color": "#E8A838", "style": "dashed" }
}
},
"groups": [
{ "id": "backend", "label": "Backend Services" }
],
"nodes": [
{ "id": "api", "label": "API Gateway", "type": "service", "group": "backend", "metadata": { "language": "Go", "team": "platform" } },
{ "id": "db", "label": "PostgreSQL", "type": "database", "metadata": { "version": "15", "size": "200GB", "tables": "42" } },
{ "id": "sarah", "label": "Sarah Chen", "type": "person", "description": "Tech Lead", "tags": ["Go", "Kubernetes"] },
{ "id": "beta", "label": "Beta Launch", "type": "phase" }
],
"edges": [
{ "id": "e1", "source": "api", "target": "db", "label": "queries", "type": "reads" },
{ "id": "e2", "source": "sarah", "target": "api", "label": "leads" },
{ "id": "e3", "source": "beta", "target": "api", "label": "deploys" }
]
}
Write the graph JSON to a temporary file, e.g. /tmp/graphilizer-data.json.
Install the skill's dependencies if not yet done:
cd <skill-dir> && npm install --prefer-offline --no-audit --no-fund
cd <skill-dir>/assets/graphilizer-template && npm install --prefer-offline --no-audit --no-fund
Where <skill-dir> is the directory containing this SKILL.md file.
Run the serve script:
node <skill-dir>/scripts/serve.mjs /tmp/graphilizer-data.json --open
This starts a Vite dev server and opens the visualization in the user's default browser. The server stays running until the user is done exploring.
default (box), card (vertical with image/tags), table (key-value rows), pill (compact inline). Mix freely in one graphdescription (text), tags (array of strings), image (URL) — set directly on the noderows (array of {key, value}) — or omit and metadata is auto-displayed as rowsLayers let you partition a graph into logical sections that users can toggle on and off. This is essential for complex graphs that combine multiple concerns — e.g. an infrastructure graph with team responsibilities, architecture diagrams, and rollout phases all in the same view.
layer field (string) to any node or edgeservice, database, person can appear in any layer)layer field are always visible{
"nodes": [
{ "id": "sarah", "label": "Sarah Chen", "type": "lead", "layer": "Team" },
{ "id": "api", "label": "API Gateway", "type": "service", "layer": "Architecture" },
{ "id": "m-beta", "label": "Private Beta", "type": "milestone", "layer": "Rollout" }
],
"edges": [
{ "id": "e1", "source": "sarah", "target": "api", "label": "leads", "layer": "Team" },
{ "id": "e2", "source": "api", "target": "auth", "label": "validates", "layer": "Architecture" },
{ "id": "e3", "source": "m-beta", "target": "webapp", "label": "ships", "layer": "Rollout" }
]
}
When edges have an order field (integer), a timeline player appears with play/pause, a scrubber slider, and a reset button. This is useful for showing sequences: transfers over a window, build steps, event chains, deployment order, etc.
order values are animated in sequence — 3 seconds per stepEdges can include a subtitle field — a short descriptive line displayed teletext-style at the bottom of the canvas during that edge's animation step. When multiple edges share the same order, their subtitles stack on separate lines.
| Property | Type | Required | Description |
|------------|---------|----------|------------------------------------------------|
| order | integer | no | Sequence position for timeline animation |
| subtitle | string | no | Text shown at bottom of canvas during this step |
{
"edges": [
{ "id": "e1", "source": "a", "target": "b", "label": "Step 1", "type": "big", "order": 1, "subtitle": "First transfer completes" },
{ "id": "e2", "source": "b", "target": "c", "label": "Step 2a", "type": "medium", "order": 2, "subtitle": "Two things happen at once" },
{ "id": "e3", "source": "d", "target": "e", "label": "Step 2b", "type": "small", "order": 2, "subtitle": "This runs in parallel with 2a" },
{ "id": "e4", "source": "c", "target": "f", "label": "Step 3", "type": "big", "order": 3, "subtitle": "Final step wraps up" }
]
}
{
"settings": {
"title": "Breaking Bad",
"description": "Character relationships",
"layout": { "direction": "TB", "nodeSpacing": 100, "rankSpacing": 150 },
"nodeTypes": {
"protagonist": { "color": "#4CAF50", "icon": "🧪" },
"antagonist": { "color": "#F44336", "icon": "💀" },
"family": { "color": "#2196F3", "icon": "👨👩👦" },
"dea": { "color": "#FF9800", "icon": "🔫" }
},
"edgeTypes": {
"family": { "color": "#2196F3", "style": "solid" },
"business": { "color": "#4CAF50", "style": "dashed", "animated": true },
"conflict": { "color": "#F44336", "style": "dotted" }
}
},
"groups": [
{ "id": "white-family", "label": "White Family" },
{ "id": "cartel", "label": "Drug Trade" }
],
"nodes": [
{ "id": "walt", "label": "Walter White", "type": "protagonist", "group": "white-family", "metadata": { "alias": "Heisenberg", "occupation": "Chemistry Teacher" } },
{ "id": "jesse", "label": "Jesse Pinkman", "type": "protagonist", "group": "cartel", "metadata": { "role": "Cook", "catchphrase": "Yeah, science!" } },
{ "id": "skyler", "label": "Skyler White", "type": "family", "group": "white-family" },
{ "id": "hank", "label": "Hank Schrader", "type": "dea", "metadata": { "role": "DEA Agent" } },
{ "id": "gus", "label": "Gus Fring", "type": "antagonist", "group": "cartel", "metadata": { "front": "Los Pollos Hermanos" } }
],
"edges": [
{ "id": "e1", "source": "walt", "target": "jesse", "label": "partners", "type": "business" },
{ "id": "e2", "source": "walt", "target": "skyler", "label": "married", "type": "family" },
{ "id": "e3", "source": "hank", "target": "skyler", "label": "in-laws", "type": "family" },
{ "id": "e4", "source": "walt", "target": "gus", "label": "rivals", "type": "conflict" },
{ "id": "e5", "source": "gus", "target": "jesse", "label": "employer", "type": "business" }
]
}
See references/graphilizer-schema.md for the complete JSON format specification.
development
Generate animated GIF/WebM videos of graph visualizations from natural language descriptions
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.