inhabited-design
A Claude Code Agent Skill that turns "build me X for
Y" into a polished, target-user-rated web app, page, tool, or asset — where every
design choice traces to a deterministic random sample drawn from an enumerated pool,
not to model reach.
Each design input — framing, designer voice, inspiration seeds, hard constraint,
competitors, typography — is generated through Verbalized Sampling (VS): the model
enumerates a candidate pool conditioned on the brief, verbalizes why each candidate fits
or fails, filters to the survivors, then draws a sample deterministically via an external
Bash gate. The framing sentence is the master conditioning variable, so the resulting
variance is coherent rather than noisy. Every pick is logged with its enumerated pool,
per-candidate reasoning, and millisecond RNG seed to sampling.md — fully auditable and
replayable with random.Random(seed).sample(range(N), K).
Why
Generative design tools collapse toward a trained attractor — the same cream-and-serif,
the same safe layout. This skill forces variance to come from a logged, replayable sample
instead of the model's default, and makes every borrowed element name the specific
sampled input it derived from. The result is output that reads as authored, not generic,
and an audit trail that proves it.
How it works
A 14-step pipeline. Step 1 runs in the main conversation; Steps 2–14 run in dispatched
subagents that share state only through files. Six inputs are VS-sampled and locked to
sampling.md before any persona or design code is written:
| VS step | What's sampled |
|---|
| Framing (Steps 2–4) | The framing sentence — the master conditioning variable |
| Designer (Step 5) | Primary practitioner whose voice the build adopts |
| Seeds (Step 6) | Two inspiration seeds |
| Constraint (Step 7) | One or two hard constraints the critic enforces |
| Competitors (Step 8) | Two competitors plus converge/diverge judgment tables |
| Typography (Step 10) | Primary typeface, against a banned-canon list |
The build then runs through an adversarial critic loop (4-factor rubric: fits framing
/ fits sampled inputs / fits competitor judgment / fits axis manifestation, plus a slop
gate and constraint gate) and an ICP loop (7-factor target-user rubric: Usability,
Flare, Personality, Visual Design, Originality, Visual Impressiveness, Wow Factor) until
both converge. Photography is filled from stock (Unsplash/Pexels) at the end of every
iteration so the reviewer always sees real images in place.
Full depth lives in the protocol files under references/; SKILL.md is
the orchestration map.
What you get
The deliverable is a single self-contained index.html (the converged build lands at
.inhabited/final/index.html). That file is the design — a high-fidelity,
reviewable artifact, not code wired into your application. Putting it into a real product
is a separate handoff: re-implement it in your framework, or feed the HTML to a
code-integration step.
Everything else the run produces — the seeded sampling.md, the personas, the inspiration
bank, downloaded reference images, screenshots, and every iteration — lives under a single
.inhabited/ directory at the project root. Add it to your project's .gitignore.
Installation
This repo is both a Claude Code plugin marketplace and the plugin it serves.
Plugin marketplace (recommended — gives you updates)
/plugin marketplace add Shimin-Zhang/inhabited-design
/plugin install inhabited-design@inhabited-design
/reload-plugins
Pull future updates with /plugin marketplace update inhabited-design. Installed as a
plugin, the skill is namespaced — invoke it as /inhabited-design:inhabited-design
(a manual install uses the bare /inhabited-design); the run-mode keyword is the
argument, e.g. /inhabited-design:inhabited-design lite.
If /plugin isn't recognized, Claude Code is out of date — update it
(npm i -g @anthropic-ai/claude-code@latest, or brew upgrade claude-code) and retry.
Manual install
Copy just the skill directory into a skills path Claude Code scans:
git clone https://github.com/Shimin-Zhang/inhabited-design.git
cp -r inhabited-design/skills/inhabited-design ~/.claude/skills/ # personal
# or, per-project:
cp -r inhabited-design/skills/inhabited-design <your-project>/.claude/skills/
Then invoke it in a Claude Code session (see triggers below). Run modes (plugin installs prefix the namespace, e.g. /inhabited-design:inhabited-design auto):