@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.
- package/PLASTIC.md +23 -8
- package/README.md +16 -5
- package/agents/plastic-enforcer.md +3 -2
- package/agents/plastic-intent-discovery.md +7 -0
- package/bin/plastic.js +17 -8
- package/hooks/auto-arm +2 -2
- package/hooks/bash-gate +1 -1
- package/hooks/check-update +1 -1
- package/hooks/continue +2 -2
- package/hooks/edit-gates +1 -1
- package/hooks/future-intent-check +2 -2
- package/hooks/gate-check +3 -3
- package/hooks/power-tools +1 -1
- package/hooks/session-start +1 -1
- package/package.json +1 -1
- package/scripts/codex-hook +50 -106
- package/scripts/doctor.rb +132 -1080
- package/scripts/exec-worktree +103 -0
- package/scripts/hash-intent +1 -1
- package/scripts/hook-bash-gate +19 -0
- package/scripts/hook-code-gate +4 -1
- package/scripts/hook-continue +2 -2
- package/scripts/hook-create-gate +6 -3
- package/scripts/hook-gate-check +17 -0
- package/scripts/hook-links-gate +4 -1
- package/scripts/hook-lock-gate +7 -3
- package/scripts/hook-savepoint-pre +4 -1
- package/scripts/hook-session-start +21 -15
- package/scripts/lib/apply_patch_envelope.rb +46 -13
- package/scripts/lib/bridge.rb +83 -15
- package/scripts/lib/codex_edit_gates.rb +138 -0
- package/scripts/lib/doctor_core.rb +1087 -0
- package/scripts/lib/edit_gates.rb +61 -5
- package/scripts/lib/exec_worktree.rb +325 -0
- package/scripts/lib/harness_text.rb +57 -0
- package/scripts/lib/hook_registry.rb +32 -28
- package/scripts/lib/installer_core.rb +67 -7
- package/scripts/lib/lock.rb +196 -47
- package/scripts/lib/ruby_probe.rb +60 -0
- package/scripts/lib/scaffold_intent.rb +392 -0
- package/scripts/lib/spec_header.rb +83 -0
- package/scripts/lib/start_intent.rb +296 -0
- package/scripts/lib/verify_intent.rb +262 -0
- package/scripts/lib/worktree.rb +15 -1
- package/scripts/link-suggest +1 -1
- package/scripts/maintenance-run +5 -5
- package/scripts/migrate-to-global +2 -2
- package/scripts/restore-intent-v1 +1 -1
- package/scripts/scaffold-intent +120 -0
- package/scripts/start-intent +89 -0
- package/scripts/verify-intent +73 -0
- package/skills/agent-advisor/SKILL.md +5 -5
- package/skills/auto/SKILL.md +42 -32
- package/skills/auto/references/agent-architecture.md +1 -1
- package/skills/auto/references/agent-report-contract.md +1 -1
- package/skills/auto/references/human-report-contract.md +25 -8
- package/skills/auto/references/tiers.md +24 -2
- package/skills/conventions/references/completion-and-done.md +3 -0
- package/skills/conventions/references/gates-and-enforcement.md +28 -12
- package/skills/conventions/references/locks-and-worktrees.md +3 -3
- package/skills/conventions/references/tiers-and-dispatch.md +10 -9
- package/skills/dashboard/SKILL.md +1 -1
- package/skills/doctor/SKILL.md +6 -5
- package/skills/doctor/references/gates-stuck-detection.md +13 -8
- package/skills/doctor/report.md +1 -1
- package/skills/install/SKILL.md +1 -1
- package/skills/intent-brainstorming/SKILL.md +0 -2
- package/skills/intent-creating/SKILL.md +6 -6
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-discovering/SKILL.md +10 -3
- package/skills/intent-ending/SKILL.md +8 -7
- package/skills/intent-executing/SKILL.md +27 -19
- package/skills/intent-grilling/SKILL.md +5 -3
- package/skills/intent-planning/SKILL.md +7 -3
- package/skills/intent-researching/SKILL.md +0 -2
- package/skills/intent-starting/SKILL.md +10 -2
- package/skills/project-creating/SKILL.md +0 -2
- package/skills/project-creating/references/project-scaffolding.md +1 -1
- package/skills/releasing/SKILL.md +1 -1
- package/skills/releasing/references/promotion-and-tagging.md +14 -8
- package/skills/releasing/references/release-lines.md +1 -1
- package/skills/skill-creating/SKILL.md +5 -2
- package/skills/store-indexing/SKILL.md +8 -5
- package/skills/store-indexing/references/zettelkasten-linking.md +1 -1
- package/skills/tutorial/references/track-1-guided.md +2 -2
- package/skills/tutorial/references/track-2-auto.md +9 -6
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +1 -1
- package/skills/uninstall/SKILL.md +6 -9
- package/templates/agents.md +12 -12
- package/templates/config.yml +6 -7
- package/templates/index.md +6 -3
- package/templates/spec.md +1 -1
- package/skills/humanizer/SKILL.md +0 -40
- package/skills/humanizer/evals/evals.json +0 -70
- package/skills/humanizer/references/always-on-snippet.md +0 -9
- 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 (
|
|
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.
|
|
39
|
-
|
|
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
|
|
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
|
|
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
|
|
124
|
-
read, and `docs/guides/what-the-gates-are-telling-you.md
|
|
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
|
-
|
|
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
|
|
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
|
|
88
|
-
`docs/guides/using-plastic-with-claude-code.md
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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)."
|
package/templates/agents.md
CHANGED
|
@@ -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→
|
|
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 (
|
|
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** —
|
|
40
|
-
- **## Insights** —
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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` | `
|
|
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-
|
|
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
|
|
package/templates/config.yml
CHANGED
|
@@ -8,7 +8,8 @@ hash_algorithm: sha256-base36
|
|
|
8
8
|
max_slug_words: 5
|
|
9
9
|
agent:
|
|
10
10
|
type: claude-code
|
|
11
|
-
|
|
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.
|
|
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
|
|
37
|
-
#
|
|
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-
|
|
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
|
package/templates/index.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Index
|
|
2
2
|
|
|
3
3
|
## Active
|
|
4
|
-
<!-- Line shape: `- [ID — Title](path)`.
|
|
5
|
-
|
|
6
|
-
|
|
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
|
@@ -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.
|