skills/distill/SKILL.md
Strip UI to its essentials. Remove unnecessary complexity, redundant wrappers, excessive nesting, and over-engineered components. Use when asked to "simplify this", "strip it down", "make it cleaner", or when UI feels bloated.
npx skillsauth add howells/arc distillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<tool_restrictions>
AskUserQuestion — REQUIRED for all user decisions (core purpose, plan approval). Never ask questions as plain text. Keep context before the question to 2-3 sentences max.EnterPlanMode — BANNED. Execute phases below directly.ExitPlanMode — BANNED. You are never in plan mode.
</tool_restrictions>Strip UI to its essence. "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."
Announce at start: "I'm using the distill skill to simplify this UI."
<important> **This skill is user-interactive. Do NOT spawn agents.** Simplification requires judgment about what matters — it's collaborative, not automated.Never sacrifice:
Simplicity means removing obstacles between users and their goals — not eliminating features or clarity. </important>
<required_reading> Read these using the Read tool:
rules/interface/spacing.md — Spacing and hierarchy (cards are not required)rules/interface/design.md — Visual principlesreferences/design-philosophy.md — "Less but better" principles
</required_reading>Ask the user using AskUserQuestion:
AskUserQuestion:
question: "What is the ONE thing this component/page should accomplish?"
header: "Core purpose"
options:
- label: "Let me explain"
description: "I'll describe the core purpose"
- label: "Infer from code"
description: "You analyze and propose the core purpose"
Read all files for the target component/page. Look for:
flex flex-col items-start when items-start is the defaulthidden md:block chains that suggest wrong base statep-[17px] instead of scale valuestext-gray-900 dark:text-gray-100 instead of CSS variable flippingPresent findings as a distillation plan:
## Distillation Plan
### Remove (no value lost)
1. [Wrapper div at line X — adds no styling or semantics]
2. [Card container — spacing alone creates grouping]
### Simplify (same value, less code)
1. [15 Tailwind classes → 8 by removing redundancies]
2. [3-level nesting → flat with gap]
### Consolidate (multiple things → one)
1. [3 similar buttons → 1 with variant prop]
2. [Repeated icon+text pattern → shared component]
### Preserve (looks removable but isn't)
1. [Wrapper needed for overflow handling]
2. [Extra div required for animation transform-origin]
Ask using AskUserQuestion:
AskUserQuestion:
question: "Does this distillation plan look right? Anything I should preserve?"
header: "Distillation plan"
options:
- label: "Looks good"
description: "Proceed with simplification"
- label: "Adjust"
description: "I have changes or things to preserve"
- label: "Too aggressive"
description: "Keep more of the current structure"
Apply changes in this order (safest first):
<!-- Before: unnecessary wrapper -->
<div>
<div class="flex gap-4">
<div class="p-4">Content</div>
</div>
</div>
<!-- After: flat -->
<div class="flex gap-4">
<div class="p-4">Content</div>
</div>
<!-- Before: card for grouping -->
<div class="rounded-lg border p-4 shadow-sm">
<h3>Title</h3>
<p>Description</p>
</div>
<!-- After: spacing creates grouping -->
<div class="space-y-2">
<h3 class="font-semibold">Title</h3>
<p class="text-gray-600">Description</p>
</div>
Remove classes that are defaults or redundant:
flex-row (default for flex)items-stretch (default for flex)static (default position)visible (default)text-left (default for LTR)Use gap-* instead of nested containers with margins.
Ask for each decorative element: "Would the user notice if this was removed?" If no, remove it.
After each batch of changes:
Ask: "The simplified version is ready. Does it still feel complete?"
<arc_log>
After completing this skill, append to the activity log.
See: references/arc-log.md
Entry: /arc:distill — [Component/page] simplified ([elements removed, classes reduced])
</arc_log>
<success_criteria> Distill is complete when:
development
Go-live and shareability checklist covering the basics needed to make a project visitable, shareable, and ready for a first real audience. Use when asked to "launch", "go live", "make this shareable", "get this ready to show people", or prepare a project for a public URL.
development
Discover architectural friction and propose structural refactors with competing interface options. Focuses on deepening shallow modules, extracting grouped concerns into packages/modules, breaking up god files, reducing duplication, and improving testability. Use when asked to "improve the architecture", "find refactoring opportunities", "deepen modules", "consolidate coupling", "break up god components", "extract this into a package", "make this more testable", or "find architectural friction".
development
Create, review, or revise a concise project vision document that captures what a project is, who it is for, why it exists, success criteria, constraints, non-goals, and decision principles. Use when starting a new project, clarifying product direction, aligning a codebase for future agent work, defining a north star, or turning a vague idea into docs/vision.md.
tools
Use when starting any conversation - establishes Arc's skill routing, instruction priority, and bootstrap rules