prompt-evaluation-runn…
Use when evaluating prompts, LLM outputs, red-team suites, or model behavior with local eval configs and safe provider/cost…
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
Claude Code
$ npx -y skills add yeaight7/agent-powerups --skill json-canvas --agent claude-code
Codex
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a codex -y
Cursor
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a cursor -y
Gemini CLI
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a gemini-cli -y
GitHub Copilot
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a github-copilot -y
OpenCode
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a opencode -y
Windsurf
$ npx skills add yeaight7/agent-powerups --skill json-canvas -a windsurf -y
name: json-canvas description: Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
A canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/):
{
"nodes": [],
"edges": []
}1. Create a `.canvas` file with the base structure `{"nodes": [], "edges": []}` 2. Generate unique 16-character hex IDs for each node (e.g., `"6f0ad84f44ce9c17"`) 3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height` 4. Add edges referencing valid node IDs via `fromNode` and `toNode` 5. **Validate**: Verify all `fromNode`/`toNode` values exist in the nodes array
1. Read and parse the existing `.canvas` file 2. Generate a unique ID that does not collide with existing IDs 3. Choose position (`x`, `y`) that avoids overlapping existing nodes (50-100px spacing) 4. Append the new node object to the `nodes` array 5. **Validate**: Confirm all IDs are unique and all edge references resolve
1. Identify the source and target node IDs 2. Generate a unique edge ID 3. Set `fromNode` and `toNode` to the source and target IDs 4. Optionally set `fromSide`/`toSide` (`top`, `right`, `bottom`, `left`) and `label` 5. **Validate**: Confirm both IDs reference existing nodes
Nodes are objects placed on the canvas. Array order determines z-index (first = bottom layer).
| Attribute | Required | Type | Description | |-----------|----------|------|-------------| | `id` | Yes | string | Unique 16-char hex identifier | | `type` | Yes | string | `text`, `file`, `link`, or `group` | | `x` | Yes | integer | X position in pixels | | `y` | Yes | integer | Y position in pixels | | `width` | Yes | integer | Width in pixels | | `height` | Yes | integer | Height in pixels | | `color` | No | string | Preset `"1"`-`"6"` or hex (e.g., `"#FF0000"`) |
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0, "y": 0, "width": 400, "height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}**Newline pitfall**: Use `\n` in JSON strings. Do **not** use literal `\\n`.
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500, "y": 0, "width": 400, "height": 300,
"file": "Attachments/diagram.png"
}{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000, "y": 0, "width": 400, "height": 200,
"url": "https://obsidian.md"
}{
"id": "d4e5f6789012345a",
"type": "group",
"x": -50, "y": -50, "width": 1000, "height": 600,
"label": "Project Overview",
"color": "4"
}| Attribute | Required | Default | Description | |-----------|----------|---------|-------------| | `id` | Yes | - | Unique identifier | | `fromNode` | Yes | - | Source node ID | | `toNode` | Yes | - | Target node ID | | `fromSide` | No | - | `top`, `right`, `bottom`, or `left` | | `toSide` | No | - | `top`, `right`, `bottom`, or `left` | | `fromEnd` | No | `none` | `none` or `arrow` | | `toEnd` | No | `arrow` | `none` or `arrow` | | `color` | No | - | Line color | | `label` | No | - | Text label |
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17",
"fromSide": "right",
"toNode": "a1b2c3d4e5f67890",
"toSide": "left",
"label": "leads to"
}| Preset | Color | |--------|-------| | `"1"` | Red | | `"2"` | Orange | | `"3"` | Yellow | | `"4"` | Green | | `"5"` | Cyan | | `"6"` | Purple |
| Node Type | Suggested Width | Suggested Height | |-----------|-----------------|------------------| | Small text | 200-300 | 80-150 | | Medium text | 300-450 | 150-300 | | Large text | 400-600 | 300-500 |
After creating or editing a canvas file:
1. All `id` values are unique across both nodes and edges 2. Every `fromNode` and `toNode` references an existing node ID 3. Required fields are present for each node type 4. `type` is one of: `text`, `file`, `link`, `group` 5. Side values are one of: `top`, `right`, `bottom`, `left` 6. End values are one of: `none`, `arrow` 7. JSON is valid and parseable
Curated power-ups for coding agents: skills, slash commands, MCP configs, hooks, AGENTS.md templates, and workflows for serious software engineering. Claude Code, Codex, Antigravity CLI, Cursor and more
Use when evaluating prompts, LLM outputs, red-team suites, or model behavior with local eval configs and safe provider/cost…
Use when creating or reviewing red-team eval plugins, attack templates, grader rubrics, safety fixtures, or model-risk test…
Use when designing, running, debugging, or hardening deterministic eval suites for agent skills, prompts, tool workflows, or…
Use when designing tool definitions for a new agent or subagent, an agent shows high retry rates, ambiguous tool invocations, or…
Use when routing a prompt to a local provider CLI for a second opinion, review, or plan -- you are about to call a provider…
Use when starting work in an unfamiliar area of a codebase, spawning a subagent that needs targeted file context, a first search…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.