unmachined 是做什麼的?
Make it read written and look made, not generated.
AI output converges on the statistical center: the same vocabulary, the same cadence, the same purple gradient on the same centered hero. This skill holds two lines of defense. First, catalogs of known tells with severity tiers. Second, a variety requirement, because the fix becomes a new tell when every output converges on the same alternative. Never swap one monoculture for another.
Priorities: text first, design and layout equal second, branding last.
Always-on (native enforcement)
Once installed, the skill can stay on for the whole CLI session so agents do not write AI-text slop unless the user opts out.
| Mode | Behavior |
|---|---|
| always_on: true | Every user-facing text (and optional UI) is drafted under anti-slop rules and scanned before ship. No need to type /unmachined each time. |
| always_on: false | Opt-in only: run /unmachined … when you want enforcement. |
| not onboarded | Ask once (see onboard). Until answered, treat as off. |
Full contract: references/always-on.md.
Onboarding (required once)
On first use, or when onboarded_at is missing, ask:
Turn unmachined always-on for this CLI so all user-facing writing is anti-slop by default? Or leave off (only when you invoke the skill)?
Then save via:
python3 scripts/onboard.py # interactive
python3 scripts/onboard.py --always-on # native on, text+ui
python3 scripts/onboard.py --always-on --text-only
python3 scripts/onboard.py --always-off
python3 scripts/onboard.py --show # status
Config: project .unmachined.json overrides ~/.config/unmachined/config.json.
Env UNMACHINED_ALWAYS_ON=1|0 overrides the boolean for a single session.
Agent duties when always_on is true
- Resolve config (
scripts/onboard.py --showor read the JSON files). - Load
references/text-tells.mdbefore drafting user-facing prose. - Write clean; do not draft slop intending to clean later.
- Run
scripts/scan_text.pyon the deliverable; score >= threshold blocks ship. - If
uiis in surfaces and the task is UI, also load design refs andscan_ui.pywhen editing UI source. - First content write of the session: one short line that always-on is active.
Out of scope: pure logic without user-facing strings; this skill's ban-list docs; raw logs and data dumps. See always-on.md.
Verbs
| Invocation | Behavior |
|---|---|
/unmachined <task> (default) | Build or write with all applicable rules active from the start |
/unmachined onboard | Ask always-on preference; write config |
/unmachined always-on | Enable always-on and save |
/unmachined always-off | Disable always-on and save |
/unmachined status | Print resolved config |
/unmachined audit <target> | Score and report findings by severity. Never edit |
/unmachined fix <target> | Audit, repair, verify, and summarize the changes |
/unmachined text <target> | Run only the prose and copy pipeline |
/unmachined ui <target> | Run only the interface and frontend pipeline |
/unmachined diff [base] | Audit only changed lines and their necessary context |
Hosts without slash commands use the same words in natural language.
Dispatch contract
- Parse an explicit verb first. If none is present, use the default build
workflow. A file named
auditorfixremains a target when supplied as a path. - If verb is
onboard/always-on/always-off/status, handle config only (shellscripts/onboard.py…). - If no config
onboarded_atand the task will write user-facing text, run onboarding once before continuing (or instruct the user to run the script). - If always_on is true, apply the always-on agent duties even when the user
did not type
/unmachined. - Resolve the smallest target that satisfies the request. For
diff, use the working-tree diff by default. - State detected surfaces in one short line when both text and UI apply.
auditanddiffare read-only unless the user asks to fix.- Load only the references named by the chosen pipeline.
Text pipeline (main priority)
- Read
references/text-tells.md. Microcopy also needsreferences/voice-and-copy.md. - Draft or edit under the rules (em-dash ban; no critical vocabulary; concrete claims; honesty gate).
- Run the deterministic scanner before self-judgment:
python3 scripts/scan_text.py <file> [file...] [--json] [--threshold 40] [--mode prose|chat|ui]Stdin works for pasted content. Score >= threshold blocksfix/ build / always-on delivery. Fix criticals first. - Self-critique once: "what still reads as AI-generated?" Revise for cadence and variety. Do not sand every sentence to the same length.
- Honesty gate: every number is real or a labelled placeholder. No invented metrics, quotes, or anecdotes.
Design pipeline
- Read
references/design-tells.mdandreferences/design-system.md. Audits also needreferences/audit-playbook.md.python3 scripts/scan_ui.py <src-dir> [--json] [--threshold 40] [--tailwind-version auto|3|4] - For Next.js/Tailwind/shadcn, read
references/stack-rules.mdand match the project pin. - Structure before color; one justified aesthetic risk; WCAG 2.2 AA; reduced motion; focus visible; 320-768px layouts.
Cross-output variety
Consecutive outputs must not share the same layout skeleton, display font, or accent hue unless the project design system requires it.
Resolved rule conflicts
- Em-dash: banned in generated text. Hyphen, comma, or restructure.
- Serif type: only with justification; not a lazy default.
- Metrics: real, cited, or labelled placeholder.
- Eyebrows / section numbers: only when they encode a true sequence.
Reference index
| File | Load when |
|---|---|
references/always-on.md | Onboard, always-on, or session writing policy |
references/text-tells.md | Any text work |
references/voice-and-copy.md | Microcopy, UX writing |
references/design-tells.md | Any UI work |
references/design-system.md | Building or restyling UI |
references/audit-playbook.md | audit or fix on existing UI |
references/stack-rules.md | Next.js / Tailwind / shadcn |
references/host-support.md | Install paths and host notes |
scripts/onboard.py | Onboarding and always-on toggles |
scripts/config_show.py | Status |
scripts/scan_text.py | Every text deliverable before shipping |
scripts/scan_ui.py | UI source audits |
Output discipline
This skill's own reports must pass its own rules. Findings are concrete: quote the line, name the rule, show the fix. No praise padding. Never claim a scan, render, or test that did not run.