@zalom/plastic 1.0.0-alpha.15 → 1.0.0-alpha.17

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 (40) hide show
  1. package/PLASTIC.md +18 -18
  2. package/README.md +13 -6
  3. package/agents/future-intent-researcher.md +1 -1
  4. package/agents/intent-curator.md +1 -1
  5. package/deprecations.yml +6 -5
  6. package/package.json +1 -1
  7. package/scripts/dashboard.rb +480 -0
  8. package/scripts/doctor.rb +37 -30
  9. package/scripts/hook-auto-arm +3 -3
  10. package/scripts/hook-continue +1 -1
  11. package/scripts/hook-gate-check +3 -3
  12. package/scripts/hook-session-start +1 -1
  13. package/scripts/install.rb +175 -119
  14. package/scripts/lib/bridge.rb +1 -1
  15. package/scripts/migrate-to-global +1 -1
  16. package/skills/_active-intent-gate.md +1 -1
  17. package/skills/auto/SKILL.md +18 -6
  18. package/skills/auto/evals/evals.json +17 -17
  19. package/skills/auto/references/agent-architecture.md +1 -1
  20. package/skills/brainstorming/SKILL.md +8 -8
  21. package/skills/brainstorming-grill-me/SKILL.md +5 -5
  22. package/skills/continuing/SKILL.md +16 -4
  23. package/skills/creating-intent/SKILL.md +1 -1
  24. package/skills/creating-project/SKILL.md +4 -4
  25. package/skills/dashboard/SKILL.md +92 -0
  26. package/skills/doctor/SKILL.md +4 -4
  27. package/skills/evaluating-skills/SKILL.md +1 -1
  28. package/skills/executing-plan/SKILL.md +1 -1
  29. package/skills/install/SKILL.md +32 -8
  30. package/skills/intent-curator/SKILL.md +3 -3
  31. package/skills/linking-intents/SKILL.md +1 -1
  32. package/skills/managing-index/SKILL.md +1 -1
  33. package/skills/releasing/SKILL.md +3 -3
  34. package/skills/research/SKILL.md +2 -2
  35. package/skills/savepoint/SKILL.md +1 -1
  36. package/skills/uninstall/SKILL.md +39 -28
  37. package/skills/update/SKILL.md +2 -2
  38. package/skills/writing-instructions/SKILL.md +2 -2
  39. package/skills/writing-plans/SKILL.md +5 -5
  40. package/templates/agents.md +7 -7
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:auto
2
+ name: plastic-auto
3
3
  description: >-
4
4
  Autonomous intent delivery — agent takes over How and Exec. Use when user says
5
5
  "auto", "take it from here", "deliver this", or when brainstorming-grill-me concludes
@@ -12,10 +12,22 @@ Announce: "Taking over intent [ID] — [name] for autonomous delivery."
12
12
 
13
13
  ## Precondition
14
14
 
15
- An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic:creating-intent."
15
+ An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-creating-intent."
16
16
 
17
17
  If multiple active intents exist, ask the user which one to deliver (this is the only question auto asks).
18
18
 
19
+ **Picking work when no intent is specified.** If the user says "auto" without naming an
20
+ intent and none is active, consult the dashboard's machine-readable queue to choose the
21
+ next dispatchable intent:
22
+
23
+ ```bash
24
+ ruby ~/.plastic/scripts/dashboard.rb all --json
25
+ ```
26
+
27
+ Work `dispatchable_queue` in `rank` order (these are `defer`/`research` dispositions —
28
+ safe to deliver autonomously). Leave `human_only` and `next_big_thing` for the user — those
29
+ are `drive`/`triage` items the human should lead. See the `plastic-dashboard` skill.
30
+
19
31
  ## Arm the Lifecycle Gate (do this FIRST)
20
32
 
21
33
  Immediately after selecting the intent — before any other work — arm auto mode. This
