@zalom/plastic 1.9.0 → 1.11.0

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.
Files changed (96) hide show
  1. package/PLASTIC.md +23 -8
  2. package/README.md +16 -5
  3. package/agents/plastic-enforcer.md +3 -2
  4. package/agents/plastic-intent-discovery.md +7 -0
  5. package/bin/plastic.js +17 -8
  6. package/hooks/auto-arm +2 -2
  7. package/hooks/bash-gate +1 -1
  8. package/hooks/check-update +1 -1
  9. package/hooks/continue +2 -2
  10. package/hooks/edit-gates +1 -1
  11. package/hooks/future-intent-check +2 -2
  12. package/hooks/gate-check +3 -3
  13. package/hooks/power-tools +1 -1
  14. package/hooks/session-start +1 -1
  15. package/package.json +1 -1
  16. package/scripts/codex-hook +50 -106
  17. package/scripts/doctor.rb +132 -1080
  18. package/scripts/exec-worktree +103 -0
  19. package/scripts/hash-intent +1 -1
  20. package/scripts/hook-bash-gate +19 -0
  21. package/scripts/hook-code-gate +4 -1
  22. package/scripts/hook-continue +2 -2
  23. package/scripts/hook-create-gate +6 -3
  24. package/scripts/hook-gate-check +17 -0
  25. package/scripts/hook-links-gate +4 -1
  26. package/scripts/hook-lock-gate +7 -3
  27. package/scripts/hook-savepoint-pre +4 -1
  28. package/scripts/hook-session-start +21 -15
  29. package/scripts/lib/apply_patch_envelope.rb +46 -13
  30. package/scripts/lib/bridge.rb +83 -15
  31. package/scripts/lib/codex_edit_gates.rb +138 -0
  32. package/scripts/lib/doctor_core.rb +1087 -0
  33. package/scripts/lib/edit_gates.rb +61 -5
  34. package/scripts/lib/exec_worktree.rb +325 -0
  35. package/scripts/lib/harness_text.rb +57 -0
  36. package/scripts/lib/hook_registry.rb +32 -28
  37. package/scripts/lib/installer_core.rb +67 -7
  38. package/scripts/lib/lock.rb +196 -47
  39. package/scripts/lib/ruby_probe.rb +60 -0
  40. package/scripts/lib/scaffold_intent.rb +392 -0
  41. package/scripts/lib/spec_header.rb +83 -0
  42. package/scripts/lib/start_intent.rb +296 -0
  43. package/scripts/lib/verify_intent.rb +262 -0
  44. package/scripts/lib/worktree.rb +15 -1
  45. package/scripts/link-suggest +1 -1
  46. package/scripts/maintenance-run +5 -5
  47. package/scripts/migrate-to-global +2 -2
  48. package/scripts/restore-intent-v1 +1 -1
  49. package/scripts/scaffold-intent +120 -0
  50. package/scripts/start-intent +89 -0
  51. package/scripts/verify-intent +73 -0
  52. package/skills/agent-advisor/SKILL.md +5 -5
  53. package/skills/auto/SKILL.md +42 -32
  54. package/skills/auto/references/agent-architecture.md +1 -1
  55. package/skills/auto/references/agent-report-contract.md +1 -1
  56. package/skills/auto/references/human-report-contract.md +25 -8
  57. package/skills/auto/references/tiers.md +24 -2
  58. package/skills/conventions/references/completion-and-done.md +3 -0
  59. package/skills/conventions/references/gates-and-enforcement.md +28 -12
  60. package/skills/conventions/references/locks-and-worktrees.md +3 -3
  61. package/skills/conventions/references/tiers-and-dispatch.md +10 -9
  62. package/skills/dashboard/SKILL.md +1 -1
  63. package/skills/doctor/SKILL.md +6 -5
  64. package/skills/doctor/references/gates-stuck-detection.md +13 -8
  65. package/skills/doctor/report.md +1 -1
  66. package/skills/install/SKILL.md +1 -1
  67. package/skills/intent-brainstorming/SKILL.md +0 -2
  68. package/skills/intent-creating/SKILL.md +6 -6
  69. package/skills/intent-creating/references/lifecycle.md +1 -1
  70. package/skills/intent-discovering/SKILL.md +10 -3
  71. package/skills/intent-ending/SKILL.md +8 -7
  72. package/skills/intent-executing/SKILL.md +27 -19
  73. package/skills/intent-grilling/SKILL.md +5 -3
  74. package/skills/intent-planning/SKILL.md +7 -3
  75. package/skills/intent-researching/SKILL.md +0 -2
  76. package/skills/intent-starting/SKILL.md +10 -2
  77. package/skills/project-creating/SKILL.md +0 -2
  78. package/skills/project-creating/references/project-scaffolding.md +1 -1
  79. package/skills/releasing/SKILL.md +1 -1
  80. package/skills/releasing/references/promotion-and-tagging.md +14 -8
  81. package/skills/releasing/references/release-lines.md +1 -1
  82. package/skills/skill-creating/SKILL.md +5 -2
  83. package/skills/store-indexing/SKILL.md +8 -5
  84. package/skills/store-indexing/references/zettelkasten-linking.md +1 -1
  85. package/skills/tutorial/references/track-1-guided.md +2 -2
  86. package/skills/tutorial/references/track-2-auto.md +9 -6
  87. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +1 -1
  88. package/skills/uninstall/SKILL.md +6 -9
  89. package/templates/agents.md +12 -12
  90. package/templates/config.yml +6 -7
  91. package/templates/index.md +6 -3
  92. package/templates/spec.md +1 -1
  93. package/skills/humanizer/SKILL.md +0 -40
  94. package/skills/humanizer/evals/evals.json +0 -70
  95. package/skills/humanizer/references/always-on-snippet.md +0 -9
  96. package/skills/humanizer/references/examples.md +0 -48
