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.
- 01Instrumenta tool someone uses every day
- 02Specrows of figures, logs, recordsthis page
- 03Editoriala front page with a point of view
- 04Ateliera small set of work, hung rather than framed
- 05Quiet luxurysomething expensive and still
- 06Soft servicehealth, school, care, a local business
- 07Signala technical product, dark, precise
- 08Civica public institution or a public dataset
- 09Broadsheetlong reading
- 10Playwhen delight is the product
Type
One ramp. Most steps go unused on a given screen; that unused range is the design.
- text-3xlDecided3.5rem
- text-2xlDecided2.25rem
- text-xlDecided1.5rem
- text-lgDecided1.125rem
- text-mdDecided, body0.9375rem
- text-smDecided, quiet0.8125rem
- text-xsDECIDED, CAPS0.75rem
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.
Components
Controls exist only where a behavior exists. Every one ships hover, focus-visible, and disabled.
| Token | Value | Law |
|---|---|---|
| --dur-1 | 120ms | hover, color, borders |
| --dur-2 | 180ms | menus, drawers |
| --dur-3 | 240ms | dialogs, page-level |
| --ease-out | cubic-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.