Impeccable
bestofjs/bestofjs
A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…
Build and edit dashboards in the Pneuma GridBoard workspace — tiles, layout, data sources, theming.
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-gridboard --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/modes/gridboard/skill .claude/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .claude/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skillType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-gridboard --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/modes/gridboard/skill .agents/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .agents/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-gridboard --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/modes/gridboard/skill .cursor/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .cursor/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pandazki/pneuma-skills.git --path modes/gridboard/skill--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-gridboard --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/modes/gridboard/skill .gemini/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .gemini/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pandazki/pneuma-skills pneuma-gridboardInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/modes/gridboard/skill .github/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .github/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-gridboard --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/modes/gridboard/skill .opencode/skills/pneuma-gridboard && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-gridboard" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/gridboard/skill into .opencode/skills/pneuma-gridboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-gridboard", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pneuma-gridboardBuild and edit dashboards in the Pneuma GridBoard workspace — tiles, layout, data sources, theming.
Pneuma Gridboard is an agent skill from pandazki/pneuma-skills. Build and edit dashboards in the Pneuma GridBoard workspace — tiles, layout, data sources, theming. Use for ANY task in this workspace. Defines the defineTile() API, board.json schema, theming conventions, size guidelines, and resize adaptation rules.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/resize-adaptation.md` and `references/tile-visual-design.md`).
It sits in Frontend & Design, covering Theming and dark mode. The repository describes itself as: Co-creation infrastructure for humans and code agents — visual environment, skills, continuous learning, and distribution. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0023d3c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pneuma Gridboard loads about 5k tokens when it runs, and up to ~7.3k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 1,778 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pandazki/pneuma-skills at commit 0023d3c, republished under its MIT licence (© pandazki). 1,778 words, ~5,038 tokens.
.claude/skills/pneuma-gridboard/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.GridBoard is a live dashboard editor: you create and manage tiles on a draggable grid canvas, and the user views every file edit in real-time through the preview panel.
Board canvas: {{boardWidth}}×{{boardHeight}}px, grid: {{columns}} columns × {{rows}} rows.
The GridBoard viewer is a live tile-grid canvas the user watches while you edit. Pneuma exposes a small set of channels that flow between the viewer, you (the agent), and the user. Treat them as your primary I/O — the user is rarely in the chat alone, they're dragging, resizing, and clicking inside the board.
The runtime injects a <viewer-context> block into your turn whenever the user has something focused. For GridBoard it carries the active board snapshot, current layout state, and the selected tile (if any). When the user drags or resizes a tile, opens the gallery, or shifts the layout, those movements arrive as <user-actions> — operations the user just performed in the viewer that you should treat as ground truth, even if they contradict your last edit.
Always reconcile <viewer-context> and <user-actions> before continuing. If the user resized revenue-chart from 2×2 to 4×3, that new size is the source of truth — do not "fix" it back to your earlier choice. Update board.json and the tile's internal breakpoints to match.
A ViewerAddress is the one JSON shape that names "which object on the board": it is what a <viewer-locator> card points at and what a <viewer-context> selection reports back to you. GridBoard's vocabulary:
| Key | Granularity | Meaning |
|---|---|---|
tileId | coarse | The id of a tile on the board (revenue-chart). Omit it to address the whole board. |
action | — | A mode-specific verb key for non-tile destinations — currently only "open-gallery". |
A tile selection in <viewer-context> hands you a ready-made ViewerAddress on its Address: line — copy that JSON straight back into a <viewer-locator> card. Tile ids are stable across edits, so a { tileId } address stays valid.
After creating or editing tiles, embed <viewer-locator> cards in chat so the user can jump straight to the result with one click. The card's address attribute is a ViewerAddress the viewer interprets:
{"tileId":"<id>"} — focuses and highlights the tile on the board (uses the navigate-to action under the hood){"action":"open-gallery"} — opens the tile-type gallery for browsing available templatesReal examples:
<!-- Jump to a specific tile you just edited -->
<viewer-locator label="Open revenue chart tile" address='{"tileId":"revenue-chart"}' />
<!-- Open the gallery so the user can browse what else is available -->
<viewer-locator label="Open the gallery" address='{"action":"open-gallery"}' />Emit a locator card whenever you change something the user benefits from looking at — a new tile, a redesigned tier, a fresh gallery entry. One card per concrete destination; do not spam.
You can drive the viewer programmatically by POST $PNEUMA_API/api/viewer/action with a JSON body {"id":"<action-id>","params":{...}}. The action set for GridBoard (declared in the manifest) is:
| Action | Params | Use it when |
|---|---|---|
navigate-to | { tileId } | You want to focus the user's eye on a tile after editing it |
open-gallery | {} | The user asked what else is available, or you want to suggest templates |
lock-tile | { tileId } | About to edit a tile's component — show a "modifying" overlay so the user doesn't drag it mid-edit |
unlock-tile | { tileId } | Done editing — remove the overlay |
capture-tile | { tileId } | You need a screenshot of one tile (e.g. to verify a render) |
capture-board | {} | You need a screenshot of the whole board (layout review) |
lock-tile / unlock-tile should bracket multi-edit tile work so the user sees the in-progress state without grabbing a half-edited component. capture-tile and capture-board return an image you can inspect — use them when a visual check would beat reading code.
Example — focus a tile after a render rewrite:
curl -s -X POST "$PNEUMA_API/api/viewer/action" \
-H "Content-Type: application/json" \
-d '{"id":"navigate-to","params":{"tileId":"revenue-chart"}}'Example — screenshot the whole board to review layout:
curl -s -X POST "$PNEUMA_API/api/viewer/action" \
-H "Content-Type: application/json" \
-d '{"id":"capture-board","params":{}}'GridBoard exposes one user-invocable command, create-tile, which scaffolds a new tile directory + Tile.tsx and registers it in board.json. The user triggers this from the viewer's command palette; you'll then see the new files appear and can iterate. You don't call commands directly — that channel is for the user. When they run it, treat the resulting empty Tile.tsx as your starting point.
board.json immediatelytheme.css for all colors, fonts, and spacing — no hardcoded valuesworkspace/
board.json # Board layout config: tile positions, sizes, and metadata (source of truth)
theme.css # Shared CSS theme (custom properties + base styles)
tiles/
<tile-id>/
Tile.tsx # Tile component — export default defineTile({...})
... # Supporting files (helpers, sub-components, local CSS)Each tile lives in its own directory under tiles/. The entry point must be Tile.tsx with a default export of defineTile({...}). Supporting files (utility functions, sub-components, local styles) can be co-located in the same directory.
Use import { defineTile } from "gridboard" in every tile file. React is available as a global — do not import it.
interface TileRenderProps {
data: unknown; // Latest fetch result (null before first fetch)
width: number; // Current pixel width of the tile
height: number; // Current pixel height of the tile
loading: boolean; // True while a fetch is in progress
error: Error | null; // Last fetch error, or null if no error
}
interface TileFetchContext {
signal: AbortSignal; // Cancelled on unmount or manual refresh
params: Record<string, unknown>; // User-configurable params (see TileDefinition.params)
}
interface TileDefinition {
label: string;
description: string;
minSize: { cols: number; rows: number };
maxSize: { cols: number; rows: number };
dataSource?: {
refreshInterval: number; // Seconds between auto-refreshes (minimum 30)
fetch: (ctx: TileFetchContext) => Promise<unknown>;
};
params?: Record<string, {
type: "string" | "number" | "boolean";
default: unknown;
label: string;
}>;
render: (props: TileRenderProps) => React.ReactNode;
}import { defineTile } from "gridboard";
export default defineTile({
label: "Metric Card",
description: "Shows a single KPI with trend indicator",
minSize: { cols: 2, rows: 2 },
maxSize: { cols: 4, rows: 3 },
params: {
label: { type: "string", default: "Revenue", label: "Metric label" },
unit: { type: "string", default: "$", label: "Unit prefix" },
},
dataSource: {
refreshInterval: 60,
fetch: async ({ signal, params }) => {
// Use /proxy/<name>/ to avoid CORS — proxied by pneuma runtime
const res = await fetch("/proxy/myapi/metrics/revenue", { signal });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
},
},
render({ data, width, height, loading, error, params }) {
if (loading && !data) {
return (
<div style={{ display: "flex", alignItems: "center", justifyContent: "center", height: "100%" }}>
<span style={{ color: "var(--text-muted)", fontSize: 13 }}>Loading…</span>
</div>
);
}
if (error) {
return (
<div style={{ padding: "var(--tile-padding)", color: "var(--error)", fontSize: 12 }}>
{error.message}
</div>
);
}
const value = (data as any)?.value ?? 0;
const trend = (data as any)?.trend ?? 0;
// Adapt layout to available space
const compact = width < 200 || height < 120;
return (
<div style={{
padding: "var(--tile-padding)",
display: "flex",
flexDirection: "column",
justifyContent: "center",
height: "100%",
fontFamily: "var(--font-family)",
}}>
<div style={{ color: "var(--text-secondary)", fontSize: compact ? 11 : 13 }}>
{params.label as string}
</div>
<div style={{
color: "var(--text-primary)",
fontSize: compact ? 24 : 36,
fontWeight: 700,
lineHeight: 1.1,
}}>
{params.unit}{value.toLocaleString()}
</div>
{!compact && (
<div style={{ color: trend >= 0 ? "var(--success)" : "var(--error)", fontSize: 12, marginTop: 4 }}>
{trend >= 0 ? "▲" : "▼"} {Math.abs(trend)}%
</div>
)}
</div>
);
},
});Always use these variables. Modify theme.css for global visual changes — never hardcode colors or fonts in tile files.
| Variable | Purpose |
|---|---|
--board-bg | Board canvas background |
--board-grid-line | Grid line color (faint, for visual reference) |
--tile-bg | Tile background surface |
--tile-border | Tile border color (default state) |
--tile-border-hover | Tile border color on hover |
--tile-radius | Tile corner radius |
--tile-padding | Inner tile padding (use for content insets) |
--text-primary | Primary text (headings, values) |
--text-secondary | Secondary text (labels, captions) |
--text-muted | Muted text (hints, placeholders, empty states) |
--accent | Accent color (interactive elements, highlights) |
--accent-dim | Dimmed accent (backgrounds, subtle indicators) |
--success | Positive trend / success state |
--warning | Warning / attention state |
--error | Error / negative trend state |
--font-family | Primary sans-serif font stack |
--font-mono | Monospace font stack (code, numbers) |
--selection-color | Text color when tile is selected |
--selection-bg | Background color when tile is selected |
--overlay-bg | Semi-transparent overlay (modals, tooltips) |
{
"board": {
"width": 800,
"height": 800,
"columns": 8,
"rows": 8
},
"tiles": {
"<tile-id>": {
"label": "Human-readable tile name",
"component": "tiles/<tile-id>/Tile.tsx",
"status": "active",
"position": { "col": 1, "row": 1 },
"size": { "cols": 2, "rows": 2 }
},
"<another-id>": {
"label": "Available tile (not placed)",
"component": "tiles/<another-id>/Tile.tsx",
"status": "available"
}
}
}| Status | Has position + size? | Description |
|---|---|---|
active | Yes | Placed and visible on the board |
disabled | Yes | Hidden but retains its last position/size |
available | No | In the gallery, not yet placed |
available → active (user places tile from gallery)
active → disabled (user hides tile)
disabled → active (user re-enables tile)
active → (deleted) (user removes tile entirely — delete file + remove from board.json)size.cols and size.rows are the span in grid unitsavailable tiles have no position or size fieldsChoose initial tile sizes based on content type. When unsure, go slightly larger — users can always shrink.
| Content Type | Recommended Size | Reason |
|---|---|---|
| Clock / single metric | 2×2 | Small, glanceable — no wasted space |
| Weather / status card | 3×2 | Needs width for icon + label detail |
| List / todo / feed | 2×4 or 3×4 | Vertical content benefits from height |
| News / article feed | 4×3+ | Wide headlines + summaries need room |
| Chart / graph | 3×3 or 4×3 | Axes + data labels need sufficient area |
| Calendar | 4×4 | Grid-within-grid needs generous space |
| Table / data grid | 4×3 or 5×3 | Columns need horizontal room |
| Map | 4×4 or 5×4 | Spatial context requires area |
| Text / notes | 3×3 or 3×4 | Readable line length + scrollable height |
Consult resize adaptation reference for per-tier design expectations, implementation patterns, and the screenshot test.
Resize is the defining interaction of GridBoard. Small tiles show data. Large tiles show craft.
const compact = width < 180 || height < 120; // key value only, no decoration
const medium = !compact && (width < 280 || height < 200); // structured data, typographic hierarchy
const expanded = !compact && !medium; // full visual experience — SVG icons, visualizations, animationsEach tier should be a distinct visual design, not a parametric variation. When a tile grows:
What does NOT count: bigger fonts, more padding, same elements rearranged.
tiles/<tile-id>/Tile.tsx with defineTile({...})minSize and maxSize that fit the content (see size table above)render using width/height breakpointsboard.json tiles mapstatus: "active" with a position and size if placing immediately; status: "available" for gallery-onlytheme.csstiles/<tile-id>/Tile.tsxminSize/maxSize in the definitionboard.json.claude/ or .pneuma/ — managed by the runtimeTile code runs in the browser. Direct fetch() to external APIs will fail due to CORS unless the API explicitly allows cross-origin requests. Always use the proxy for external APIs.
Need to fetch data from an external API?
├─ Is it already in the proxy list (see the Proxy section in CLAUDE.md / AGENTS.md)?
│ └─ Yes → use /proxy/<name>/<path>
└─ No → add it to proxy.json first, then use /proxy/<name>/<path>Never use absolute URLs like https://api.example.com/... in tile fetch code. Even if an API works without proxy today (e.g. it has permissive CORS headers), using the proxy is still preferred for consistency and because the proxy can inject headers (auth tokens, User-Agent, etc.).
Write proxy.json in the workspace root. It takes effect immediately — no restart needed.
{
"myapi": {
"target": "https://api.example.com",
"headers": {
"Authorization": "Bearer {{API_KEY}}",
"User-Agent": "Mozilla/5.0 (compatible)"
},
"methods": ["GET", "POST"],
"description": "My API — needs auth and browser UA"
}
}target — base URL (required)headers — injected on every request; {{ENV_VAR}} resolves from process.env (optional)methods — allowed HTTP methods, defaults to ["GET"] only (optional)proxy.json merges with mode defaults; same name overrides the default| Scenario | What to do |
|---|---|
| API needs auth header | Add "headers": { "Authorization": "Bearer {{TOKEN}}" } to proxy config |
| API blocks non-browser requests | Add "User-Agent": "Mozilla/5.0 ..." to proxy headers |
| API needs POST | Add "methods": ["GET", "POST"] to proxy config |
| API already in proxy list | Just use /proxy/<name>/... directly |
dataSource: {
refreshInterval: 300,
async fetch({ signal }) {
// ✅ Always go through proxy
const res = await fetch("/proxy/bilibili/x/web-interface/popular?ps=10&pn=1", { signal });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const json = await res.json();
if (json.code !== 0) throw new Error(json.message);
return json.data.list;
},
}Consult tile visual design reference for SVG patterns, data-driven color, typography hierarchy, and visualization components.
Tiles are the medium — your job is to make each one feel crafted, not templated. A dashboard of well-designed tiles creates delight; a dashboard of text-with-padding creates boredom.
Your visual toolkit (all available in TSX, no external dependencies):
var(--font-mono) for primary data, small muted labels. Hierarchy through weight and size.@keyframes via <style dangerouslySetInnerHTML>. Pulsing indicators, shimmer effects. Use sparingly.Anti-patterns — no emoji icons, no decoration without data purpose, no identical layouts across tiles, no generic dark-mode-with-glow cliches.
Aspiration check: would someone screenshot this tile to show a friend? If not, add an SVG icon, a data-driven color accent, or a visualization.
import { defineTile } from "gridboard" as the only gridboard import<WeatherIcon /> will throw "WeatherIcon is not defined" even if defined in the same file. Use plain function calls instead:// BAD — will crash at runtime
function WeatherIcon({ type }: { type: string }) { return <svg>...</svg>; }
// ... inside render:
<WeatherIcon type="rain" />
// GOOD — plain function call works
function renderWeatherIcon(type: string) { return <svg>...</svg>; }
// ... inside render:
{renderWeatherIcon("rain")}tiles/, board.json, and theme.css unless explicitly askedrefreshInterval must be at least 30 seconds — do not poll more frequentlyboard.json valid JSON at all times — invalid JSON breaks the viewer© pandazki, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in modes/gridboard/skill of pandazki/pneuma-skills.
Open the folder on GitHubat commit 0023d3c
Pneuma Gridboard next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pneuma Gridboard this skillpandazki/pneuma-skills | 161 | — | ~5k | Automated safety check: Pass | MIT | |
| Impeccablebestofjs/bestofjs | 3.1k | 26 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Figma Design System Builderwarpdotdev/warp | 65k | 2 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Tailwindcss Developmentanonaddy/anonaddy | 4.9k | 10 repos | ~865 | Automated safety check: Pass | MIT | |
| UI StylingOhh-889/skyroc | 795 | 13 repos | ~2.5k | Automated safety check: Pass | MIT | |
| MCP Developmentcoollabsio/coolify | 63k | 1 repos | ~949 | Automated safety check: Pass | MIT |
bestofjs/bestofjs
A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
anonaddy/anonaddy
Always invoke when the user's message includes 'tailwind' in any form.
Ohh-889/skyroc
Create beautiful, accessible user interfaces with shadcn/ui components (built on Radix UI + Tailwind), Tailwind CSS utility-first styling, and canvas-based visual designs.
coollabsio/coolify
A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.
saoudi-h/solar-icons
UI/UX design intelligence for web and mobile. An agent skill from saoudi-h/solar-icons.
pandazki/pneuma-skills
Explain something by writing it on a board. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
AI-orchestrated video production on @pneuma-craft. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Lucid Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Plotwise workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Sprite Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma WebCraft Mode workspace guidelines with Impeccable.style design intelligence.
Categories
Build and edit dashboards in the Pneuma GridBoard workspace — tiles, layout, data sources, theming. Pneuma Gridboard is an agent skill from pandazki/pneuma-skills. Build and edit dashboards in the Pneuma GridBoard workspace — tiles, layout, data sources, theming.
Pneuma Gridboard fits situations like: ANY task in this workspace; tasks that involve Theming and dark mode.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a claude-code`. Or copy the skill folder (modes/gridboard/skill in pandazki/pneuma-skills) into .claude/skills/pneuma-gridboard in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a codex`. Or copy the skill folder (modes/gridboard/skill in pandazki/pneuma-skills) into .agents/skills/pneuma-gridboard in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pandazki/pneuma-skills --skill pneuma-gridboard -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pneuma-gridboard, .gemini/skills/pneuma-gridboard, .github/skills/pneuma-gridboard and .opencode/skills/pneuma-gridboard in your project.
Going by SKILL.md and its folder, Pneuma Gridboard needs the command-line tools its instructions call (curl) and credentials named API_KEY.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pneuma Gridboard is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Pneuma Gridboard: Impeccable (bestofjs/bestofjs, 3.1k stars), Figma Design System Builder (warpdotdev/warp, 65k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars) and UI Styling (Ohh-889/skyroc, 795 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pandazki (a GitHub user) maintains it in pandazki/pneuma-skills, which has 161 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 9, 2026.
Source: pandazki/pneuma-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.