Pack reference
The pack file format, validation rules, row styles and flags, extras, effects and spinner ids.
For what packs are and how to use them, see Packs.
File format
Packs are read from ~/.claude/glowup/packs, or $CLAUDE_CONFIG_DIR/glowup/packs when that variable is set. The file name is the pack name, and comments are allowed.
{
"format": 1, // required
"name": "neon", // lowercase letters, digits, dashes; 1-40
"extends": "classic", // another pack to start from
"description": "neon on deep purple",
"colors": {
"theme": "classic", // a theme to start the palette from
"palette": { "accent": "#ff3ec8", "text": "#f0e6ff" },
"bg": "#1a0b33", // what braille and half-block fades blend toward
"rows": "cards", // classic | cards | minimal | retro
"border": "bold", // round | single | double | bold | classic
"borderColor": "#ff3ec8",
"gradient": ["#ff3ec8", "#38e8ff"],
"extras": { "hp": true, "combo": true },
"rowFlags": { "labels": false, "markers": true, "xp": true },
"meters": "dither", // default | dither
"dividers": true, // a numbered rule above each prompt
"glyphs": { "read": "»" }, // tool-kind glyphs, by key
"hearts": ["●", "○"], // full, then empty
"words": ["Brewing", "Dialing in"], // spinner words
"pet": { "body": "#7aa2f7", "light": "#a9c1ff", "shade": "#4a6fc4" } // Clawd's colors
},
"motion": {
"spinner": "orb-states", // stock | comet | eyes | orb-states | clawd | shimmer
"shimmer": 2, // 0 none, 1 soft, 2 fast
"color": "#38e8ff", // defaults to the palette's accent
"field": { "shape": "simplex", "speed": 0.3, "scale": 0.36, "dither": "4x4" }
},
"sound": {}, // reserved for a later release
"voice": {} // reserved for a later release
}Every field except format and name is optional. palette takes the color roles listed in the theme reference. A layer can also be the name of another pack: "motion": "crt" uses crt's motion layer.
Checks and limits
- The file is at most 64 KB.
formatmust be1. A higher number is refused withmade for a newer glowup.- Colors are
#rrggbb. - Names and the description must be printable, with no control, zero-width or bidirectional characters. A description is at most 80 characters.
- Unknown keys are refused, except
soundandvoiceat the top level. extendsand layer references together go at most 8 deep. A loop or a ninth level is refused, with the chain named in the message.- An unknown spinner id falls back to
stockwith a notice, so a pack made for a later glowup still loads. - Any other bad value refuses the layer it is in, and that layer falls back to
classic.
/glowup pack <url> accepts https:// only, waits up to 10 seconds, and validates the whole file and its extends chain before writing. It refuses a built-in name, or the name of an installed pack unless --force is given.
Glyphs, hearts and spinner words
A pack can carry what a theme file carries beyond colors, laid over the theme the pack starts from.
colors.glyphsis an object of glyph keys, each one width-1 character. Keys you leave out keep the theme's glyph. The keys are the ones in the theme reference.colors.heartsis two width-1 characters, full then empty.colors.wordsis a list of spinner words, each at most 24 characters. An empty list keeps the theme's words.
A glowup that predates these keys refuses the pack's colors layer as an unknown key. They are ignored while /glowup theme <name> overrides the pack's theme. A studio link or /glowup pack save writes them only when they differ from the theme.
Clawd's colors
colors.pet recolors Clawd with body, light and shade, each #rrggbb. They replace his orange body, its highlight and its shadow (#d77757, #ee9f7b, #a8553b); a key you leave out keeps its default, and the eyes and outfits do not change. The shiny pet stays gold: the unlock wins over a pack. Unlike glyphs, hearts and words, colors.pet survives a /glowup theme override. pet merges per key down an extends chain, and a studio link or /glowup pack save writes it only when it is set. A glowup that predates it refuses the pack's colors layer as an unknown key.
Row styles
Styles wrap or prefix a transcript row; the content Claude Code draws inside it is unchanged. Every style except classic adds a one-column left margin.
| Style | Your prompt | Claude's reply | Tool call |
|---|---|---|---|
classic | Claude Code's | Claude Code's | Claude Code's, plus the theme's kind glyph |
cards | An accent side bar ▎ and a you label | A dim side bar, and a claude label on the first block of a reply | A dim bordered card with a mark: ✓, ✗, ■ for interrupted, … while running |
minimal | A › text line | Claude Code's | A dim one-line · Read src/auth.ts once it finishes cleanly |
retro | A [YOU] tag on its own line above your prompt | A [CLAUDE] tag on the first block | A [READ ]-style tag, then [ OK ], [FAIL], [STOP] or [....] |
Not styled: notifications, messages from other agents, prompts expanded with ctrl+o or --verbose, the folded "Read 3 files" line, and tool progress. Outside fullscreen, rows already in scrollback keep the style they were printed with.
Row flags
colors.rowFlags holds three booleans.
| Flag | Default | Effect |
|---|---|---|
labels | true | The you and claude labels in cards, and [YOU] and [CLAUDE] in retro. |
markers | false | In cards, your prompt starts with ▶ in the accent color and Claude's reply with ◆ in the read color, instead of the side bar. Later blocks of one reply are indented to line up. |
xp | false | In cards, a +N XP tag in the edit color, right-aligned above Claude's reply. N is the number of successful tool calls in a row this turn when the reply first drew; the tag is omitted at 0. |
cozy turns labels off. arcade turns labels off and markers and xp on.
Extras
hpreplaces the hearts with an HP bar:HP ████████░░ 38% context leftin the band,HP ████████░░ 38% weekly limit leftin the pane's status box.comboshowsCOMBO x3once three tool calls in a row succeed in one turn. An error, a failed test or a new turn resets it.
Effects
Three effects are drawn by glowup itself, so a pack switches them on from its JSON and still installs from a URL.
-
colors.meters: "dither"replaces the hearts or HP bar in the pane's status box with one bar per usage window,5handwk, or onectxbar when the session reports no windows. Each bar ramps fromaccenttotext, dissolves through▓▒░, and shows what is used asfaintdots, followed by the percent left and the reset time. -
colors.dividers: truedraws░▒▓━━ 03 ━━━▓▒░above each of your prompts, numbered by turn, infaintwith the number inaccent. -
motion.fieldfills the docked pane's open rows, between the tab and the status box, with animated noise dithered into braille dots of one color, the palette'sfaintunlesscolorsets it."simplex"is Paper's simplex shape, two layers of noise drifting past each other, and"warp"is noise folded through itself. glowup draws it live, 10 frames a second by default, and holds it still under/glowup motion reduced. The inline drawer has no open rows, so it shows no field.The object form takes the knobs of Paper's dithering shader, so a
simplexlook tuned there carries over:speed(0 to 4),scale(0.05 to 4, smaller is finer),rotation(degrees),offsetXandoffsetY(-1 to 1, in the pane's shorter side),density(0.2 to 2),warp(0 to 8, thewarpshape only),sizeanddither(2x2,4x4or8x8). The pane's height stands for Paper's 720 px canvas, so copyscale,rotationand the offsets as they are. Paper's front color iscolor; its back color is the terminal background.fps(1 to 12) sets the frame rate.sizeis not Paper's: it counts braille dots per side of one dither pixel, from 1 to 4. A 24-row pane is 96 dots tall, where Paper's 720 px canvas at size 3 is 240 dither pixels tall, so leavesizeat its default of1to come closest to Paper.a simplex field "motion": { "field": { "shape": "simplex", "speed": 0.3, "scale": 0.36, "rotation": 24, "offsetX": -0.22, "offsetY": 0.26, "dither": "4x4" } }The field has a cost: Claude Code repaints all of it every frame. On an 88×24 pane at 10 frames a second it takes about a quarter of one CPU core more than the same pack without a field. A slow field looks the same at a lower
fps.
A renderer plugin that answers for the pack draws its own version in place of these.
Spinners
| Id | Cells | Looks like |
|---|---|---|
stock | Claude Code's | Claude Code's own line, untouched. |
comet | 3×2 | A comet circling a faint ring, in braille dots. |
eyes | 9×2 | Two eyes that look around and blink, in half blocks. |
orb-states | 4×2 | A braille orb whose motion follows the activity: thinking, searching, working, running, agents. |
clawd | 5×2 | Clawd waving, in his own color. |
shimmer | 1×1 | A still ✻ with a shimmering word. |
The shimmer is a wave of color across the spinner word, between the gradient's two colors, or the accent and text colors when there is no gradient. 1 is soft and 2 is fast.
A non-stock spinner replaces Claude Code's whole spinner line, and Claude Code gives a mod no way to show its token count there, so the line shows elapsed time and esc to interrupt instead. The stock spinner keeps the token count. While Claude Code shows its own message, such as Compacting conversation…, its line is shown instead of the pack's.