d-pill

A design skill for agents · v1.5.1

Interfaces that
look decided.

d-pill commits one direction, sets type and color as roles, and passes a critique before the work is called done. Now the critique has a machine half.

git clone https://github.com/srivtx/d-pill.git ~/.agents/skills/d-pill

# or, from any skills runner:
npx skills add srivtx/d-pill

MIT. Zero dependencies. Offline. The scripts are Python's standard library and nothing else.

Directions

The ten starting points. One direction per surface; the only mix allowed is a single borrowed slot, written down.

Type

One ramp. Most steps go unused on a given screen; that unused range is the design.

Color

Roles, not moods. One hue variable re-derives the whole quiet side; the accent is scarce on purpose. Flip the theme with the control in the header — both palettes clear their floors.

bg · bg-subtle · surface · ink · ink-muted · line · accent · accent-soft — verified against the export, python3 scripts/check-tokens.py.

Space

A fixed scale. The bars below are the tokens themselves, drawn at true width.

4
8
16
32
64
128

Components

Controls exist only where a behavior exists. Every one ships hover, focus-visible, and disabled.

The one you log in with.
Token · value · where it is law
TokenValueLaw
--dur-1120mshover, color, borders
--dur-2180msmenus, drawers
--dur-3240msdialogs, page-level
--ease-outcubic-bezier(0.16, 1, 0.3, 1)arrival

Motion

Motion shows where something came from or what changed. It does not perform. Hover or focus these:

The gate

The critique is now two halves. The machine checks the scales and the floors; the judgment checks direction, focal point, and one weather. A clean machine pass is permission to be judged, not a pass.

$ python3 scripts/critique.py src/

src/orders.css:41:8 [dpill/space-off-scale] error: 17px in padding
  is not on the space scale (4px 8px 12 16 24 32 48 64 96 128 px).
  Use the token, or write the exception down.
src/orders.css:42:3 [dpill/transition-all] error: transition: all
  animates layout. Name the properties that actually change.

2 files checked — 2 error(s), 0 warning(s); exit 2.

Findings go to stderr in file:line:col [rule] severity form. Exit 2 with stderr is the Claude Code hook contract — the agent receives the findings as the reason to react, fixes them, and re-runs. Same engine, three shells: the CLI, a zero-dependency MCP server (scripts/mcp-server.py), and a GitHub Action (uses: srivtx/d-pill@v1).

This page passes its own gate: python3 scripts/critique.py docs/index.html — exit 0, in CI, on every push.