Skip to main content
skill CX Codex

cate-theme — Claude Code skill for Cate themes

Create or edit Cate IDE themes with one JSON file for the interface, terminal palette, and Monaco syntax colors. Handy when you want a custom light or dark scheme.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add 0-AI-UG/cate --skill cate-theme -a claude-code
Open on GitHub

What cate-theme does

A Cate theme is a single JSON object that sets colors for the app chrome, the xterm terminal palette, and Monaco syntax tokens. The skill checks the file against theme.schema.json and reviews text contrast and terminal color legibility. Red and green need to remain distinct because diff and test output use both.

For import, it saves the theme as <name>.cate-theme.json; open Settings → Appearance → Import… and select it in the theme catalog. If asked to apply a theme without the UI, the skill reads config.json, adds an entry to customThemes, and can set activeThemeId. It stops if the JSON cannot be parsed and leaves existing themes and unrelated settings alone. The validation command needs ajv; without it, the skill checks required fields and color formats itself.

What it helps with

  • create a light or dark Cate theme as JSON
  • recolor Cate’s interface, terminal, and editor together
  • validate a theme against theme.schema.json
  • check text contrast and terminal color legibility
  • add a theme to Cate settings and activate it

Example prompts for the agent

  • Create a dark Dracula-style theme for Cate and save it as JSON.
  • Check my Cate theme against theme.schema.json and fix text and terminal contrast.
  • Add this theme to config.json and make it active.

How to install cate-theme

1Skills CLI (Vercel)

npx skills add 0-AI-UG/cate --skill cate-theme -a claude-code

2Manually: put the files in place

~/.claude/skills/cate-theme/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/cate-theme/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about cate-theme

How do I install cate-theme in Claude Code?

Run npx skills add 0-AI-UG/cate --skill cate-theme -a claude-code. The skill file is installed at ~/.claude/skills/cate-theme/SKILL.md.

What does cate-theme do?

It creates and edits Cate theme JSON for the IDE interface, xterm palette, and Monaco syntax colors. Before saving, it checks the theme schema and color contrast.

How do I apply a theme in Cate?

Save it as <name>.cate-theme.json, then open Settings → Appearance → Import… and choose the file. Select the imported theme in the theme catalog.

Source text

SKILL.md · MIT
---
name: cate-theme
description: Author or edit a Cate IDE theme — one data-driven theme covering app chrome colors, the terminal ANSI palette, and Monaco editor syntax tokens. Use when the user asks to create, customize, recolor, or generate a Cate theme, mentions a color scheme (Dracula, Nord, "make Cate look like X"), or wants a new light/dark theme.
user-invocable: true
---

# Authoring Cate Themes

A Cate theme is ONE JSON object that styles the whole IDE:

- **app** — the window/panel chrome (CSS custom properties: surfaces, text, borders, accents)
- **terminal** — the xterm palette (background/foreground + the 16 ANSI colors)
- **editor** — the Monaco code editor (base + syntax token colors)

There is no separate terminal theme any more — one theme colors everything.

The canonical machine-readable schema is **`theme.schema.json`** in this skill
folder. Validate every theme against it before saving.

## Where themes live

User themes are stored in Cate's settings file under the `customThemes` array,
and the active theme is `activeThemeId`:

```
macOS:   ~/Library/Application Support/cate/config.json
Linux:   ~/.config/cate/config.json
Windows: %APPDATA%/cate/config.json
```

## Schema

