prompt-evaluation-runn…
Use when evaluating prompts, LLM outputs, red-team suites, or model behavior with local eval configs and safe provider/cost controls.
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.
$ npx -y skills add yeaight7/agent-powerups --skill json-canvas --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/json-canvasContext preview
The summary Claude sees to decide when to auto-load this skill.
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.
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
Repo: yeaight7/agent-powerups
Use when evaluating prompts, LLM outputs, red-team suites, or model behavior with local eval configs and safe provider/cost controls.
Use when creating or reviewing red-team eval plugins, attack templates, grader rubrics, safety fixtures, or model-risk test metadata.
Use when designing, running, debugging, or hardening deterministic eval suites for agent skills, prompts, tool workflows, or MCP-backed cases.
Use when designing tool definitions for a new agent or subagent, an agent shows high retry rates, ambiguous tool invocations, or silent failures, or an…
Use when routing a prompt to a local provider CLI for a second opinion, review, or plan -- you are about to call a provider directly, need the response saved…
Use when starting work in an unfamiliar area of a codebase, spawning a subagent that needs targeted file context, a first search pass missed the relevant file,…