@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.
- package/PLASTIC.md +18 -18
- package/README.md +13 -6
- package/agents/future-intent-researcher.md +1 -1
- package/agents/intent-curator.md +1 -1
- package/deprecations.yml +6 -5
- package/package.json +1 -1
- package/scripts/dashboard.rb +480 -0
- package/scripts/doctor.rb +37 -30
- package/scripts/hook-auto-arm +3 -3
- package/scripts/hook-continue +1 -1
- package/scripts/hook-gate-check +3 -3
- package/scripts/hook-session-start +1 -1
- package/scripts/install.rb +175 -119
- package/scripts/lib/bridge.rb +1 -1
- package/scripts/migrate-to-global +1 -1
- package/skills/_active-intent-gate.md +1 -1
- package/skills/auto/SKILL.md +18 -6
- package/skills/auto/evals/evals.json +17 -17
- package/skills/auto/references/agent-architecture.md +1 -1
- package/skills/brainstorming/SKILL.md +8 -8
- package/skills/brainstorming-grill-me/SKILL.md +5 -5
- package/skills/continuing/SKILL.md +16 -4
- package/skills/creating-intent/SKILL.md +1 -1
- package/skills/creating-project/SKILL.md +4 -4
- package/skills/dashboard/SKILL.md +92 -0
- package/skills/doctor/SKILL.md +4 -4
- package/skills/evaluating-skills/SKILL.md +1 -1
- package/skills/executing-plan/SKILL.md +1 -1
- package/skills/install/SKILL.md +32 -8
- package/skills/intent-curator/SKILL.md +3 -3
- package/skills/linking-intents/SKILL.md +1 -1
- package/skills/managing-index/SKILL.md +1 -1
- package/skills/releasing/SKILL.md +3 -3
- package/skills/research/SKILL.md +2 -2
- package/skills/savepoint/SKILL.md +1 -1
- package/skills/uninstall/SKILL.md +39 -28
- package/skills/update/SKILL.md +2 -2
- package/skills/writing-instructions/SKILL.md +2 -2
- package/skills/writing-plans/SKILL.md +5 -5
- package/templates/agents.md +7 -7
package/skills/auto/SKILL.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
30
|
+
"expected_output": "Activates plastic-auto.",
|
|
31
31
|
"files": [],
|
|
32
32
|
"assertions": [
|
|
33
|
-
{ "type": "code", "check": "router CHOICE == plastic
|
|
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
|
|
39
|
+
"expected_output": "Activates plastic-auto.",
|
|
40
40
|
"files": [],
|
|
41
41
|
"assertions": [
|
|
42
|
-
{ "type": "code", "check": "router CHOICE == plastic
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
68
|
+
"User reviews spec?" -> "Invoke plastic-writing-plans" [label="approved"];
|
|
69
69
|
}
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
**The terminal state is invoking `plastic
|
|
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
|
|
134
|
-
- Do NOT invoke any other skill. `plastic
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
34
|
+
### 3. Run `plastic-install --local`
|
|
35
35
|
|
|
36
|
-
Invoke `plastic
|
|
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.
|
package/skills/doctor/SKILL.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic
|
|
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
|
|
11
|
-
- After `plastic
|
|
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
|
|
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: plastic
|
|
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
|
|
package/skills/install/SKILL.md
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic
|
|
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
|
|
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
|
|
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:
|
|
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/.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
201
|
-
plastic
|
|
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:**
|
package/skills/research/SKILL.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic
|
|
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
|
|
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
|