```jsonc
{
  "version": 1,
  "id": "midnight-ember",        // REQUIRED, unique kebab-case slug
  "name": "Midnight Ember",      // REQUIRED, display name
  "type": "dark",                // REQUIRED: "dark" | "light" (drives system light/dark auto-switch + editor base)
  "author": "You",               // optional
  "bootBackground": "#1a1714",   // optional — exact cold-launch window bg (defaults to surface-0)

  "app": {                       // app chrome — see "App colors" below. PARTIAL: omitted keys inherit the base.
    "surface-0": "#1a1714",
    "surface-1": "#221d18",
    "text-primary": "#e7ddd0",
    "text-muted": "#9b9186",
    "border-focus": "#e0683c",
    "focus-blue": "#e0683c",
    "agent-rgb": "224 104 60"
  },

  "terminal": {                  // REQUIRED full xterm palette — ordinary shell output
    "background": "#1a1714", "foreground": "#e7ddd0", "cursor": "#e0683c",
    "selectionBackground": "#3a2f26",
    "black": "#1a1714", "red": "#e0683c", "green": "#8fa86a", "yellow": "#d9a441",
    "blue": "#5f90c4", "magenta": "#b06aa0", "cyan": "#5fa8a8", "white": "#d8cdbf",
    "brightBlack": "#6b6258", "brightRed": "#f0855a", "brightGreen": "#a6c47f",
    "brightYellow": "#e8bd6a", "brightBlue": "#7aa8d6", "brightMagenta": "#c884b8",
    "brightCyan": "#7cc0c0", "brightWhite": "#f4ece1"
  },

  "editor": {                    // REQUIRED Monaco syntax
    "base": "vs-dark",           // "vs" for light themes, "vs-dark" for dark
    "tokens": [                  // syntax rules — foreground is hex WITHOUT the leading #
      { "token": "comment", "foreground": "6b6258", "fontStyle": "italic" },
      { "token": "keyword", "foreground": "e0683c" },
      { "token": "string",  "foreground": "8fa86a" },
      { "token": "constant.numeric", "foreground": "d9a441" },
      { "token": "type",    "foreground": "5f90c4" },
      { "token": "entity.name.function", "foreground": "b06aa0" }
    ],
    "colors": {                  // optional Monaco IColors (# prefixed)
      "editor.background": "#1a1714",
      "editor.foreground": "#e7ddd0"
    }
  }
}
```

### App colors (keys under `app`)

All optional — anything you omit inherits the base for the theme's `type`.
`surface-0..6` (layered backgrounds, 0 = base), `titlebar-bg`, `canvas-bg`,
`canvas-bg-alt`, `canvas-backdrop-scrim`, `grid-dot`, `grid-line`, `border-subtle`, `border-strong`,
`border-focus`, `text-primary`, `text-secondary`, `text-muted`, `text-inverse`,
`focus-blue`, `activity-green`, `activity-orange`, `shadow-node`,
`shadow-node-focused`, `node-bg-active`, `node-dim-overlay`, `scrollbar-thumb`,
`scrollbar-thumb-hover`, `surface-hover`, `surface-hover-strong`, `git-added`,
`git-modified`, `git-deleted`, `git-untracked`, `git-renamed`, `panel-terminal`,
`panel-browser`, `panel-editor`, `panel-canvas`, `agent-rgb`, `agent-light-rgb`.

Values are hex (`#rrggbb` / `#rrggbbaa`), `rgba(...)`, or — for `agent-rgb` /
`agent-light-rgb` only — three space-separated channels like `"224 104 60"`.

## Color & accessibility guidance

- **Body text on surface** must hit WCAG AA: contrast ratio ≥ 4.5:1
  (`text-primary` on `surface-1`). Compute it; don't eyeball it.
- **Every ANSI color must be legible** on `terminal.background`. The usual
  failures: `blue` and `brightBlack` on dark backgrounds, `yellow`/`white` on
  light backgrounds.
- Keep `red` and `green` clearly distinct — diff and test output depend on it.
- `border-focus` / `focus-blue` must stand out against `surface-1` (focus rings,
  selection).
- For light themes set `"type": "light"` and `"editor": { "base": "vs" }`.

## Validate before saving

1. Parse your JSON.
2. Check it against `theme.schema.json`. If `ajv` is available:
   `npx ajv validate -s theme.schema.json -d mytheme.json`.
   Otherwise verify: all required keys present; every color matches
   `^#?[0-9a-fA-F]{6,8}$` (Monaco `tokens[].foreground` has NO `#`, everything
   else DOES); `type` is `dark`|`light`.
3. Run the contrast checks above.

## Apply it — two ways

**Preferred — import via Settings (validated by the app, no file surgery):**
Save the theme as `<name>.cate-theme.json` and tell the user:
"Open Settings → Appearance → Import…, then pick this file." Then select it in
the theme catalog.

**Direct — append to config.json (only if asked to apply without the UI):**
1. Read `<userData>/config.json` (paths above). If it doesn't parse, STOP.
2. Append your validated theme to the `customThemes` array (create it if absent).
   Ensure `id` is unique within that array.
3. To make it active now, set `activeThemeId` to your theme's `id`.
4. NEVER reorder or overwrite existing `customThemes`, and never touch unrelated
   keys. Changes apply on next launch or when settings are re-read.

See `examples/` for a complete dark and light theme to copy from.

© 0-AI-UG · MIT · 0-AI-UG/cate

Similar skills

SKILL.md skills catalog →

From the same set2

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor