@ericrisco/rsc 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  [![npm](https://img.shields.io/npm/v/@ericrisco/rsc?color=63d68a&labelColor=12161c&label=npm)](https://www.npmjs.com/package/@ericrisco/rsc)
8
8
  [![downloads](https://img.shields.io/npm/dm/@ericrisco/rsc?color=63d68a&labelColor=12161c&label=downloads)](https://www.npmjs.com/package/@ericrisco/rsc)
9
- [![skills](https://img.shields.io/badge/skills-264-63d68a?labelColor=12161c)](#the-catalog)
9
+ [![skills](https://img.shields.io/badge/skills-281-63d68a?labelColor=12161c)](#the-catalog)
10
10
  [![license](https://img.shields.io/badge/license-MIT-63d68a?labelColor=12161c)](LICENSE)
11
11
  [![stars](https://img.shields.io/github/stars/ericrisco/rsc-harness?color=63d68a&labelColor=12161c)](https://github.com/ericrisco/rsc-harness/stargazers)
12
12
 
@@ -17,7 +17,7 @@ skills that fit — one at a time — into every assistant you pick, and keeps t
17
17
  equipped as you work.
18
18
 
19
19
  From *"document my company"* to *"ship a FastAPI service"* to *"grow my YouTube
20
- channel"* — **264 skills across 21 domains**, every one researched against live
20
+ channel"* — **281 skills across 23 domains**, every one researched against live
21
21
  2025-2026 sources and **adversarially scored ≥ 8.5/10** before it shipped.
22
22
 
23
23
  ```bash
@@ -26,7 +26,7 @@ npx @ericrisco/rsc # plain-language wizard — no jargon, installs wh
26
26
 
27
27
  <br>
28
28
 
29
- <img src="https://raw.githubusercontent.com/ericrisco/rsc-harness/main/site/meta-harness.png" alt="rsc — the model (Claude, GPT, Gemini) is the brain your coding agent rents, and you already have that. Claude Code, Codex and opencode sit in the middle. Below them the rsc meta-harness adds everything the model lacks: memory (02-DOCS/) so it stops inventing, arms (01-TOOLS/) so it can execute, a trade (264 skills) so it stops guessing, and reflexes (deterministic hooks) so it cannot forget the rule mid-session." width="960">
29
+ <img src="https://raw.githubusercontent.com/ericrisco/rsc-harness/main/site/meta-harness.png" alt="rsc — the model (Claude, GPT, Gemini) is the brain your coding agent rents, and you already have that. Claude Code, Codex and opencode sit in the middle. Below them the rsc meta-harness adds everything the model lacks: memory (02-DOCS/) so it stops inventing, arms (01-TOOLS/) so it can execute, a trade (281 skills) so it stops guessing, and reflexes (deterministic hooks) so it cannot forget the rule mid-session." width="960">
30
30
 
31
31
  **The model is the only part your agent already has.** `rsc` is the meta-harness that adds
32
32
  the rest: a **memory** so it stops inventing, **arms** so it can execute, a **trade** so it stops
@@ -139,10 +139,10 @@ $ rsc
139
139
  ██████╗ ███████╗ ██████╗ ← animated gradient wordmark
140
140
  ██╔══██╗██╔════╝██╔════╝
141
141
  ██████╔╝███████╗██║
142
- 264 skills · one CLI · zero bloat
142
+ 281 skills · one CLI · zero bloat
143
143
 
144
144
  What do you want to do? ↑↓ move · enter select
145
- ❯ Base install — the essentials (orient + suggest + bro + harness + init)
145
+ ❯ Base install — the essentials (8 skills)
146
146
  Base + Spec-Driven Development — specify → plan → implement → ship
147
147
  Pick skills by hand, by area
148
148
  ```
@@ -185,9 +185,9 @@ rsc # plain-language wizard (recommended) — p
185
185
  rsc add fastapi postgresdb # install specific skills, by name
186
186
  rsc add youtube-api remotion-video # …grow a channel, edit with Remotion
187
187
  rsc add fastapi --target claude,codex # install into several assistants at once
188
- rsc install --profile minimal # the floor: orient + suggest + bro + harness + init
188
+ rsc install --profile minimal # the base: orient + suggest + bro + unslop + show-me + eli5 + harness + init
189
189
  rsc install --profile core # floor + the full SDD workflow
190
- rsc install --profile full # everything (all 264)
190
+ rsc install --profile full # everything (all 281 skills)
191
191
  rsc install --profile full --without go
192
192
  rsc consult "I want to launch a SaaS" # recommend only, no install
193
193
  rsc registry refresh # write .rsc/skill-registry.{json,md}
@@ -253,13 +253,13 @@ just asks in plain language.
253
253
 
254
254
  ## The catalog
255
255
 
256
- 264 skills, grouped by what you're trying to do. Click any skill to read its
256
+ 281 skills, grouped by what you're trying to do. Click any skill to read its
257
257
  `SKILL.md`. It fires on its own when a task matches.
258
258
 
259
259
  ### 🧭 Core & control plane
260
260
  The front door and the workspace brain.
261
261
 
262
- [init](skills/init/) · [harness](skills/harness/) · [orient](skills/orient/) · [suggest](skills/suggest/) · [bro](skills/bro/) · [author-skill](skills/author-skill/) · [sdd-init](skills/sdd-init/)
262
+ [init](skills/init/) · [harness](skills/harness/) · [orient](skills/orient/) · [suggest](skills/suggest/) · [bro](skills/bro/) · [unslop](skills/unslop/) · [author-skill](skills/author-skill/) · [sdd-init](skills/sdd-init/)
263
263
 
264
264
  > **harness** is the Karpathy *chaos→knowledge* engine — a `01-TOOLS/` layer (one
265
265
  > folder per provider, each with a working `test_connection`) and a `02-DOCS/`
@@ -382,7 +382,7 @@ Three engines + engine-agnostic disciplines. Every engine skill pins the current
382
382
 
383
383
  ### 🧠 Knowledge & meta
384
384
 
385
- [knowledge-ops](skills/knowledge-ops/) · [codebase-onboarding](skills/codebase-onboarding/) · [research-ops](skills/research-ops/) · [decision-records](skills/decision-records/) · [continuous-learning](skills/continuous-learning/) · [skill-scout](skills/skill-scout/) · [context-budget](skills/context-budget/) · [roast-me](skills/roast-me/) · [fable-operator](skills/fable-operator/)
385
+ [knowledge-ops](skills/knowledge-ops/) · [codebase-onboarding](skills/codebase-onboarding/) · [research-ops](skills/research-ops/) · [decision-records](skills/decision-records/) · [continuous-learning](skills/continuous-learning/) · [skill-scout](skills/skill-scout/) · [context-budget](skills/context-budget/) · [roast-me](skills/roast-me/) · [show-me](skills/show-me/) · [eli5](skills/eli5/) · [fable-operator](skills/fable-operator/)
386
386
 
387
387
  ---
388
388
 
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "1.1.1",
2
+ "version": "1.1.3",
3
3
  "counts": {
4
- "skills": 278
4
+ "skills": 281
5
5
  },
6
6
  "skills": [
7
7
  {
@@ -565,6 +565,7 @@
565
565
  "no-jargon"
566
566
  ],
567
567
  "recommends": [
568
+ "unslop",
568
569
  "brand-voice",
569
570
  "technical-writing",
570
571
  "translation-l10n"
@@ -1711,6 +1712,29 @@
1711
1712
  ],
1712
1713
  "profiles": []
1713
1714
  },
1715
+ {
1716
+ "id": "eli5",
1717
+ "description": "Use when a topic must be explained from zero to someone who knows nothing about it: one page, big pictures, very few words, everyday analogies, no jargon and nothing assumed. NOT the smallest in-conversation visual for someone already following (that is `show-me`), NOT a course with exercises (that is `course-builder`).",
1718
+ "tags": [
1719
+ "eli5",
1720
+ "explain",
1721
+ "beginner",
1722
+ "simple",
1723
+ "analogy",
1724
+ "no-jargon",
1725
+ "explicame"
1726
+ ],
1727
+ "recommends": [
1728
+ "show-me",
1729
+ "technical-writing",
1730
+ "course-builder"
1731
+ ],
1732
+ "profiles": [
1733
+ "minimal",
1734
+ "core",
1735
+ "full"
1736
+ ]
1737
+ },
1714
1738
  {
1715
1739
  "id": "elixir",
1716
1740
  "description": "Use when writing or refactoring Elixir/OTP on the BEAM — GenServers, supervision trees and restart strategies, pattern matching, mix projects and releases — or when processes misbehave (restart loops, mailbox growth, call timeouts). NOT a Phoenix web app, LiveView, Ecto or channels (that is `phoenix`).",
@@ -4687,6 +4711,31 @@
4687
4711
  ],
4688
4712
  "profiles": []
4689
4713
  },
4714
+ {
4715
+ "id": "show-me",
4716
+ "description": "Use when the user needs to see how something works instead of reading about it: picks the smallest visual that carries the point — pseudocode, call tree, file tree, component tree, Mermaid, a shaped diff, or one HTML page. NOT visual identity (that is `design-loop`), NOT slides (that is `presentations`), NOT a from-zero explainer (that is `eli5`).",
4717
+ "tags": [
4718
+ "show-me",
4719
+ "explain",
4720
+ "diagram",
4721
+ "visual",
4722
+ "mermaid",
4723
+ "diff",
4724
+ "call-tree",
4725
+ "ensename"
4726
+ ],
4727
+ "recommends": [
4728
+ "eli5",
4729
+ "presentations",
4730
+ "technical-writing",
4731
+ "codebase-onboarding"
4732
+ ],
4733
+ "profiles": [
4734
+ "minimal",
4735
+ "core",
4736
+ "full"
4737
+ ]
4738
+ },
4690
4739
  {
4691
4740
  "id": "simplify-code",
4692
4741
  "description": "Use when correct working code is unnecessarily hard to read, change or verify and needs behaviour-preserving simplification in a bounded scope. Characterizes the observable contract, removes accidental complexity one concept at a time and proves equivalence. NOT fixing a failure (`debug`), NOT read-only diff judgment (`review`/`code-review`).",
@@ -5362,6 +5411,29 @@
5362
5411
  "full"
5363
5412
  ]
5364
5413
  },
5414
+ {
5415
+ "id": "unslop",
5416
+ "description": "Use when a written text must be audited against a named catalogue of AI tells before it ships: puffery, `not just X but Y`, the rule of three, em dashes, filler, hedging, abstract metaphor nouns. Names each hit and fixes it. NOT the register rewrite in the user's own voice (that is `bro`), NOT a reusable voice guide (that is `brand-voice`).",
5417
+ "tags": [
5418
+ "unslop",
5419
+ "ai-tells",
5420
+ "editing",
5421
+ "audit",
5422
+ "slop",
5423
+ "publish-check",
5424
+ "revisar-texto"
5425
+ ],
5426
+ "recommends": [
5427
+ "bro",
5428
+ "brand-voice",
5429
+ "technical-writing"
5430
+ ],
5431
+ "profiles": [
5432
+ "minimal",
5433
+ "core",
5434
+ "full"
5435
+ ]
5436
+ },
5365
5437
  {
5366
5438
  "id": "unsloth",
5367
5439
  "description": "Use when fine-tuning an open-weight LLM fast on ONE GPU with low VRAM — Unsloth's fast model loaders with 4-bit QLoRA and the trl trainer, response-only loss masking so the prompt is not trained on, GRPO reasoning fine-tunes, and export to merged 16-bit, GGUF or the Hub. NOT whether, why or which method to fine-tune (that is `finetuning`), NOT running the exported GGUF locally (that is `ollama`), NOT serving-engine flags and throughput (that is `vllm`), NOT building the JSONL dataset (that is `training-data`).",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -4,7 +4,7 @@
4
4
  // catalog grows deliberately, never silently.
5
5
 
6
6
  export const DOMAINS = [
7
- { title: 'Core & control plane', ids: ['init', 'harness', 'orient', 'suggest', 'bro', 'author-skill', 'sdd-init'] },
7
+ { title: 'Core & control plane', ids: ['init', 'harness', 'orient', 'suggest', 'bro', 'unslop', 'author-skill', 'sdd-init'] },
8
8
  { title: 'Spec-Driven Development', ids: ['sdd', 'constitution', 'idea-refinement', 'specify', 'clarify', 'plan', 'tasks', 'analyze', 'decision-challenge', 'implement', 'source-grounded-development', 'verify', 'review', 'simplify-code', 'ship', 'debug', 'worktrees', 'parallel'] },
9
9
  { title: 'Run a business', ids: ['finance-ops', 'invoicing', 'bookkeeping', 'pricing', 'sales-pipeline', 'lead-gen', 'cold-outreach', 'proposals', 'contracts', 'customer-support', 'client-onboarding', 'retention', 'hiring', 'people-ops', 'inventory', 'logistics-ops', 'procurement', 'meeting-notes', 'sop-builder', 'project-ops'] },
10
10
  { title: 'Raise & model money', ids: ['pitch-deck', 'investor-materials', 'financial-model', 'fundraising', 'unit-economics', 'grants'] },
@@ -26,7 +26,7 @@ export const DOMAINS = [
26
26
  { title: 'Ship & operate — quality & security', ids: ['code-review', 'security-scan', 'secure-coding', 'testing-py', 'testing-web', 'testing-go', 'e2e-testing', 'accessibility', 'performance', 'error-handling', 'observability'] },
27
27
  { title: 'Motion & interface craft', ids: ['design-eng', 'animate', 'animate-expo', 'review-animations', 'improve-animations', 'find-animation-opportunities', 'animation-vocabulary', 'apple-design', 'prototype'] },
28
28
  { title: 'Design & content craft', ids: ['design-loop', 'design', 'design-dna', 'presentations', 'course-storytelling', 'course-builder', 'technical-writing', 'translation-l10n'] },
29
- { title: 'Knowledge & meta', ids: ['knowledge-ops', 'codebase-onboarding', 'research-ops', 'decision-records', 'continuous-learning', 'skill-scout', 'context-budget', 'roast-me', 'fable-operator'] },
29
+ { title: 'Knowledge & meta', ids: ['knowledge-ops', 'codebase-onboarding', 'research-ops', 'decision-records', 'continuous-learning', 'skill-scout', 'context-budget', 'roast-me', 'show-me', 'eli5', 'fable-operator'] },
30
30
  ];
31
31
 
32
32
  export function allDomainIds() {
@@ -9,7 +9,7 @@
9
9
  //
10
10
  // A lift measured against a control that read the answer key is a lower bound of unknown size.
11
11
  // Publishing it as a number is the claim-without-evidence this repo keeps paying for (P2), and it
12
- // feeds skill-harden's --holdout, which decides what enters a 264-skill catalog.
12
+ // feeds skill-harden's --holdout, which decides what enters a 281-skill catalog.
13
13
  //
14
14
  // This module answers the question deterministically, from the transcripts themselves — never from
15
15
  // what an agent says about its own behaviour, which is the way this fails open.
package/scripts/rsc.js CHANGED
@@ -161,17 +161,21 @@ async function wizard() {
161
161
  const m = loadManifest();
162
162
  await banner(m.counts.skills);
163
163
  say(' the skill catalog for your assistant (Claude Code · Codex · Cursor · Gemini · Antigravity)\n');
164
+ // The base set is READ from the manifest, never enumerated here: a hand-kept list in a menu
165
+ // label is parallel accounting (P3), and it silently starts lying the day a skill's profiles
166
+ // change. The exact ids are printed before the install confirmation either way.
167
+ const baseIds = skillsForProfile(m, 'minimal');
164
168
  // Navigable loop: esc / "← Back" / "no" all return here instead of quitting.
165
169
  for (;;) {
166
170
  const choice = await select('What do you want to do?', [
167
- { key: 'base', label: 'Base install — the essentials (orient + suggest + bro + harness + init)' },
171
+ { key: 'base', label: `Base install — the essentials (${baseIds.length} skills)` },
168
172
  { key: 'sdd', label: 'Base + Spec-Driven Development — the specify → plan → implement → ship flow' },
169
173
  { key: 'manual', label: 'Pick skills by hand, by area' },
170
174
  ]);
171
175
  if (choice === null) { say('\nOK — nothing installed. Anytime: npx @ericrisco/rsc'); return; }
172
176
 
173
177
  let ids;
174
- if (choice === 'base') ids = skillsForProfile(m, 'minimal');
178
+ if (choice === 'base') ids = baseIds;
175
179
  else if (choice === 'sdd') ids = skillsForProfile(m, 'core');
176
180
  else if (choice === 'manual') {
177
181
  const picked = await manualSelect();
@@ -2,7 +2,7 @@
2
2
  name: bro
3
3
  description: "Use whenever the user asks to make an answer or draft sound human, natural, plain-spoken or less AI-written — including a terse bro after the last response. Rewrites or drafts in the same language while preserving meaning, facts and channel. NOT a reusable brand voice (that is `brand-voice`), NOT translation (that is `translation-l10n`)."
4
4
  tags: [bro, human-writing, humano, plain-language, natural-language, rewrite, no-jargon]
5
- recommends: [brand-voice, technical-writing, translation-l10n]
5
+ recommends: [unslop, brand-voice, technical-writing, translation-l10n]
6
6
  profiles: [minimal, core, full]
7
7
  origin: risco
8
8
  ---
@@ -57,6 +57,14 @@ plain language instead of deleting precision.
57
57
  | Promise the result is undetectable as AI | No rewrite can honestly guarantee that | Promise clarity and naturalness, not detector outcomes |
58
58
  | Announce and justify every edit | The preamble becomes the same friction the user asked to remove | Lead with the finished words |
59
59
 
60
+ ## Where this ends
61
+
62
+ `unslop` owns the other half of this job: the **named** audit of a text that already exists, tell by
63
+ catalogued tell (puffery, `not just X but Y`, em dashes, bold-label lists, hedging), run before the
64
+ text ships. This skill owns the **register**: which language, which relationship, which channel, and
65
+ the cadence that fits them. A bare "bro" is always this skill. "Check this for AI tells before I
66
+ publish it" is `unslop`. When a text needs both, audit first, register last.
67
+
60
68
  ## Output boundary
61
69
 
62
70
  Treat the rewritten text as an artifact: keep harness commentary outside it. If the task also
@@ -46,6 +46,10 @@ should_not_trigger:
46
46
  route_to: "simplify-code"
47
47
  why: "The requested source-code simplification is owned by simplify-code; 'rewrite' does not make it a prose task."
48
48
 
49
+ - prompt: "Revisa este README antes de publicarlo y dime qué frases suenan a IA, una por una."
50
+ route_to: "unslop"
51
+ why: "A named, per-phrase audit of an existing text before shipping is unslop's contract; bro rewrites the register instead of enumerating tells."
52
+
49
53
  capability:
50
54
  - scenario: "The previous assistant answer is a long Spanish status update full of headings, repeated summaries, corporate jargon and fake enthusiasm. Rewrite it for a client while preserving a June 30 deadline, a EUR 2,400 price, one unresolved risk, two URLs and the original uncertainty."
51
55
  must_include:
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: eli5
3
+ description: "Use when a topic must be explained from zero to someone who knows nothing about it: one page, big pictures, very few words, everyday analogies, no jargon and nothing assumed. NOT the smallest in-conversation visual for someone already following (that is `show-me`), NOT a course with exercises (that is `course-builder`)."
4
+ tags: [eli5, explain, beginner, simple, analogy, no-jargon, explicame]
5
+ recommends: [show-me, technical-writing, course-builder]
6
+ profiles: [minimal, core, full]
7
+ origin: risco
8
+ ---
9
+
10
+ # eli5 — explain it to someone who knows nothing
11
+
12
+ The topic is whatever the user named. With no topic named, it is the one the conversation is already
13
+ on. The audience is someone with **zero** background: no vocabulary, no context, no patience for a
14
+ definition that needs another definition.
15
+
16
+ ## The contract
17
+
18
+ 1. **A page, not a paragraph.** The output is one self-contained HTML page, big visuals first, words
19
+ second. Open it when it is written.
20
+ 2. **Picture carries the idea, words label it.** If the page still makes sense with the text removed,
21
+ it is working. Aim for a caption per picture, not a paragraph per picture.
22
+ 3. **Everyday objects only.** Compare to things a person has physically handled: boxes, keys, queues
23
+ at a counter, post, a light switch. Never explain one unknown with another unknown.
24
+ 4. **Zero jargon, and zero smuggled jargon.** No term appears without being shown first. "It caches"
25
+ is jargon; "it keeps a copy nearby so it doesn't have to walk back" is the same fact.
26
+ 5. **Simple, never false.** When the simplification would make something untrue, say what got left
27
+ out, in one line, at the end. A comfortable lie is worse than a hard truth.
28
+ 6. **No condescension.** Simple words, adult tone. The reader is new to the topic, not a child.
29
+
30
+ ## The shape of the page
31
+
32
+ ```text
33
+ one sentence: what this thing is, in words a stranger would use
34
+ big picture 1 : the thing, drawn
35
+ big picture 2 : the thing doing its job, step by step
36
+ one line : the part people get wrong
37
+ one line : what this explanation left out (only if it left something out)
38
+ ```
39
+
40
+ Three to five visuals is the whole page. Inline SVG or plain HTML boxes beat any chart library here:
41
+ the drawing has to be readable on a phone, at a glance, with no legend to study.
42
+
43
+ ```bash
44
+ open path/to/eli5-<topic>.html
45
+ ```
46
+
47
+ ## Anti-patterns
48
+
49
+ | Anti-pattern | Why it fails | Do this instead |
50
+ | --- | --- | --- |
51
+ | Define a term with two more terms | The reader loses the thread on line one | Show the thing, then name it |
52
+ | A wall of text with one decorative image | That is a blog post with a picture | Picture first, caption second |
53
+ | "Imagine you're a packet travelling…" | Cute framing, still abstract | Compare to an object the reader has held |
54
+ | Simplify until it is wrong | The reader now has to unlearn it | Keep it true and name what you dropped |
55
+ | Baby talk, emoji, exclamation marks | Talks down to the reader | Plain adult words, short sentences |
56
+ | Five diagrams of the same idea | Repetition reads as padding | One picture per genuinely new idea |
57
+
58
+ ## Where this ends
59
+
60
+ - Someone already following the conversation who needs the shape of one mechanism: `show-me`.
61
+ - A structured curriculum with exercises, assessment and progression: `course-builder`.
62
+ - Documentation an informed reader will keep coming back to: `technical-writing`.
63
+ - Making an existing text sound human rather than simpler: `bro`.
@@ -0,0 +1,22 @@
1
+ # Evals — eli5
2
+
3
+ Two claims: that a from-zero request routes here instead of to the in-conversation visual skill or to
4
+ teaching material, and that the loaded skill produces a page a genuine beginner can follow.
5
+
6
+ ## Triggering
7
+
8
+ Load only `eli5` and run every prompt in 3–5 fresh sessions. A positive passes when `eli5` loads in a
9
+ majority of trials; a negative passes when it stays quiet and the declared `route_to` skill is the
10
+ real owner. Require at least 90% accuracy.
11
+
12
+ `show-me` is the negative that matters: both are "explain it visually". The discriminator is the
13
+ reader's starting knowledge, and it must survive any description edit on either side.
14
+
15
+ ## Capability
16
+
17
+ Run the scenario without the skill and with it, same topic and one grader, three trials. The
18
+ with-skill condition must satisfy at least 80% of the rubric and beat the baseline by at least 20
19
+ percentage points.
20
+
21
+ Grade the jargon point strictly: a baseline answer almost always keeps one unexplained term, which is
22
+ exactly the failure the skill exists to prevent.
@@ -0,0 +1,54 @@
1
+ skill: eli5
2
+
3
+ # `eli5` owns one move: a from-zero explanation of one topic, as a page of big
4
+ # pictures and few words, for someone with no background at all. It does not own
5
+ # in-conversation diagrams for someone already following, curricula, or docs.
6
+ should_trigger:
7
+ - prompt: "Explícame qué es una API como si tuviera cinco años."
8
+ why: "The canonical from-zero request, named outright, in the user's own language."
9
+
10
+ - prompt: "My mum asked me what a VPN is. I need something she can actually look at."
11
+ why: "A named audience with zero background and an explicit ask for something visual."
12
+
13
+ - prompt: "eli5 how a blockchain works"
14
+ why: "The bare skill name plus a topic is the shortest form of the same request."
15
+
16
+ - prompt: "No tengo ni idea de esto. Empieza por lo más básico, sin palabras raras."
17
+ why: "Zero background plus an explicit no-jargon constraint, with no topic named: the topic is the current one."
18
+
19
+ - prompt: "Can you explain what an index is in a database, but for someone who has never programmed?"
20
+ why: "A technical topic aimed at a non-technical reader is the audience this skill is written for."
21
+
22
+ - prompt: "Necesito explicarle a mi cliente, que no es técnico, qué es un webhook. Que lo entienda de una."
23
+ why: "Explaining to a named non-technical third party is the same job, one step removed."
24
+
25
+ should_not_trigger:
26
+ - prompt: "Show me the call order when the form is submitted, I'm lost in the code."
27
+ route_to: "show-me"
28
+ why: "The user is already inside the topic and needs one mechanism drawn, not a from-zero page."
29
+
30
+ - prompt: "Build a four-week course on SQL with exercises and a final project."
31
+ route_to: "course-builder"
32
+ why: "Curriculum, progression and assessment are course-builder; eli5 is a single explanation."
33
+
34
+ - prompt: "Write the getting-started docs for our SDK, with runnable examples."
35
+ route_to: "technical-writing"
36
+ why: "Reference and tutorial documentation is technical-writing, even when it must be beginner-friendly."
37
+
38
+ - prompt: "Make this paragraph sound less robotic before I send it."
39
+ route_to: "bro"
40
+ why: "A register and tone pass over existing text is bro; nothing here needs explaining from zero."
41
+
42
+ - prompt: "Design the hero section for our homepage so it feels premium."
43
+ route_to: "design-loop"
44
+ why: "Visual identity is the design area; eli5's visuals serve comprehension, not brand."
45
+
46
+ capability:
47
+ - scenario: "A non-technical business owner asks what a webhook is, after two failed explanations that used the words 'endpoint', 'payload' and 'HTTP POST'."
48
+ must_include:
49
+ - "produces one self-contained page with three to five large visuals, not a wall of text"
50
+ - "uses an everyday physical analogy the reader has handled, not another abstraction"
51
+ - "introduces no term without showing the thing first, and never uses endpoint, payload or POST unexplained"
52
+ - "keeps the explanation true, and names in one line whatever was left out"
53
+ - "stays adult in tone: no baby talk, no emoji, no exclamation marks"
54
+ - "opens the page for the user instead of only writing the file"
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: show-me
3
+ description: "Use when the user needs to see how something works instead of reading about it: picks the smallest visual that carries the point — pseudocode, call tree, file tree, component tree, Mermaid, a shaped diff, or one HTML page. NOT visual identity (that is `design-loop`), NOT slides (that is `presentations`), NOT a from-zero explainer (that is `eli5`)."
4
+ tags: [show-me, explain, diagram, visual, mermaid, diff, call-tree, ensename]
5
+ recommends: [eli5, presentations, technical-writing, codebase-onboarding]
6
+ profiles: [minimal, core, full]
7
+ origin: risco
8
+ ---
9
+
10
+ # show-me — the smallest picture that answers the question
11
+
12
+ A second paragraph never fixes the first one. Pick the smallest view that makes the point, put two
13
+ lines of prose beside it, stop.
14
+
15
+ ## The contract
16
+
17
+ 1. **One form, chosen on purpose.** Read what the question is *about*, pick the matching form from
18
+ the table, draw that. Several forms in one answer is the failure mode, not thoroughness.
19
+ 2. **Only the parts that answer the question.** Keep the calls, files, props, states and boundaries
20
+ the user asked about. Everything else is noise that hides the answer.
21
+ 3. **Prose shrinks to fit.** No preamble, no "here is a diagram of". The picture leads; the words
22
+ caption it.
23
+ 4. **Real names.** Actual paths, actual function and component names, actual state values. A diagram
24
+ of `ServiceA → ServiceB` explains nothing.
25
+ 5. **Say so when there is nothing to draw.** A topic with no shape gets a straight answer in prose.
26
+ A decorative diagram costs the reader time and buys nothing.
27
+
28
+ ## Pick the form from what the topic is
29
+
30
+ | The question is about | Draw | Why this one |
31
+ | --- | --- | --- |
32
+ | Logic, an algorithm, a decision | pseudocode | branches read top-down; syntax would distract |
33
+ | What calls what at runtime | call tree | shows order and nesting, which prose loses |
34
+ | UI structure | component tree, with state and module boundaries | ownership is the answer most of the time |
35
+ | Which file is responsible for what | shallow file tree with one comment per entry | depth hides the point; one level shows it |
36
+ | Interaction, control flow, data flow between pieces | Mermaid sequence or flow diagram | two-way traffic over time needs an axis |
37
+ | What changes in a shape that already exists | `diff`, in the shape of the topic | the reader keeps their bearings |
38
+ | Layout, visual state, a dense comparison | one self-contained HTML page | text cannot hold it |
39
+ | Nothing with a shape | prose | see contract rule 5 |
40
+
41
+ ```text
42
+ on(save)
43
+ if content is unchanged
44
+ return cached result
45
+ write new content
46
+ return fresh result
47
+ ```
48
+
49
+ ```text
50
+ submitForm
51
+ createSession
52
+ persistPrompt
53
+ launchAgent
54
+ navigateToSession
55
+ ```
56
+
57
+ ```tsx
58
+ <SessionPage> (apps/example/src/routes/session.tsx)
59
+ useSessionEvents()
60
+ <SessionToolbar>
61
+ <RunSkillButton> (packages/ui)
62
+ ```
63
+
64
+ ```text
65
+ src/
66
+ ├── commands/ # parses user actions
67
+ ├── sessions/ # owns session state
68
+ └── transport/ # sends API requests
69
+ ```
70
+
71
+ ```mermaid
72
+ sequenceDiagram
73
+ participant User
74
+ participant UI
75
+ participant Daemon
76
+ User->>UI: choose command
77
+ UI->>Daemon: send expanded prompt
78
+ Daemon-->>UI: stream result
79
+ ```
80
+
81
+ ## The diff rule
82
+
83
+ Use `diff` when the surrounding shape already exists and the point is what moves. **Match the diff
84
+ to the topic**: a component change is a component diff, a layout change is a file-tree diff, a
85
+ control-flow change is a pseudocode diff. A unified source diff for a structural change makes the
86
+ reader rebuild the structure in their head.
87
+
88
+ ```diff
89
+ src/
90
+ ├── commands/
91
+ +│ └── show-me.ts # expands the slash command
92
+ ├── sessions/
93
+ -└── transport.ts
94
+ +└── transport/
95
+ + ├── client.ts
96
+ + └── stream.ts
97
+ ```
98
+
99
+ ```diff
100
+ on(save)
101
+ - write content
102
+ + if content is unchanged
103
+ + return cached result
104
+ + write new content
105
+ + invalidate cache
106
+ ```
107
+
108
+ Show the whole block instead of a diff when most of it is new, when the omitted context would hide
109
+ ownership or order, or when the user needs something copyable.
110
+
111
+ ## When it earns an HTML page
112
+
113
+ Layout, visual state, a side-by-side comparison, or a concept too dense for a text diagram. One
114
+ page, self-contained, real labels and real data, readable on a phone and on a desktop. Inherit the
115
+ product's colours, type and spacing from where it lives; this skill borrows an identity, it never
116
+ invents one. Then open it:
117
+
118
+ ```bash
119
+ open path/to/show-me-<topic>.html
120
+ ```
121
+
122
+ ## Anti-patterns
123
+
124
+ | Anti-pattern | Why it fails | Do this instead |
125
+ | --- | --- | --- |
126
+ | Ship four forms because each adds a little | The reader now has to pick; that was your job | One form, the smallest that answers it |
127
+ | Diagram the whole system when asked about one path | The answer is in there somewhere, which is the same as absent | Draw the path, drop the rest |
128
+ | Placeholder names (`ModuleA`, `doThing`) | Nothing maps back to the codebase | Real paths and real identifiers |
129
+ | A unified source diff for a structural change | Forces the reader to rebuild the shape | Diff in the shape of the topic |
130
+ | Mermaid for a layout question | Boxes and arrows cannot show visual space | One HTML page |
131
+ | A diagram to look thorough | Costs attention, adds nothing | Answer in prose and say why there is nothing to draw |
132
+
133
+ ## Where this ends
134
+
135
+ - The visual **identity** of an interface, a landing page or a poster is `design-loop` and `design`.
136
+ - A **deck** someone presents from is `presentations`.
137
+ - **Zero prior knowledge**, big pictures, few words, is `eli5`.
138
+ - Restructuring a document, a README or a reference is `technical-writing`.
139
+ - A guided tour of an unfamiliar repository is `codebase-onboarding`; this skill draws the pieces it
140
+ finds, it does not run the tour.
@@ -0,0 +1,23 @@
1
+ # Evals — show-me
2
+
3
+ Two claims are under test: that "show me / I don't get it / draw me" routes here without stealing
4
+ design, deck or beginner-explainer work, and that the loaded skill answers with **one** well-chosen
5
+ visual instead of more prose.
6
+
7
+ ## Triggering
8
+
9
+ Load only `show-me` and run every `should_trigger` and `should_not_trigger` prompt in 3–5 fresh
10
+ sessions. A positive passes when `show-me` loads in a majority of trials. A negative passes when it
11
+ stays quiet and the declared `route_to` skill is the genuine owner. Require at least 90% accuracy.
12
+
13
+ The negatives that matter most are `eli5` and `design-loop`: both are adjacent enough that a sloppy
14
+ description pulls them in. Re-run these two after any description edit.
15
+
16
+ ## Capability
17
+
18
+ Run the scenario in two fresh conditions, without the skill and with it, same source discussion and
19
+ one grader. Score each `must_include` point over three trials. The with-skill condition must satisfy
20
+ at least 80% of the rubric and beat the baseline by at least 20 percentage points.
21
+
22
+ The discriminating point is **form choice**: a baseline answer typically produces prose plus a
23
+ generic box diagram. Count "picked one form, and the right one" strictly.
@@ -0,0 +1,61 @@
1
+ skill: show-me
2
+
3
+ # `show-me` owns one move: the smallest visual that answers the question being
4
+ # asked, placed inside the conversation. It does not own visual identity, decks,
5
+ # teaching material for a beginner, or restructuring a document.
6
+ should_trigger:
7
+ - prompt: "No entiendo cómo funciona el login. Enséñamelo."
8
+ why: "An explicit ask to be shown rather than told, about a mechanism that has a shape to draw."
9
+
10
+ - prompt: "Can you show me visually how these three services talk to each other?"
11
+ why: "Interaction between pieces over time is the canonical Mermaid sequence case."
12
+
13
+ - prompt: "Draw me the component tree of this page so I can see which component owns the form state."
14
+ why: "UI structure with an ownership question is the component-tree form, named outright."
15
+
16
+ - prompt: "Antes de tocar nada, qué archivo es responsable de qué en src/?"
17
+ why: "File responsibility maps to the shallow file tree; the user wants the shape before editing."
18
+
19
+ - prompt: "I read your explanation twice and still don't get the order things happen in. Picture?"
20
+ why: "A second failed prose attempt is the trigger this skill exists for; runtime order is a call tree."
21
+
22
+ - prompt: "Show me what would change in the folder layout if we split transport.ts into a module."
23
+ why: "A change to an existing shape is the shaped-diff case, with the diff in the topic's own form."
24
+
25
+ - prompt: "Explícame con un diagrama qué pasa cuando el usuario cancela a mitad del pago."
26
+ why: "An edge path through a flow, explicitly requested as a diagram."
27
+
28
+ should_not_trigger:
29
+ - prompt: "Design the landing page for our new pricing tier, it should look premium."
30
+ route_to: "design-loop"
31
+ why: "Visual identity and composition are owned by the design area; show-me explains, it does not design."
32
+
33
+ - prompt: "Build me a 12-slide deck to present the roadmap to the board on Thursday."
34
+ route_to: "presentations"
35
+ why: "A deck someone presents from is presentations; this skill draws inside the conversation."
36
+
37
+ - prompt: "Explain how a database index works to someone who has never programmed, like they're five."
38
+ route_to: "eli5"
39
+ why: "Zero prior knowledge with big pictures and few words is eli5's contract, not the smallest in-context visual."
40
+
41
+ - prompt: "Reorganise this README into a proper tutorial and an API reference."
42
+ route_to: "technical-writing"
43
+ why: "Restructuring a document is technical-writing; a diagram inside it would be at most one paragraph of the job."
44
+
45
+ - prompt: "Walk me through this whole unfamiliar repo: what it does, how it's built, where to start."
46
+ route_to: "codebase-onboarding"
47
+ why: "A guided tour of an unknown codebase is its own skill; show-me only draws the pieces once they are known."
48
+
49
+ - prompt: "Build a dashboard with our monthly revenue and churn charts."
50
+ route_to: "dashboard"
51
+ why: "A standing analytics surface is dashboard; this is not an explanation of a mechanism."
52
+
53
+ capability:
54
+ - scenario: "The user asks, after a dense prose answer, why saving a document sometimes does not trigger a re-render. The real cause is a cache check inside the save handler plus a subscription set up after navigation. Show them."
55
+ must_include:
56
+ - "picks one form rather than stacking several, and the form matches the topic (control flow or call tree, not a file tree)"
57
+ - "uses the real handler, cache and subscription names from the discussion instead of placeholders"
58
+ - "shows only the path involved in the bug, not the whole module"
59
+ - "puts at most two lines of prose beside the visual, with no 'here is a diagram of' preamble"
60
+ - "marks what changes with a diff in the topic's own shape if it proposes a fix"
61
+ - "does not produce an HTML page for something a text diagram already carries"
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: unslop
3
+ description: "Use when a written text must be audited against a named catalogue of AI tells before it ships: puffery, `not just X but Y`, the rule of three, em dashes, filler, hedging, abstract metaphor nouns. Names each hit and fixes it. NOT the register rewrite in the user's own voice (that is `bro`), NOT a reusable voice guide (that is `brand-voice`)."
4
+ tags: [unslop, ai-tells, editing, audit, slop, publish-check, revisar-texto]
5
+ recommends: [bro, brand-voice, technical-writing]
6
+ profiles: [minimal, core, full]
7
+ origin: risco
8
+ ---
9
+
10
+ # unslop: the named-tell audit a text passes before it ships
11
+
12
+ `bro` decides how a text should *sound*. This decides whether a text still carries the marks of a
13
+ machine, tell by named tell, on the words that are actually there. Run it on anything about to leave
14
+ the session: a README, a post, an email, a landing page, a commit body.
15
+
16
+ ## The pass
17
+
18
+ 1. **Scan against the tables below.** Every hit gets located, not sensed. If you cannot name the
19
+ tell, it is not a finding.
20
+ 2. **Rewrite in place.** Preserve meaning, facts, numbers, links, commitments and the intended tone.
21
+ 3. **Restore the voice** (next section). A text stripped of tells and nothing else reads as sterile,
22
+ which is its own tell.
23
+ 4. **Self-audit once more.** Ask: what still makes this obviously machine written? Fix that too.
24
+ 5. **Return the text.** On request, return the list of named hits alongside it.
25
+
26
+ ## Removing tells is half the job
27
+
28
+ Voiceless writing is as obvious as slopped writing. After the cuts, put something back:
29
+
30
+ - **Have an opinion.** React to the facts instead of listing balanced pros and cons.
31
+ - **Vary the rhythm.** Short sentence. Then a longer one that takes its time and earns the length.
32
+ - **Admit complexity.** "Impressive and slightly unsettling" beats "impressive".
33
+ - **Use "I" when it fits.** First person is not unprofessional.
34
+ - **Allow some mess.** Perfect symmetry looks manufactured.
35
+ - **Be specific.** Not "this is concerning" but "it churns for six hours at 3am and nobody is watching".
36
+
37
+ ## Content tells
38
+
39
+ | Tell | Fix |
40
+ | --- | --- |
41
+ | Puffery: "pivotal moment", "testament to", "evolving landscape", "indelible mark" | State what happened |
42
+ | Name dropping outlets with no context | Pick one, quote what it said |
43
+ | Decorative `-ing` clauses: "highlighting...", "ensuring...", "showcasing..." | Delete, or expand into a real claim with a source |
44
+ | Promotional adjectives: "nestled", "vibrant", "breathtaking", "renowned", "must-visit" | Neutral description |
45
+ | Vague attribution: "experts believe", "reports suggest", "critics argue" | Name the source or cut the claim |
46
+ | The formulaic challenge arc: "despite challenges, X continues to thrive" | Specific facts instead of the arc |
47
+
48
+ ## Language tells
49
+
50
+ | Tell | Fix |
51
+ | --- | --- |
52
+ | AI vocabulary: additionally, crucial, delve, enhance, foster, garner, interplay, intricate, landscape, pivotal, showcase, tapestry, testament, underscore, vibrant | The plain word |
53
+ | Fancy ways to say "is": "serves as", "stands as", "boasts", "features" | "is", "has" |
54
+ | "Not just X, but Y" | State the point directly |
55
+ | Rule of three: forcing every list into three items | The number the facts have |
56
+ | Synonym cycling: protagonist, main character, central figure, hero in one paragraph | Pick one and repeat it |
57
+ | False ranges: "from X to Y" where X and Y share no scale | List the items |
58
+ | Abstract metaphor nouns: substrate, wedge, vector, locus, nexus, primitive, surface, bedrock, scaffolding, paradigm, flywheel, north star, gold-plating, ratchet, evacuate | The concrete word: base, add, way, more than the job needs, move out |
59
+
60
+ ## Style and punctuation tells
61
+
62
+ | Tell | Fix |
63
+ | --- | --- |
64
+ | Em dashes, anywhere | End the sentence, or use a comma. Swapping in parentheses trades one tell for another |
65
+ | Colons as mid-sentence connectors | Let the point stand as its own sentence. Colons are for lists and examples |
66
+ | Bold on every proper noun and acronym | Bold what the reader must not miss, nothing else |
67
+ | Inline-header lists whose bold label restates the line: "**Performance:** performance improved" | Prose. A bold lead-in that ends in a period and is followed by genuinely new detail is fine |
68
+ | Title Case Headings | Sentence case |
69
+ | Decorative emoji in headings and bullets | Remove |
70
+ | Curly quotes | Straight quotes |
71
+
72
+ ## Filler, hedging and plain speech
73
+
74
+ | Tell | Fix |
75
+ | --- | --- |
76
+ | "In order to", "due to the fact that", "it is important to note that" | "To", "because", delete |
77
+ | Stacked hedges: "could potentially possibly be argued that it might" | "may", or the claim itself |
78
+ | Generic conclusion: "the future looks bright" | A specific plan, date or number |
79
+ | Chatbot phrases: "I hope this helps", "let me know if", "certainly", "great question" | Remove |
80
+ | Cutoff disclaimers: "while specific details are limited" | Find the detail or drop the sentence |
81
+ | Sycophancy: "you're absolutely right" | Answer directly |
82
+ | Feeling instead of mechanism: "the database stays close at hand" | The mechanism or the number: "`.toSQL()` returns the exact string sent to the database" |
83
+ | A sentence that would fit unchanged in another project's docs | Cut it. It says nothing about this one |
84
+ | Dense sentences the reader has to reparse | One idea per sentence |
85
+ | Passive with a hidden actor: "queries are validated" | Name the actor: "the compiler validates queries" |
86
+ | Adverbs propping up weak verbs: "runs quickly", "significantly improves" | A stronger verb or the measured number |
87
+ | Fancy synonyms: utilize, leverage, facilitate, numerous, in the event that | use, use, help, many, if |
88
+
89
+ ## Anti-patterns
90
+
91
+ | Anti-pattern | Why it fails | Do this instead |
92
+ | --- | --- | --- |
93
+ | Report the tells and leave the text unfixed | The user asked for a clean text, not a diagnosis | Fix in place, list on request |
94
+ | Cut every tell and stop | Sterile prose is the other AI tell | Restore opinion, rhythm and specifics |
95
+ | Rewrite the meaning while cleaning the style | The edit silently changes the claim | Facts, numbers, links and commitments stay exact |
96
+ | Strip a term because it sounds technical | Precision lost to style is a defect | Keep the term, explain it once |
97
+ | Touch code, commands, URLs, quotes or regulated wording | Those are not prose | Leave them byte for byte |
98
+ | Claim the result will pass an AI detector | Nobody can promise that | Promise named tells removed, nothing more |
99
+ | Flatten a voice the author chose on purpose | Some authors do write long, warm or formal | Match the intended tone, cut only the machine marks |
100
+
101
+ ## Output boundary
102
+
103
+ Return the cleaned text as an artifact, with no preface. Keep harness commentary, the findings list
104
+ and any compass block clearly outside it, so nothing that is not the text can be copied into an
105
+ email or a document by accident.
106
+
107
+ ## Where this ends
108
+
109
+ - **`bro`** owns the register pass: make it sound like a person, in the user's language, fitted to the
110
+ channel and the relationship. A bare "bro" after an answer is always `bro`. This skill is the named
111
+ audit of a text that already exists, before it goes out.
112
+ - **`brand-voice`** owns the standing voice system across writers and channels.
113
+ - **`technical-writing`** owns structure: what belongs in a tutorial, a reference, a README.
114
+ - **`landing-copy`** owns conversion architecture. Clean its words only after it has chosen them.
@@ -0,0 +1,25 @@
1
+ # Evals — unslop
2
+
3
+ The claim under test is the boundary as much as the capability. `bro` sits directly next to this
4
+ skill in the base install, and a description that blurs them costs every user two owners for one
5
+ turn. Half the negatives here exist to prove the split holds.
6
+
7
+ ## Triggering
8
+
9
+ Load only `unslop` and run every prompt in 3–5 fresh sessions. A positive passes when `unslop` loads
10
+ in a majority of trials; a negative passes when it stays quiet and the declared `route_to` skill is
11
+ the real owner. Require at least 90% accuracy, and treat any failure on the two `bro` negatives as
12
+ blocking rather than statistical: those are the cases the split was designed for.
13
+
14
+ Run the mirror direction too. `bro`'s own suite carries a negative that routes here; both must pass
15
+ in the same round, or the boundary only exists on one side.
16
+
17
+ ## Capability
18
+
19
+ Run the scenario without the skill and with it, same post and one grader, three trials. The
20
+ with-skill condition must satisfy at least 80% of the rubric and beat the baseline by at least 20
21
+ percentage points.
22
+
23
+ Two points discriminate hardest: **naming** the tells by category (a baseline rewrites silently) and
24
+ **preserving** the code block, the price and the URLs (a baseline edits them while tidying). Grade
25
+ both strictly.
@@ -0,0 +1,60 @@
1
+ skill: unslop
2
+
3
+ # `unslop` is the named-tell audit of a text that already exists, run before it
4
+ # ships. `bro` is the register pass: sound like a person, in the user's language,
5
+ # fitted to the channel. A bare "bro" is always `bro`; "check this for AI tells
6
+ # before I publish it" is always this skill.
7
+ should_trigger:
8
+ - prompt: "Revisa este README antes de publicarlo y quítale todo lo que huela a IA."
9
+ why: "A pre-publication audit of an existing text is the exact contract, in the user's own words."
10
+
11
+ - prompt: "Unslop this."
12
+ why: "The bare skill name over a text in context is the shortest form of the request."
13
+
14
+ - prompt: "Can you go through this post and tell me which bits read as AI-written, then fix them?"
15
+ why: "Named findings plus a fix is what distinguishes this from a general tone rewrite."
16
+
17
+ - prompt: "Este texto está lleno de guiones largos y de 'no solo X, sino Y'. Límpialo."
18
+ why: "The user names two catalogued tells outright; the fix is the enumerated pass."
19
+
20
+ - prompt: "I keep getting told my docs sound like ChatGPT wrote them. What exactly am I doing?"
21
+ why: "The user wants the tells named, which no other writing skill in the catalog does."
22
+
23
+ - prompt: "Before this goes to the client, strip the puffery and the hedging but keep every number exact."
24
+ why: "A ship gate over existing prose with a preserve-the-facts constraint."
25
+
26
+ should_not_trigger:
27
+ - prompt: "Bro."
28
+ route_to: "bro"
29
+ why: "A bare bro after an answer is the register pass over the last message, not an audit of a supplied text."
30
+
31
+ - prompt: "Haz que este correo suene más cercano y menos formal para un cliente de confianza."
32
+ route_to: "bro"
33
+ why: "Choosing a warmer register for a specific relationship is bro's job; no tell is being audited."
34
+
35
+ - prompt: "Define how our company should sound across the blog, support replies and job ads."
36
+ route_to: "brand-voice"
37
+ why: "A standing voice system across channels is brand-voice, not a one-text audit."
38
+
39
+ - prompt: "Split this mixed README into a tutorial and an API reference with runnable examples."
40
+ route_to: "technical-writing"
41
+ why: "Document structure is technical-writing; unslop edits words, it does not decide document modes."
42
+
43
+ - prompt: "Write the hero headline, the offer and the CTA for our pricing page."
44
+ route_to: "landing-copy"
45
+ why: "Conversion architecture and net-new copy belong to landing-copy; the audit comes after."
46
+
47
+ - prompt: "Translate this announcement into Catalan and adapt the date formats."
48
+ route_to: "translation-l10n"
49
+ why: "Translation and locale adaptation are owned elsewhere, even though good prose matters there too."
50
+
51
+ capability:
52
+ - scenario: "A 400-word product-launch blog post that opens with 'In today's rapidly evolving landscape', uses four em dashes, three bold-label bullets whose labels restate their lines, 'not just faster, but smarter', 'experts agree', two stacked hedges, and closes with 'the future looks bright'. It also contains a code block, a pricing figure of EUR 39/month and two URLs."
53
+ must_include:
54
+ - "names the tells it found by category rather than reporting a general impression"
55
+ - "removes every em dash without substituting parentheses or en dashes"
56
+ - "converts the bold-label bullets whose label restates the line into prose, and leaves any bold lead-in that adds new detail"
57
+ - "replaces 'experts agree' with a named source or cuts the claim"
58
+ - "keeps the code block, the EUR 39/month figure and both URLs byte for byte"
59
+ - "leaves the text with a voice: at least one specific, opinionated sentence rather than sterile neutrality"
60
+ - "returns the cleaned text as the artifact, with the findings list kept outside it"