/add-theme
Add a new color theme to pixtuoid (a full ~90-role palette across 9 groups, rendered into the office). Use when the user says 'add a <name> theme', 'new color scheme', or 'port <palette> to pixtuoid'. Orchestrates the Rust registration PLUS the two steps agents miss — the site
$ npx -y skills add IvanWng97/pixtuoid --skill add-theme --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/add-theme
Context preview
The summary Claude sees to decide when to auto-load this skill.
Add a new color theme to pixtuoid (a full ~90-role palette across 9 groups, rendered into the office). Use when the user says 'add a <name> theme', 'new color scheme', or 'port <palette> to pixtuoid'. Orchestrates the Rust registration PLUS the two steps agents miss — the site
SKILL.md
add-theme.SKILL.mdname: add-theme
version: 1.0.0
description: "Add a new color theme to pixtuoid (a full ~90-role palette across 9 groups, rendered into the office). Use when the user says 'add a <name> theme', 'new color scheme', or 'port <palette> to pixtuoid'. Orchestrates the Rust registration PLUS the two steps agents miss — the site manifest bridge test and the committed-media regen."
metadata:
scope: "pixtuoid repo only"
add-theme (v1)
A theme is a `pub static Theme` with ~90 color roles across **9** groups (surface, office, lighting, furniture, effects, ui, tool_glow, `ApplianceColors` for corridor appliances, and `SourceColors` for per-CLI dashboard badge hues). Every field must be supplied — corridor appliances render wrong until each theme provides its own set.
When to use
- "Add a `<name>` theme" / "new color scheme" / "port `<palette>`".
The checklist
Full current steps: **[`.github/prompts/add-theme.prompt.md`](../../../.github/prompts/add-theme.prompt.md)**
- the theme notes in [`crates/pixtuoid/src/tui/CLAUDE.md`](../../../crates/pixtuoid/src/tui/CLAUDE.md).
Read an existing theme (e.g. `crates/pixtuoid-scene/src/theme/dracula.rs`) for the full field set, then:
1. Create `crates/pixtuoid-scene/src/theme/<name>.rs` — fill EVERY field; never fall back to the normal palette. 2. Register: `mod` in `theme/mod.rs`, append `&<NAME>` to `ALL_THEMES`, `theme_by_name()` resolves the kebab-case name. 3. **Theme roles MAY share an RGB** (every bundled theme does) — the unique-RGB rule belongs to SPRITE PACKS (`RECOLOR_KEYS` B/H/S/P, enforced at pack load by `validate_recolor_palette`), not to themes. What binds a theme author are the per-theme legibility guards in `theme/mod.rs`: `appliance_palette_is_legible_for_every_theme`, `source_badges_legible_for_every_theme`, `token_paper_is_legible_on_the_desk_for_every_theme`, and `sun_and_moon_read_warm_and_cool_for_every_theme`.
The two steps agents miss (both have teeth)
- **`site/src/themes.json` row** (`id` = the kebab-case name) —
`theme_gallery_manifest_matches_all_themes` (`theme/mod.rs`) asserts the manifest ids == `ALL_THEMES` names, so the theme **fails `just test`** until the row exists. The site never runs the binary, so this bridge test is the only guard that the switcher stays in sync.
- **`just gen-media`** — `themes.json` drives the committed theme stills; a new
theme drifts them, so regenerate and commit them or the smoke `gen-check` reds the PR (the same error the bridge test's message points at).
(Full step list + field details: `add-theme.prompt.md` + the tui `CLAUDE.md` theme notes — this skill headlines the two teeth steps agents miss.)
Finish
- `just test` — `appliance_palette_is_legible_for_every_theme` + the snapshot
tests must pass; update insta snapshots if the theme list changed.
- **Visually verify** — render the `snapshot` example and eyeball the office (see
the `beautify-decoration` skill); a palette that passes the legibility guard can still read badly.
- `just preflight`, then the **two-lens-review** skill (a theme is public-facing —
add the editorial/film-critic lens for the rendered stills).
Read more
name: add-theme version: 1.0.0 description: "Add a new color theme to pixtuoid (a full ~90-role palette across 9 groups, rendered into the office). Use when the user says 'add a <name> theme', 'new color scheme', or 'port <palette> to pixtuoid'. Orchestrates the Rust registration PLUS the two steps agents miss — the site manifest bridge test and the committed-media regen." metadata: scope: "pixtuoid repo only"
add-theme (v1)
A theme is a `pub static Theme` with ~90 color roles across **9** groups (surface, office, lighting, furniture, effects, ui, tool_glow, `ApplianceColors` for corridor appliances, and `SourceColors` for per-CLI dashboard badge hues). Every field must be supplied — corridor appliances render wrong until each theme provides its own set.
When to use
- "Add a `<name>` theme" / "new color scheme" / "port `<palette>`".
The checklist
Full current steps: **[`.github/prompts/add-theme.prompt.md`](../../../.github/prompts/add-theme.prompt.md)**
- the theme notes in [`crates/pixtuoid/src/tui/CLAUDE.md`](../../../crates/pixtuoid/src/tui/CLAUDE.md).
Read an existing theme (e.g. `crates/pixtuoid-scene/src/theme/dracula.rs`) for the full field set, then:
1. Create `crates/pixtuoid-scene/src/theme/<name>.rs` — fill EVERY field; never fall back to the normal palette. 2. Register: `mod` in `theme/mod.rs`, append `&<NAME>` to `ALL_THEMES`, `theme_by_name()` resolves the kebab-case name. 3. **Theme roles MAY share an RGB** (every bundled theme does) — the unique-RGB rule belongs to SPRITE PACKS (`RECOLOR_KEYS` B/H/S/P, enforced at pack load by `validate_recolor_palette`), not to themes. What binds a theme author are the per-theme legibility guards in `theme/mod.rs`: `appliance_palette_is_legible_for_every_theme`, `source_badges_legible_for_every_theme`, `token_paper_is_legible_on_the_desk_for_every_theme`, and `sun_and_moon_read_warm_and_cool_for_every_theme`.
The two steps agents miss (both have teeth)
- **`site/src/themes.json` row** (`id` = the kebab-case name) —
`theme_gallery_manifest_matches_all_themes` (`theme/mod.rs`) asserts the manifest ids == `ALL_THEMES` names, so the theme **fails `just test`** until the row exists. The site never runs the binary, so this bridge test is the only guard that the switcher stays in sync.
- **`just gen-media`** — `themes.json` drives the committed theme stills; a new
theme drifts them, so regenerate and commit them or the smoke `gen-check` reds the PR (the same error the bridge test's message points at).
(Full step list + field details: `add-theme.prompt.md` + the tui `CLAUDE.md` theme notes — this skill headlines the two teeth steps agents miss.)
Finish
- `just test` — `appliance_palette_is_legible_for_every_theme` + the snapshot
tests must pass; update insta snapshots if the theme list changed.
- **Visually verify** — render the `snapshot` example and eyeball the office (see
the `beautify-decoration` skill); a palette that passes the legibility guard can still read badly.
- `just preflight`, then the **two-lens-review** skill (a theme is public-facing —
add the editorial/film-critic lens for the rendered stills).
Other skills on pixtuoid.
- /add-source
Wire a new agent-CLI Source adapter into pixtuoid (a new coding CLI whose sessions become office sprites). Use when the user says 'add support for <CLI>', 'add a source for <tool>', or 'integrate <agent CLI>'. Orchestrates the cross-crate checklist whose steps have TEST TEETH —
Open skill - /beautify-decoration
Iterate on the visual identity of a top-down pixel-art decoration (sprite + layout integration) in pixtuoid. Use when redesigning an existing decoration (pantry, lounge, meeting room, cubicle decor) or adding a new one. Captures the rebuild trap, the visual-verification loop,
Open skill - /procedural-lofi
Generate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships. Fingerprint a beloved reference recording, shape synthesis to the measured spectral + temporal curve, freeze one human-blessed take into constant tables,
Open skill - /two-lens-review
Run pixtuoid's review protocol at either scope — the mandatory pre-merge DIFF gate (2+ differentiated-lens agents on the diff) or a whole-codebase AUDIT (subsystem × factor fan-out over the whole tree). Both draw ONE shared factor taxonomy + verify contract + disposition; they
Open skill