@@ -20,7 +20,7 @@ green Minitest run can fully vouch for.
20
20
 
21
21
  **Beta-verified lane.** Branch, merge to the `beta` branch, publish to the npm `beta` dist-tag,
22
22
  verify in real use, then merge `beta` into `main` and cut stable. It sits on top of the existing
23
- promotion mechanics (`--promote beta` / `--promote stable`, linear only, see
23
+ promotion mechanics (agent-performed channel promotion, linear only, see
24
24
  `promotion-and-tagging.md`); it names when to use them, not new machinery.
25
25
 
26
26
  ## Routing rule
@@ -35,8 +35,11 @@ routes each authoring task to the reference that holds the depth.
35
35
  - Build at least three evals before writing extensive docs.
36
36
  - Match determinism to fragility: a deterministic script for fragile or
37
37
  repeated mechanical steps, prose for judgment calls.
38
- - Imperative voice, no second person. No em-dashes or en-dashes in any shipped
39
- skill or doc (use commas, periods, parentheses, colons).
38
+ - Imperative voice, no second person. User-facing docs (README, docs/, AGENTS.md,
39
+ CLAUDE.md) never use em-dashes or en-dashes, and newly authored skill text avoids
40
+ them (use commas, periods, parentheses, colons). Existing internal files and the
41
+ sanctioned template emissions (templates/index.md's INDEX line shape) are not
42
+ violations.
40
43
 
41
44
  ## Route the authoring task to its reference
42
45
 
@@ -14,20 +14,20 @@ user-invocable: false
14
14
 
15
15
  ## INDEX.md Structure
16
16
 
17
- INDEX.md is a Zettelkasten main structure note - the brain's entry point. It has four sections:
17
+ INDEX.md is a Zettelkasten main structure note - the brain's entry point. It has five sections:
18
18
 
19
19
  ### Active
20
20
  Intents currently being worked on. Max 1-2 for focus.
21
21
  ```markdown
22
22
  ## Active
23
- - [1a2 — Design Plastic](store/1a2--design-plastic-state-system/1a2.md) — decision, human
23
+ - [1a2 — Design Plastic](store/1a2--design-plastic-state-system/1a2--design-plastic-state-system.md) — decision, human
24
24
  ```
25
25
 
26
26
  ### Future
27
27
  Intents parked for later. May be picked up by agents.
28
28
  ```markdown
29
29
  ## Future
30
- - [1b1 — Build Reddit KB](store/1b1--build-reddit-knowledge-base/1b1.md) — implementation, human
30
+ - [1b1 — Build Reddit KB](store/1b1--build-reddit-knowledge-base/1b1--build-reddit-knowledge-base.md) — implementation, human
31
31
  ```
32
32
 
33
33
  ### Clusters
@@ -35,10 +35,13 @@ Topic-based groupings. Manually curated. Create a new cluster when 3+ intents sh
35
35
  ```markdown
36
36
  ## Clusters
37
37
  ### Reddit Knowledge Base
38
- - [1a — Research](store/1a--research-reddit-saved-posts/1a.md)
39
- - [1a1 — Plan](store/1a1--plan-reddit-knowledge-base/1a1.md)
38
+ - [1a — Research](store/1a--research-reddit-saved-posts/1a--research-reddit-saved-posts.md)
39
+ - [1a1 — Plan](store/1a1--plan-reddit-knowledge-base/1a1--plan-reddit-knowledge-base.md)
40
40
  ```
41
41
 
42
+ ### Abandoned
43
+ Intents ended without delivery. Links preserved, never deleted.
44
+
42
45
  ### Completed
43
46
  All completed intents with dates. Links preserved, never deleted.
44
47
 
@@ -14,7 +14,7 @@
14
14
  `intent:` text. Ordering is mandatory: all `sources` first (top), then all `chain`,
15
15
  frontmatter order preserved within each group. Sources never appear at the end. No
16
16
  source/chain tags, no sub-grouping.
17
- 2. **Sources/Chain** (knowledge graph): `sources` = direct ascendants this was created from (formation, acyclic, must-load); `chain` = forward continuations and related successors (may cycle, lighter context). See `docs/concepts/how-plastic-sources-and-chains-intents.md` for the full model.
17
+ 2. **Sources/Chain** (knowledge graph): `sources` = direct ascendants this was created from (formation, acyclic, must-load); `chain` = forward continuations and related successors (may cycle, lighter context). See [`how-plastic-sources-and-chains-intents.md`](https://github.com/zalom/plastic/blob/main/docs/concepts/how-plastic-sources-and-chains-intents.md) for the full model.
18
18
  3. **Tags** (weakest) — shared tags, `project-<name>` for project membership
19
19
 
20
20
  ## When to Create a Cluster
@@ -120,6 +120,6 @@ two, exactly the README section (or note) just delivered.
120
120
  ## Wrap and where to go next
121
121
 
122
122
  That is the full cycle once: create, board, decide, spec, plan, build, done. Read
123
- `docs/guides/your-first-intent-in-10-minutes.md` for the same path condensed to a single
124
- read, and `docs/guides/what-the-gates-are-telling-you.md` for what to do if a station denies
123
+ [`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for the same path condensed to a single
124
+ read, and [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md) for what to do if a station denies
125
125
  an action instead of completing it.
@@ -55,9 +55,11 @@ Checkpoint: name one thing auto will always stop and ask about, rather than deci
55
55
 
56
56
  No new command. Auto still honors every hard gate a guided session would hit: the delivery
57
57
  lock (one owner at a time), the code gate (shut until `plan.md` and `checklist.md` exist),
58
- and the create gate (intents only come from the tool that makes them, never hand-authored).
58
+ the create gate (intents only come from the tool that makes them, never hand-authored), the
59
+ links gate (a `## Links` section changes only to match the file's own frontmatter), and the
60
+ bash gate (a shell command cannot write project code the code gate would have blocked).
59
61
 
60
- Checkpoint: read one gate message from the run so far and name which of the three gates it
62
+ Checkpoint: read one gate message from the run so far and name which of the five gates it
61
63
  came from.
62
64
 
63
65
  ### 4. Reading the per-stage reports
@@ -65,7 +67,8 @@ came from.
65
67
  No new command. At each stage boundary (What, Why, How, Exec, Done) the agent briefs in a
66
68
  fixed three-line shape: State (what happened and why it matters), Risk (the one thing that
67
69
  could bite, or "nothing flagged"), and Call (the decision left to the user, or the call the
68
- agent is taking on its own).
70
+ agent is taking on its own). That is the depth for a medium or large intent. A small intent
71
+ gets one briefing, at How, folding in what the earlier stages would have said.
69
72
 
70
73
  Checkpoint: in the most recent report, point at the State line, the Risk line, and the Call
71
74
  line.
@@ -84,10 +87,10 @@ at and how that matched what was actually on disk.
84
87
  ## Wrap and where to go next
85
88
 
86
89
  Auto keeps the same stages and the same gates as guided; the only difference is who steers.
87
- Read `docs/guides/pick-your-mode.md` for the honest trade-off between guided and auto, and
88
- `docs/guides/using-plastic-with-claude-code.md` for how that choice feels day to day and how
90
+ Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between guided and auto, and
91
+ [`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for how that choice feels day to day and how
89
92
  it connects to roadmap-driven delivery. For denial messages met along the way, read
90
- `docs/guides/what-the-gates-are-telling-you.md`.
93
+ [`what-the-gates-are-telling-you.md`](https://github.com/zalom/plastic/blob/main/docs/guides/what-the-gates-are-telling-you.md).
91
94
 
92
95
  Note on terms: "guided" means the user starts each stage with a command and the agent
93
96
  narrows the thinking inside it, the same shape track 1 walked. "Manual", editing project
@@ -106,6 +106,6 @@ waiting on a release to exist first.
106
106
 
107
107
  This is the same What, Why, How, Exec cycle from tracks 1 and 2, repeated across a project
108
108
  and gathered by a roadmap. Read
109
- `docs/guides/using-plastic-with-claude-code.md` for roadmap-driven delivery in more depth,
109
+ [`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for roadmap-driven delivery in more depth,
110
110
  including a real worked roadmap. For the exact roadmap file format beyond what this
111
111
  walkthrough covers, the `plastic-roadmap` skill itself is the reference.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plastic-uninstall
3
- description: Use when the user wants to remove Plastic from an agent. Runs the manifest-driven uninstaller (removes skills, hooks, statusline, and any legacy plugin layout), reports exactly what was removed and what was left behind, then gives verification steps. Optionally deletes the intent store.
3
+ description: Use when the user wants to remove Plastic from an agent. Runs the manifest-driven uninstaller (removes skills, hooks, statusline, and any legacy plugin layout), reports exactly what was removed and what was left behind, then gives verification steps. The intent store always stays.
4
4
  user-invocable: true
5
5
  ---
6
6
 
@@ -51,7 +51,7 @@ ls ~/.claude/hooks | grep '^plastic-' # -> no output
51
51
  grep -n plastic ~/.claude/settings.json # -> no plastic hook/plugin refs
52
52
  ```
53
53
 
54
- ### Step 4: Report + offer the data decision
54
+ ### Step 4: Report
55
55
 
56
56
  Emit the reporting block, using the Step 3 checks for the verification line:
57
57
 
@@ -67,12 +67,9 @@ Then:
67
67
  ```
68
68
  Plastic is uninstalled from [agent].
69
69
  Your intent store at ~/.plastic/ is untouched.
70
-
71
- Delete it too?
72
- a) Keep everything (recommended): re-install anytime with npx
73
- b) Delete everything now: removes ~/.plastic/ entirely (irreversible)
74
70
  ```
75
71
 
76
- - **Keep:** "Your data is at ~/.plastic/. Re-install anytime with
77
- `npx -y @zalom/plastic@latest install --claude` (or your channel)."
78
- - **Delete:** run `rm -rf ~/.plastic/` and confirm.
72
+ Uninstall removes installed harness files only. The store at `~/.plastic/` (intents,
73
+ history, projects, config, version ledger) always stays; no uninstall path deletes it.
74
+ Tell the user: "Your data is at ~/.plastic/. Re-install anytime with
75
+ `npx -y @zalom/plastic@latest install --claude` (or your channel)."
@@ -23,31 +23,30 @@ means preferring a detected tool's own search or navigation over a generic file
23
23
  4. **Use [[global:ID]]** to link back to the governing strategic intent
24
24
  5. **Auto-commit** all intent changes in this project's git repo
25
25
 
26
- ## Intent Lifecycle — What→Why→How→Next
26
+ ## Intent Lifecycle — What→Why→How→Exec
27
27
 
28
28
  State is derived from filesystem conventions, not frontmatter fields:
29
29
 
30
30
  | Convention | Signal |
31
31
  |---|---|
32
- | `## Context` has content | Intent is permanent (not fleeting) |
33
- | `actions/` directory exists | Intent is actionable |
32
+ | `## Context` has content | Intent is permanent (developed, actionable) |
34
33
  | `## Outcome` has content | Intent is done |
35
34
 
36
35
  Sections map to the lifecycle:
37
36
  - **## Intent** — What (the desire)
38
37
  - **## Context** — Why (background + ### Decisions)
39
- - **## Outcome** — How (the result, deliverables)
40
- - **## Insights** — Next (observations, raw material for future intents)
38
+ - **## Outcome** — Exec (the result; How's deliverables are the `plan.md`, `actions/`, and `checklist.md` files)
39
+ - **## Insights** — observations across all stages, raw material for future intents
41
40
 
42
41
  Active/Future/Completed placement is managed in INDEX.md, not in frontmatter.
43
42
 
44
43
  ## Creating Tactical Intents
45
44
 
46
- 1. Scan `.plastic/store/` for the next sequential ID
47
- 2. Generate ID: `~/.plastic/scripts/folgezettel-id`
48
- 3. Create `.plastic/store/ID--slug/ID--slug.md`
49
- 4. Set frontmatter: `id`, `intent`, `sources` (array link to governing intent), `chain` (starts empty), `created`, `author`, `tags`
50
- 5. Add `[[global:ID]]` backlink in `## Links`
45
+ Create through the `plastic-intent-creating` skill, which scaffolds with one call:
46
+ `ruby ~/.plastic/scripts/new-intent --store .plastic/store --intent "<one-line>" --slug <slug> [--sources <governing-id>]`.
47
+ It allocates the Folgezettel ID, creates `.plastic/store/ID--slug/ID--slug.md` born
48
+ complete, and wires the links. Never hand-author the files: the write-time create gate
49
+ rejects an incomplete or malformed intent file.
51
50
 
52
51
  ## Lifecycle Skills
53
52
 
@@ -56,12 +55,13 @@ Plastic has its own lifecycle skills. When a Plastic skill exists for the curren
56
55
  | Phase | Skill | Produces |
57
56
  |-------|-------|----------|
58
57
  | What | `plastic-intent-creating` | Intent file |
59
- | Why | `plastic-intent-brainstorming` | `spec.md` |
58
+ | Why | `plastic-intent-brainstorming` | Enriched `## Context` + `### Decisions` |
59
+ | Why | `plastic-intent-speccing` | `spec.md` |
60
60
  | Why | `plastic-intent-researching` | `resources/*.md` |
61
61
  | Why | `plastic-intent-grilling` | Deep interrogation |
62
62
  | How | `plastic-intent-planning` | `plan.md`, `checklist.md`, `actions/` |
63
63
  | Exec | `plastic-intent-executing` | Code + `outcome.md` |
64
- | Done | `plastic-store-curating` | Lifecycle transition |
64
+ | Done | `plastic-intent-ending` | Lifecycle transition |
65
65
 
66
66
  **Artifact convention:** ALL lifecycle artifacts go to the active intent directory (`store/{id}--{slug}/`). Never write specs to `docs/superpowers/specs/` or plans to `docs/superpowers/plans/`.
67
67
 
@@ -8,7 +8,8 @@ hash_algorithm: sha256-base36
8
8
  max_slug_words: 5
9
9
  agent:
10
10
  type: claude-code
11
- parallel_mode: linear
11
+ # read-config falls back to linear when this key is absent
12
+ parallel_mode: agent-teams
12
13
  architect:
13
14
  style:
14
15
 
@@ -27,14 +28,14 @@ architect:
27
28
  # plastic-executor: sonnet
28
29
  # plastic-enforcer: opus
29
30
  # codex:
30
- # plastic-executor: gpt-5.1-codex
31
+ # plastic-executor: gpt-5.6-terra
31
32
 
32
33
  # The advisor (intent 185): two consultation agents, plastic-advisor (the real
33
34
  # advisor, expensive, model fable by default) and plastic-faux-advisor (the
34
35
  # cheaper imitation, model opus by default, carrying the same reasoning
35
36
  # discipline inline). advisor.enabled defaults to enabled; missing or
36
- # unreadable counts as enabled (fail-open). The claude.default/primary/
37
- # secondary values are AGENT NAMES, never model names, so a slot can point at
37
+ # unreadable counts as enabled (fail-open). The claude.default value is an
38
+ # AGENT NAME, never a model name, so it can point at
38
39
  # a locally registered agent instead. Set at install time via --no-advisor /
39
40
  # --advisor, or uncomment here directly. Each agent's actual model is a plain
40
41
  # agents.models.claude.<name> override, same mechanism as any other agent.
@@ -42,6 +43,4 @@ architect:
42
43
  # enabled: false # skip installing both advisor agents and the
43
44
  # # agent-advisor skill entirely
44
45
  # claude:
45
- # default: plastic-faux-advisor # which agent the advisor skill routes to
46
- # primary: plastic-advisor # the real advisor slot
47
- # secondary: plastic-faux-advisor # the cheaper advisor slot
46
+ # default: plastic-advisor # which agent the advisor skill routes to
@@ -1,9 +1,9 @@
1
1
  # Index
2
2
 
3
3
  ## Active
4
- <!-- Line shape: `- [ID — Title](path)`. The em-dash (U+2014, not a plain hyphen)
5
- between id and title is load-bearing: Bridge.intent_active? matches only that
6
- shape, and a plain hyphen there fails the lock gate open (see docs/internals.md). -->
4
+ <!-- Line shape: `- [ID — Title](path)`. Writes emit the em-dash (U+2014) between
5
+ id and title; readers (Bridge.index_entry_match) accept the em-dash or a plain
6
+ hyphen, so either form parses (see https://github.com/zalom/plastic/blob/main/docs/internals.md). -->
7
7
  (no active intents)
8
8
 
9
9
  ## Future
@@ -12,5 +12,8 @@
12
12
  ## Clusters
13
13
  (clusters emerge as intents accumulate; add headings when 3+ intents share a topic)
14
14
 
15
+ ## Abandoned
16
+ (links preserved, never deleted)
17
+
15
18
  ## Completed
16
19
  (links preserved, never deleted)
package/templates/spec.md CHANGED
@@ -13,7 +13,7 @@
13
13
  (the chosen approach, in prose)
14
14
 
15
15
  ## Alternatives Considered
16
- - <alternative> not chosen because ...
16
+ - <alternative>: not chosen because ...
17
17
 
18
18
  ## Decisions
19
19
  - ...
@@ -1,40 +0,0 @@
1
- ---
2
- name: plastic-humanizer
3
- description: Use to clean authored prose so it reads human and clutter-free. Removes AI tells and slop from a document, spec, outcome, README, report, or release note. Use when the user says "humanize", "de-slop", "remove the AI tells", or "clean up the wording". For documents, not for every chat reply, and not for code.
4
- user-invocable: true
5
- ---
6
-
7
- # Humanizer
8
-
9
- Make writing read like a person wrote it: plain, direct, low-clutter. Run this as a pass over authored prose (specs, outcomes, README, reports). Do not run it on code or on every chat turn.
10
-
11
- ## Lead (house style)
12
- Reframe your answers and any questions you have for me like you are speaking to a well-educated non-English native person. Reduce slang, and rarely used words and terms in the general communication. And cut all the fancy words from explanations. Technical terms and concepts are fine and need no gloss.
13
-
14
- ## Voice
15
- Answer like a busy bartender or a senior support engineer who has seen almost every ticket. Help fast, give the fix first, earn the tip.
16
-
17
- ## Job 1 - remove these surface tells
18
- 1. Em-dashes and en-dashes - use a comma or a full stop.
19
- 2. "Not X but Y" (and "it's not just X, it's Y").
20
- 3. Rule of three - three items only for rhythm.
21
- 4. Hype / AI words - delve, robust, comprehensive, seamless, leverage, crucial, unlock, landscape.
22
- 5. Filler openers / signposting - "It's worth noting", "It's important to", "Let's dive in".
23
- 6. Hedging pile-up - might, could, perhaps, generally, when not needed.
24
- 7. Sycophancy - "Great question", "You're absolutely right".
25
- 8. Over-bolding - bold only what carries weight.
26
-
27
- ## Job 2 - fix the structure
28
- - Lead with the one main point.
29
- - Cut sentences that only restate.
30
- - Pick concrete words over abstract ones.
31
- - Match the user's voice when samples of their writing exist.
32
-
33
- ## Process
34
- Write, check once against the rules above, then send. On documents, run this pass last.
35
-
36
- ## Length
37
- Keep it short. If a sentence does not help the reader, cut it.
38
-
39
- ## More
40
- For before/after examples, read `references/examples.md`. To make the house style always-on in chat, see `references/always-on-snippet.md`. The full 33-pattern catalog and the research behind this skill live in intent 92's `resources/`. They are background and are not loaded here.
@@ -1,70 +0,0 @@
1
- {
2
- "skill_name": "plastic-humanizer",
3
- "notes": "Intent 92. Cleans authored prose: removes 8 surface tells and applies structural levers (one point, cut restatement, concrete words, match voice). Triggers on document-cleanup asks, not on code. Runner is intent 76; assertions are human for now.",
4
- "evals": [
5
- {
6
- "id": 1,
7
- "scope": "trigger",
8
- "set": "validation",
9
- "prompt": "Humanize this README - it reads like AI wrote it.",
10
- "expected_output": "Selects plastic-humanizer and runs the cleanup pass over the document.",
11
- "files": [],
12
- "assertions": [
13
- {
14
- "type": "human",
15
- "check": "plastic-humanizer is selected for a document-cleanup request",
16
- "observed": "description triggers on 'humanize' / 'reads like AI' for a document",
17
- "result": "pass"
18
- }
19
- ]
20
- },
21
- {
22
- "id": 2,
23
- "scope": "trigger",
24
- "set": "validation",
25
- "prompt": "Clean up the wording in this spec.",
26
- "expected_output": "Selects plastic-humanizer and cleans the spec prose.",
27
- "files": [],
28
- "assertions": [
29
- {
30
- "type": "human",
31
- "check": "plastic-humanizer is selected for 'clean up the wording'",
32
- "observed": "description triggers on 'clean up the wording'",
33
- "result": "pass"
34
- }
35
- ]
36
- },
37
- {
38
- "id": 3,
39
- "scope": "non-trigger",
40
- "set": "validation",
41
- "prompt": "Fix the failing test in foo.rb.",
42
- "expected_output": "Does NOT select plastic-humanizer; this is a code task, not prose cleanup.",
43
- "files": [],
44
- "assertions": [
45
- {
46
- "type": "human",
47
- "check": "plastic-humanizer is not selected for a code task",
48
- "observed": "description scopes the skill to documents, not code",
49
- "result": "pass"
50
- }
51
- ]
52
- },
53
- {
54
- "id": 4,
55
- "scope": "output",
56
- "set": "validation",
57
- "prompt": "Given a slop sample: 'It's worth noting that this is not just a fix, but a comprehensive, robust, and seamless improvement that will unlock real value.' Humanize it.",
58
- "expected_output": "Cleaned text has no em-dashes and none of the 8 tells, leads with one point, and drops restatement. For example: 'This fix makes X faster.'",
59
- "files": [],
60
- "assertions": [
61
- {
62
- "type": "human",
63
- "check": "output drops the 8 tells, leads with one point, cuts restatement",
64
- "observed": "no em-dashes; no 'not X but Y'; no rule-of-three; no hype words; no filler opener; one load-bearing point",
65
- "result": "pass"
66
- }
67
- ]
68
- }
69
- ]
70
- }
@@ -1,9 +0,0 @@
1
- # Always-on chat style (copy-paste)
2
-
3
- Paste this into your global `CLAUDE.md` (applies to all projects) or a project `AGENTS.md` (one project). It keeps the chat style on at near-zero cost. The full cleanup for documents is the `plastic-humanizer` skill.
4
-
5
- ```
6
- Reframe your answers and any questions like you are speaking to a well-educated person who is not a native English speaker. Reduce slang and rarely used words. Cut fancy words from explanations. Technical terms and concepts are fine.
7
-
8
- Answer like a busy bartender or a senior support engineer who has seen almost every ticket: help fast, give the fix first, earn the tip.
9
- ```
@@ -1,48 +0,0 @@
1
- # Examples - before and after
2
-
3
- Each pair shows a tell or a slop pattern, then the fix.
4
-
5
- ## 1. Em-dash
6
- Before: The release is ready - we just need sign-off.
7
- After: The release is ready. We just need sign-off.
8
- Why: Use a full stop or comma, not an em-dash.
9
-
10
- ## 2. "Not X but Y"
11
- Before: This is not just a config change, it's a rethink of the flow.
12
- After: This change reworks the flow.
13
- Why: State the point directly.
14
-
15
- ## 3. Rule of three
16
- Before: The tool is fast, robust, and powerful.
17
- After: The tool is fast.
18
- Why: Drop the list-for-rhythm; keep the claim you can back.
19
-
20
- ## 4. Hype / AI word
21
- Before: We leverage a comprehensive caching layer to unlock performance.
22
- After: We cache results to make it faster.
23
- Why: Plain verbs and nouns.
24
-
25
- ## 5. Filler opener / signposting
26
- Before: It's worth noting that the cache expires after five minutes.
27
- After: The cache expires after five minutes.
28
- Why: Say the thing; skip the runway.
29
-
30
- ## 6. Hedging pile-up
31
- Before: This might possibly help reduce cost in some cases, generally.
32
- After: This reduces cost.
33
- Why: One clear claim. Add a caveat only if it is real.
34
-
35
- ## 7. Sycophancy
36
- Before: Great question! That's a really insightful point. Here's the answer.
37
- After: Here's the answer.
38
- Why: Drop the praise; answer.
39
-
40
- ## 8. Structural fix (the mush)
41
- Before: There are several important considerations to keep in mind when thinking about how best to approach the broad and multifaceted topic of caching, each of which carries its own trade-offs.
42
- After: Cache reads, not writes. Reads repeat; writes do not.
43
- Why: One load-bearing point. Cut the restatement and the abstract throat-clearing.
44
-
45
- ## 9. Over-bolding
46
- Before: **Note:** the cache **expires** after **five minutes**, so **always** check it.
47
- After: The cache expires after five minutes, so check it first.
48
- Why: Bold nothing here; the sentence carries itself.