@@ -86,7 +98,7 @@ If the plan calls for creating a new project (the intent is an implementation in
86
98
  1. Determine project path from `~/.plastic/config.yml` `project_roots` or from intent context
87
99
  2. **Confirm path with user** — this is the ONE human interaction during auto delivery:
88
100
  > "Creating project `<slug>` at `<path>`. Confirm path, or provide alternative."
89
- 3. Invoke `plastic:creating-project` skill
101
+ 3. Invoke `plastic-creating-project` skill
90
102
  4. The global intent is now Completed (creating-project handles this)
91
103
  5. The tactical mirror in the project store becomes the active intent
92
104
  6. Continue execution from the project directory using the tactical intent
@@ -94,7 +106,7 @@ If the plan calls for creating a new project (the intent is an implementation in
94
106
  ## Exec Phase
95
107
 
96
108
  1. If `superpowers:subagent-driven-development` or `superpowers:executing-plans` is available, delegate execution to it
97
- 2. Otherwise invoke `plastic:executing-plan`
109
+ 2. Otherwise invoke `plastic-executing-plan`
98
110
  3. Execute actions from checklist sequentially
99
111
  4. Check off items in `checklist.md` as completed
100
112
  5. Append observations to `## Insights` with `(autonomous)` marker
@@ -143,9 +155,9 @@ During initial project creation, all decisions are non-destructive by definition
143
155
  - `fix_and_retry` — attempt to fix the failure, re-run verify (max 2 retries)
144
156
  - `stop` — write `savepoint.md` with current state, notify user: "Verify failed — savepoint written.", **STOP**
145
157
  - `manual` — notify user: "Verify failed: [summary]. Resolve manually."
146
- 5. If `release.on_green` has items, invoke `plastic:releasing` to handle them (tag, changelog, publish, etc.). Do NOT duplicate release logic — delegate entirely.
158
+ 5. If `release.on_green` has items, invoke `plastic-releasing` to handle them (tag, changelog, publish, etc.). Do NOT duplicate release logic — delegate entirely.
147
159
  5. Review `## Insights` for observations that should spawn future intents. If any:
148
- - Create them (using `plastic:creating-intent` conventions)
160
+ - Create them (using `plastic-creating-intent` conventions)
149
161
  - Update `chain` in the current intent's frontmatter
150
162
  6. Move intent from `## Active` to `## Completed` in INDEX.md (with today's date)
151
163
  7. Auto-commit: `cd <store-root> && git add . && git commit -m "feat: deliver intent <ID> — <name>"`
@@ -1,5 +1,5 @@
1
1
  {
2
- "skill_name": "plastic:auto",
2
+ "skill_name": "plastic-auto",
3
3
  "notes": "Intent 27. Scopes: description triggering (1-8) and behavior/output quality (9). Assertions written after observing Step-3 runs (one clean subagent router per case).",
4
4
  "results": {
5
5
  "triggering": { "cases": 8, "passed": 8, "pass_at_1": 1.0, "run": "2026-06-10, one subagent per case" },
@@ -9,73 +9,73 @@
9
9
  {
10
10
  "id": 1, "scope": "triggering", "set": "train",
11
11
  "prompt": "auto",
12
- "expected_output": "Activates plastic:auto (the bare 'auto' keyword is the documented trigger).",
12
+ "expected_output": "Activates plastic-auto (the bare 'auto' keyword is the documented trigger).",
13
13
  "files": [],
14
14
  "assertions": [
15
- { "type": "code", "check": "router CHOICE == plastic:auto", "observed": "plastic:auto", "result": "pass" }
15
+ { "type": "code", "check": "router CHOICE == plastic-auto", "observed": "plastic-auto", "result": "pass" }
16
16
  ]
17
17
  },
18
18
  {
19
19
  "id": 2, "scope": "triggering", "set": "train",
20
20
  "prompt": "take it from here and deliver intent 27 end to end",
21
- "expected_output": "Activates plastic:auto (autonomous delivery of an active intent).",
21
+ "expected_output": "Activates plastic-auto (autonomous delivery of an active intent).",
22
22
  "files": [],
23
23
  "assertions": [
24
- { "type": "code", "check": "router CHOICE == plastic:auto", "observed": "plastic:auto", "result": "pass" }
24
+ { "type": "code", "check": "router CHOICE == plastic-auto", "observed": "plastic-auto", "result": "pass" }
25
25
  ]
26
26
  },
27
27
  {
28
28
  "id": 3, "scope": "triggering", "set": "validation",
29
29
  "prompt": "go fully autonomous on the active intent, don't ask me questions",
30
- "expected_output": "Activates plastic:auto.",
30
+ "expected_output": "Activates plastic-auto.",
31
31
  "files": [],
32
32
  "assertions": [
33
- { "type": "code", "check": "router CHOICE == plastic:auto", "observed": "plastic:auto", "result": "pass" }
33
+ { "type": "code", "check": "router CHOICE == plastic-auto", "observed": "plastic-auto", "result": "pass" }
34
34
  ]
35
35
  },
36
36
  {
37
37
  "id": 4, "scope": "triggering", "set": "train",
38
38
  "prompt": "deliver this intent for me",
39
- "expected_output": "Activates plastic:auto.",
39
+ "expected_output": "Activates plastic-auto.",
40
40
  "files": [],
41
41
  "assertions": [
42
- { "type": "code", "check": "router CHOICE == plastic:auto", "observed": "plastic:auto", "result": "pass" }
42
+ { "type": "code", "check": "router CHOICE == plastic-auto", "observed": "plastic-auto", "result": "pass" }
43
43
  ]
44
44
  },
45
45
  {
46
46
  "id": 5, "scope": "triggering", "set": "train",
47
47
  "prompt": "set up a hook to automatically format the file on every save",
48
- "expected_output": "Does NOT activate plastic:auto. Near-miss: shares 'auto*' but is a settings/hooks task (update-config).",
48
+ "expected_output": "Does NOT activate plastic-auto. Near-miss: shares 'auto*' but is a settings/hooks task (update-config).",
49
49
  "files": [],
50
50
  "assertions": [
51
- { "type": "code", "check": "router CHOICE != plastic:auto", "observed": "update-config", "result": "pass" }
51
+ { "type": "code", "check": "router CHOICE != plastic-auto", "observed": "update-config", "result": "pass" }
52
52
  ]
53
53
  },
54
54
  {
55
55
  "id": 6, "scope": "triggering", "set": "validation",
56
56
  "prompt": "deliver the built package to the dist directory",
57
- "expected_output": "Does NOT activate plastic:auto. Near-miss: shares 'deliver' but is a build/file task.",
57
+ "expected_output": "Does NOT activate plastic-auto. Near-miss: shares 'deliver' but is a build/file task.",
58
58
  "files": [],
59
59
  "assertions": [
60
- { "type": "code", "check": "router CHOICE != plastic:auto", "observed": "none", "result": "pass" }
60
+ { "type": "code", "check": "router CHOICE != plastic-auto", "observed": "none", "result": "pass" }
61
61
  ]
62
62
  },
63
63
  {
64
64
  "id": 7, "scope": "triggering", "set": "train",
65
65
  "prompt": "create a new intent for the dashboard idea",
66
- "expected_output": "Does NOT activate plastic:auto; activates plastic:creating-intent.",
66
+ "expected_output": "Does NOT activate plastic-auto; activates plastic-creating-intent.",
67
67
  "files": [],
68
68
  "assertions": [
69
- { "type": "code", "check": "router CHOICE != plastic:auto", "observed": "plastic:creating-intent", "result": "pass" }
69
+ { "type": "code", "check": "router CHOICE != plastic-auto", "observed": "plastic-creating-intent", "result": "pass" }
70
70
  ]
71
71
  },
72
72
  {
73
73
  "id": 8, "scope": "triggering", "set": "validation",
74
74
  "prompt": "what's the status of my active intents?",
75
- "expected_output": "Does NOT activate plastic:auto; this is a read/continuing/managing-index query.",
75
+ "expected_output": "Does NOT activate plastic-auto; this is a read/continuing/managing-index query.",
76
76
  "files": [],
77
77
  "assertions": [
78
- { "type": "code", "check": "router CHOICE != plastic:auto", "observed": "plastic:managing-index", "result": "pass" }
78
+ { "type": "code", "check": "router CHOICE != plastic-auto", "observed": "plastic-managing-index", "result": "pass" }
79
79
  ]
80
80
  },
81
81
  {
@@ -37,7 +37,7 @@ Rules:
37
37
 
38
38
  Human owns What and Why for human-initiated intents. Agent assists (research,
39
39
  exploration) but human drives until handoff. When Why is complete — or human
40
- triggers `plastic:auto` — the agent takes over How and Exec autonomously.
40
+ triggers `plastic-auto` — the agent takes over How and Exec autonomously.
41
41
 
42
42
  - **Safe-by-default:** Agent always prefers non-destructive routes (rename vs
43
43
  delete, additive migrations, backups before changes). Destructive actions on
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:brainstorming
2
+ name: plastic-brainstorming
3
3
  description: "Explore intent requirements and design before implementation. Produces spec.md in the active intent directory."
4
4
  ---
5
5
 
@@ -20,7 +20,7 @@ Do NOT invoke any implementation skill, write any code, scaffold any project, or
20
20
  Before proceeding, resolve the active intent:
21
21
 
22
22
  1. **Detect store:** Read `~/.plastic/projects.yml`, match CWD against registered project paths. If match → project store at `~/.plastic/projects/{slug}/store/`. If no match → global store at `~/.plastic/store/`.
23
- 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic:creating-intent"
23
+ 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-creating-intent"
24
24
  3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
25
25
 
26
26
  All artifacts go to the intent directory. Never write to external paths.
@@ -40,7 +40,7 @@ You MUST create a task for each of these items and complete them in order:
40
40
  5. **Write spec** — save to `{intent_dir}/spec.md` and commit to store repo
41
41
  6. **Spec self-review** — placeholder scan, consistency, scope, ambiguity
42
42
  7. **User reviews written spec** — ask user to review before proceeding
43
- 8. **Transition to planning** — invoke `plastic:writing-plans`
43
+ 8. **Transition to planning** — invoke `plastic-writing-plans`
44
44
 
45
45
  ## Process Flow
46
46
 
@@ -54,7 +54,7 @@ digraph brainstorming {
54
54
  "Write spec" [shape=box];
55
55
  "Spec self-review\n(fix inline)" [shape=box];
56
56
  "User reviews spec?" [shape=diamond];
57
- "Invoke plastic:writing-plans" [shape=doublecircle];
57
+ "Invoke plastic-writing-plans" [shape=doublecircle];
58
58
 
59
59
  "Explore project context" -> "Ask clarifying questions";
60
60
  "Ask clarifying questions" -> "Propose 2-3 approaches";
@@ -65,11 +65,11 @@ digraph brainstorming {
65
65
  "Write spec" -> "Spec self-review\n(fix inline)";
66
66
  "Spec self-review\n(fix inline)" -> "User reviews spec?";
67
67
  "User reviews spec?" -> "Write spec" [label="changes requested"];
68
- "User reviews spec?" -> "Invoke plastic:writing-plans" [label="approved"];
68
+ "User reviews spec?" -> "Invoke plastic-writing-plans" [label="approved"];
69
69
  }
70
70
  ```
71
71
 
72
- **The terminal state is invoking `plastic:writing-plans`.** Do NOT invoke any other implementation skill. The ONLY skill you invoke after brainstorming is `plastic:writing-plans`.
72
+ **The terminal state is invoking `plastic-writing-plans`.** Do NOT invoke any other implementation skill. The ONLY skill you invoke after brainstorming is `plastic-writing-plans`.
73
73
 
74
74
  ## The Process
75
75
 
@@ -130,8 +130,8 @@ After the spec review loop passes, ask the user to review the written spec befor
130
130
  Wait for the user's response. If they request changes, make them and re-run the spec review loop. Only proceed once the user approves.
131
131
 
132
132
  **Implementation:**
133
- - Invoke `plastic:writing-plans` to create the implementation plan
134
- - Do NOT invoke any other skill. `plastic:writing-plans` is the next step.
133
+ - Invoke `plastic-writing-plans` to create the implementation plan
134
+ - Do NOT invoke any other skill. `plastic-writing-plans` is the next step.
135
135
 
136
136
  ## Key Principles
137
137
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:brainstorming-grill-me
2
+ name: plastic-brainstorming-grill-me
3
3
  description: >-
4
4
  Deep brainstorming that interviews the user relentlessly about a plan or design until reaching shared understanding.
5
5
  Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
@@ -83,18 +83,18 @@ If ALL items pass, offer autonomous delivery:
83
83
  >
84
84
  > Want to grill more, or should I go autonomous?"
85
85
 
86
- - If human says go → invoke `plastic:auto`
86
+ - If human says go → invoke `plastic-auto`
87
87
  - If human says grill more → continue grilling (reset to step 2)
88
88
  - If human says neither (wants to drive manually) → proceed as before (offer planning)
89
89
 
90
90
  This offer replaces the final question in Close Out ("Ready to plan implementation, or do you want another pass?"). The new options are:
91
- 1. Go autonomous (`plastic:auto`)
91
+ 1. Go autonomous (`plastic-auto`)
92
92
  2. Grill more (continue interrogation)
93
93
  3. Plan manually (invoke `superpowers:writing-plans` or proceed with human-driven planning)
94
94
 
95
95
  ## Relationship to superpowers:brainstorming
96
96
 
97
- | | superpowers:brainstorming | plastic:brainstorming-grill-me |
97
+ | | superpowers:brainstorming | plastic-brainstorming-grill-me |
98
98
  |---|---|---|
99
99
  | Speed | Quick (5-10 min) | Thorough (20-45 min) |
100
100
  | Depth | Surface-level exploration | Exhaustive decision tree |
@@ -102,4 +102,4 @@ This offer replaces the final question in Close Out ("Ready to plan implementati
102
102
  | Output | Initial spec | Battle-tested spec with all branches resolved |
103
103
  | Style | Collaborative, exploratory | Interrogative, relentless |
104
104
 
105
- Use `superpowers:brainstorming` to generate ideas. Use `plastic:brainstorming-grill-me` to pressure-test them.
105
+ Use `superpowers:brainstorming` to generate ideas. Use `plastic-brainstorming-grill-me` to pressure-test them.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:continuing
2
+ name: plastic-continuing
3
3
  description: Use when the user says "continue" after a /clear, or when resuming work in a new session. Reads intent state from global store (~/.plastic/) or local store, offers active intents first, then future intents, and surfaces stale intents for triage.
4
4
  ---
5
5
 
@@ -14,10 +14,22 @@ description: Use when the user says "continue" after a /clear, or when resuming
14
14
 
15
15
  1. Check `~/.plastic/INDEX.md` → global mode
16
16
  2.
17
- 3. If neither exists → announce "No Plastic store found. Run /plastic:install."
17
+ 3. If neither exists → announce "No Plastic store found. Run /plastic-install."
18
18
 
19
19
  ## Workflow
20
20
 
21
+ ### 0. Render the dashboard (overview)
22
+ For the "where are we / what's next" overview, run the deterministic dashboard and show
23
+ its output verbatim instead of hand-summarizing intents:
24
+
25
+ ```bash
26
+ ruby ~/.plastic/scripts/dashboard.rb continue
27
+ ```
28
+
29
+ This is the uniform, model-agnostic cockpit (active + last touched, then the Value×Effort
30
+ matrix). Then continue with the steps below to actually resume a specific intent. See the
31
+ `plastic-dashboard` skill for how to read the matrix.
32
+
21
33
  ### 1. Read INDEX.md
22
34
  Read the INDEX.md from the active store. Extract intents under `## Active` and `## Future`.
23
35
 
@@ -68,7 +80,7 @@ Last autonomous action: [last (autonomous) insight entry]
68
80
  Next step: [from checklist or savepoint]
69
81
  ```
70
82
 
71
- **Then:** Continue autonomous execution by invoking `plastic:auto`. The auto skill will pick up from the current lifecycle stage (it reads filesystem state to determine where to resume).
83
+ **Then:** Continue autonomous execution by invoking `plastic-auto`. The auto skill will pick up from the current lifecycle stage (it reads filesystem state to determine where to resume).
72
84
 
73
85
  If NOT found — resume normally as described in step 3.
74
86
 
@@ -91,7 +103,7 @@ Stale future intents (no action taken):
91
103
  - implement: agent builds it
92
104
  - research: agent investigates feasibility
93
105
  - ideate: agent explores the problem space
94
- d) Auto — go fully autonomous (invokes plastic:auto — agent delivers the intent end-to-end)
106
+ d) Auto — go fully autonomous (invokes plastic-auto — agent delivers the intent end-to-end)
95
107
  ```
96
108
 
97
109
  Auto-commit all triage changes.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:creating-intent
2
+ name: plastic-creating-intent
3
3
  description: Use when new work begins, the user expresses a new goal, says "new intent", or no active intent exists for the current task. Creates intents in the global store (~/.plastic/store/) or in a project's store (~/.plastic/projects/{slug}/store/) depending on context.
4
4
  ---
5
5
 
@@ -1,8 +1,8 @@
1
1
  ---
2
- name: plastic:creating-project
2
+ name: plastic-creating-project
3
3
  description: >-
4
4
  Create a new project from an implementation intent. Sets up project directory,
5
- git init, AGENTS.md with founding intent decisions, plastic:install --local,
5
+ git init, AGENTS.md with founding intent decisions, plastic-install --local,
6
6
  tactical mirror, projects.yml registration, and framework scaffolding.
7
7
  Use when an implementation intent spawns a project, or manually by user.
8
8
  ---
@@ -31,9 +31,9 @@ cd <project_root>/<slug>
31
31
  git init
32
32
  ```
33
33
 
34
- ### 3. Run `plastic:install --local`
34
+ ### 3. Run `plastic-install --local`
35
35
 
36
- Invoke `plastic:install --local` in the project directory. This creates:
36
+ Invoke `plastic-install --local` in the project directory. This creates:
37
37
  ```
38
38
  .plastic/
39
39
  ├── store/
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: plastic-dashboard
3
+ description: Use when the user wants an overview of intents, asks "where are we", "what's next", "what should I work on", "show the dashboard", or invokes /plastic-dashboard. Renders a deterministic Value×Effort work cockpit across the global store and all projects, and emits a machine-readable queue that auto mode consumes.
4
+ ---
5
+
6
+ # Dashboard — Plastic Work Cockpit
7
+
8
+ A deterministic, template-driven overview of the intent store(s). It answers three
9
+ questions at a glance — **where we are** (active + last touched), **where we go next**
10
+ (a Value×Effort matrix), and **how to conduct it** (a disposition verb per intent) — and
11
+ emits a JSON manifest that `plastic-auto` reads to pick the next dispatchable intent.
12
+
13
+ The script does the rendering. The LLM is **never** in the rendering path: same store
14
+ state → byte-identical output, regardless of model. Do not hand-summarize intents when
15
+ this skill applies — run the script and show its output verbatim.
16
+
17
+ ## When to Use
18
+
19
+ - User invokes `/plastic-dashboard`
20
+ - User asks "where are we", "what's next", "what should I work on", "show me the intents"
21
+ - `plastic-continuing` embeds the `continue` view on resume
22
+ - `plastic-auto` reads `--json` to choose the next dispatchable intent
23
+
24
+ ## Procedure
25
+
26
+ ### Step 1 — Run the script
27
+
28
+ ```bash
29
+ ruby ~/.plastic/scripts/dashboard.rb [continue|project <slug>|all] [--json]
30
+ ```
31
+
32
+ | Mode | Shows |
33
+ |------|-------|
34
+ | `continue` (default) | Cross-scope: active + last touched, then the Value×Effort matrix for all scopes |
35
+ | `project <slug>` | One project: active line + its Value×Effort matrix |
36
+ | `all` | Per-scope roll-up summary |
37
+ | `--json` | The auto-mode manifest (any mode); machine-readable, not for humans |
38
+
39
+ The script is **read-only**. Print its stdout verbatim — do not reformat, re-sort, or
40
+ re-summarize. That is what keeps the output uniform.
41
+
42
+ ### Step 2 — Read the matrix
43
+
44
+ ```
45
+ small effort big effort
46
+ high value QUICK WIN ★ NEXT BIG THING
47
+ low value DEFER → agent TRIAGE / question
48
+ (type=research/exploration → RESEARCH band, regardless of quadrant)
49
+ ```
50
+
51
+ Disposition verbs: `▸ drive` (human leads), `⇢ defer` (agent knocks off),
52
+ `⊙ research` (research/explore agent), `⚑ triage` (human review / maybe abandon).
53
+ Flags: `⇡ unblocked` (a dependency just completed), `(Nd)` stale age.
54
+
55
+ ### Step 3 — Act on it
56
+
57
+ - **★ Next big thing** and `▸ drive` / `⚑ triage` items → the human leads (brainstorm → plan → exec).
58
+ - `⇢ defer` and `⊙ research` items → dispatchable to agents.
59
+ - In auto mode, read `--json` and work `dispatchable_queue` in `rank` order; leave
60
+ `human_only` for the user.
61
+
62
+ ## JSON contract
63
+
64
+ ```json
65
+ { "generated_for": "auto-mode", "scope": "<scope|all>",
66
+ "next_big_thing": "<id|null>",
67
+ "dispatchable_queue": [ {"id","scope","disposition","type","value","effort","flags","rank"} ],
68
+ "human_only": ["<id>", "..."] }
69
+ ```
70
+
71
+ ## How classification works (deterministic)
72
+
73
+ - **Effort** — small for `research`/`exploration`/`bugfix`, for already-scoped intents
74
+ (plan/checklist exists), or deep refinement branches; big otherwise.
75
+ - **Value** — high only for an explicit `value: high` frontmatter field, or a
76
+ human-authored root intent that has spawned follow-on work (`chain` non-empty); low otherwise.
77
+ - **Override** — a `value: high|normal|low` field in an intent's frontmatter wins. This is
78
+ the only place model judgment enters, and only as pre-stamped data (never at render time).
79
+
80
+ ## Eval
81
+
82
+ This skill's eval is **render the template**: run the engine against the test fixture
83
+ store and assert byte-identical text + JSON output against the golden snapshots in
84
+ `test/fixtures/dashboard/`. See `test/dashboard_test.rb`. If output drifts from the
85
+ golden files without an intentional template change, the skill is broken.
86
+
87
+ ## Notes
88
+
89
+ - Clusters (Zettelkasten grouping in INDEX.md) are intentionally **not** rendered — they
90
+ are orthogonal to "what to work on next."
91
+ - Glyphs are monochrome Unicode (no emoji); they render in standard terminal emulators.
92
+ - This is additive: it changes no core lifecycle, gate, or cycle logic.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:doctor
2
+ name: plastic-doctor
3
3
  description: Use when diagnosing Plastic installation health, after updates, or when something seems broken. Runs checks and reports findings with fix options.
4
4
  ---
5
5
 
@@ -7,8 +7,8 @@ description: Use when diagnosing Plastic installation health, after updates, or
7
7
 
8
8
  ## When to Use
9
9
 
10
- - User invokes `/plastic:doctor`
11
- - After `plastic:update` completes (automatically)
10
+ - User invokes `/plastic-doctor`
11
+ - After `plastic-update` completes (automatically)
12
12
  - When hooks aren't firing, skills aren't loading, or something seems broken
13
13
  - When the user says "check plastic", "diagnose", "what's wrong with plastic"
14
14
 
@@ -95,7 +95,7 @@ Show the updated results.
95
95
 
96
96
  ## Post-Update Mode
97
97
 
98
- When invoked from `plastic:update` (not directly by the user):
98
+ When invoked from `plastic-update` (not directly by the user):
99
99
 
100
100
  1. Run the diagnostic script as in Step 1.
101
101
  2. If all checks pass: show a single line — **"Health check: all clear."**
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: evaluating-skills
2
+ name: plastic-evaluating-skills
3
3
  description: >
4
4
  Evaluate Plastic skills for correctness, convention compliance, and
5
5
  progressive disclosure. Use when testing whether a skill produces good
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:executing-plan
2
+ name: plastic-executing-plan
3
3
  description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (dispatches fresh subagent per task with two-stage review). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
4
4
  ---
5
5
 
@@ -1,10 +1,28 @@
1
1
  ---
2
- name: plastic:install
3
- description: Use when initializing Plastic globally (~/.plastic/) or locally in a project. Accepts channel flags (--alpha, --beta, --latest) to select release channel. Default is --latest (stable). Global install is recommended — creates the global intent store as a git-backed repository. Local install creates .plastic/ in the current project for testing.
2
+ name: plastic-install
3
+ description: Use when initializing Plastic globally (~/.plastic/) or locally in a project, or to re-install/repair a broken installation. Accepts channel flags (--alpha, --beta, --latest) to select release channel. Default is --latest (stable). Global install is recommended — creates the global intent store as a git-backed repository. Local install creates .plastic/ in the current project for testing.
4
4
  ---
5
5
 
6
6
  # Install Plastic
7
7
 
8
+ > **Recommended path:** for a first install, run `npx @zalom/plastic@latest --claude`
9
+ > in your shell (or `bunx @zalom/plastic@latest --claude` if you use Bun). This skill
10
+ > exists to **re-install or repair** an existing setup from inside the agent, and to
11
+ > drive interactive global configuration. Whenever this skill performs an install or
12
+ > re-install, it **runs `/plastic-doctor` afterward** and reports the result.
13
+
14
+ ## Re-install / repair
15
+
16
+ If Plastic is already installed but something is broken (skills missing, hooks not
17
+ firing, leftover legacy plugin), re-run the installer — it is idempotent, prunes
18
+ files that no longer ship, and removes any legacy plugin/marketplace layout:
19
+
20
+ ```bash
21
+ npx @zalom/plastic@latest --claude # or @beta / @alpha to match your channel
22
+ ```
23
+
24
+ Then **run `/plastic-doctor`** and report what it found.
25
+
8
26
  ## Channel Flags
9
27
 
10
28
  | Flag | Behavior |
@@ -33,14 +51,14 @@ The installed version and channel are recorded in `~/.plastic/VERSION`.
33
51
 
34
52
  ### Global Install (default, recommended)
35
53
 
36
- Run `/plastic:install` with no arguments.
54
+ Run `/plastic-install` with no arguments.
37
55
 
38
56
  #### Procedure
39
57
 
40
58
  **Step 1: Check for existing installation**
41
59
 
42
60
  Check if `~/.plastic/INDEX.md` exists.
43
- - If yes: announce "Plastic is already installed at ~/.plastic/. Run `/plastic:update` to sync core files."
61
+ - If yes: announce "Plastic is already installed at ~/.plastic/. Run `/plastic-update` to sync core files."
44
62
  - If no: proceed with fresh install.
45
63
 
46
64
  **Step 2: Create ~/.plastic/ as a git repo**
@@ -130,13 +148,19 @@ Update `config.yml` with any additional roots.
130
148
 
131
149
  Auto-commit the config change.
132
150
 
133
- **Step 4: Announce**
151
+ **Step 4: Verify with doctor**
152
+
153
+ Run `/plastic-doctor` and report the result. Resolve any fixable findings before
154
+ announcing success.
155
+
156
+ **Step 5: Announce**
134
157
 
135
- > "Plastic installed globally at ~/.plastic/. Create your first intent with `/plastic:creating-intent`."
158
+ > "Plastic installed globally at ~/.plastic/. Health check: [doctor summary].
159
+ > Create your first intent with `/plastic-creating-intent`."
136
160
 
137
161
  ### Local Install (testing/legacy)
138
162
 
139
- Run `/plastic:install --local`.
163
+ Run `/plastic-install --local`.
140
164
 
141
165
  #### Procedure
142
166
 
@@ -155,4 +179,4 @@ Run `/plastic:install --local`.
155
179
 
156
180
  **Step 4:** Commit in project: `git add .plastic/ && git commit -m "chore: initialize Plastic local store"`
157
181
 
158
- **Step 5:** Announce: "Plastic initialized locally. This is a testing/legacy mode. Consider `/plastic:install` for global mode."
182
+ **Step 5:** Announce: "Plastic initialized locally. This is a testing/legacy mode. Consider `/plastic-install` for global mode."
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:intent-curator
2
+ name: plastic-intent-curator
3
3
  description: |
4
4
  Use when completing or reviewing intents, reorganizing the index,
5
5
  or when the intent store needs maintenance. Examples:
@@ -15,7 +15,7 @@ description: |
15
15
 
16
16
  # Intent Curator
17
17
 
18
- Dispatches to the `plastic:intent-curator` agent for intent store maintenance.
18
+ Dispatches to the `plastic-intent-curator` agent for intent store maintenance.
19
19
 
20
20
  ## When to Use
21
21
  - Completing or reviewing intents
@@ -25,7 +25,7 @@ Dispatches to the `plastic:intent-curator` agent for intent store maintenance.
25
25
 
26
26
  ## Workflow
27
27
 
28
- Invoke the `plastic:intent-curator` agent via the Agent tool with `subagent_type: "plastic:intent-curator"`. Pass the user's request as the prompt, including:
28
+ Invoke the `plastic-intent-curator` agent via the Agent tool with `subagent_type: "plastic-intent-curator"`. Pass the user's request as the prompt, including:
29
29
 
30
30
  1. **What to do** — complete intent, reorganize, triage stale, etc.
31
31
  2. **Which store** — global (`~/.plastic/`) or project (`.plastic/store/`)
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:linking-intents
2
+ name: plastic-linking-intents
3
3
  description: Use when creating connections between intents, the user says "link" or "connect", or when discovering that two intents are related. Manages sources, chain, and cross-reference links.
4
4
  ---
5
5
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:managing-index
2
+ name: plastic-managing-index
3
3
  description: Use after creating, completing, or abandoning intents, when the user says "index" or "organize", or when INDEX.md needs maintenance. Curates the INDEX.md structure note.
4
4
  ---
5
5
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:releasing
2
+ name: plastic-releasing
3
3
  description: Use when merging a feature branch to main and tagging a release, bumping the version, or when the user says "release", "tag", or "ship it"
4
4
  ---
5
5
 
@@ -197,8 +197,8 @@ A release IS a delivery. The active intent that drove this work must be complete
197
197
  To promote a release across channels, use `--promote`:
198
198
 
199
199
  ```bash
200
- plastic:releasing --promote beta # promotes current alpha → beta
201
- plastic:releasing --promote stable # promotes current beta → stable
200
+ plastic-releasing --promote beta # promotes current alpha → beta
201
+ plastic-releasing --promote stable # promotes current beta → stable
202
202
  ```
203
203
 
204
204
  **Promotion rules:**
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:research
2
+ name: plastic-research
3
3
  description: "Research a topic for the active intent. Agent decides shallow vs deep based on scope. Produces reports in the intent's resources/ directory."
4
4
  ---
5
5
 
@@ -14,7 +14,7 @@ Investigate a topic related to the active intent. Choose the right depth, produc
14
14
  Before proceeding, resolve the active intent:
15
15
 
16
16
  1. **Detect store:** Read `~/.plastic/projects.yml`, match CWD against registered project paths. If match → project store at `~/.plastic/projects/{slug}/store/`. If no match → global store at `~/.plastic/store/`.
17
- 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic:creating-intent"
17
+ 2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-creating-intent"
18
18
  3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
19
19
 
20
20
  ## Depth Decision
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plastic:savepoint
2
+ name: plastic-savepoint
3
3
  description: Use when context is being compacted (PreCompact hook), user says "save" or "savepoint", or before ending a session. Saves the active intent's state so work can resume after /clear.
4
4
  ---
5
5