@zalom/plastic 1.0.0-beta.35 → 1.0.0-beta.37
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-reference.md +133 -0
- package/PLASTIC.md +21 -145
- package/README.md +88 -65
- package/agents/plastic-brainstorming.md +2 -6
- package/agents/plastic-enforcer.md +11 -6
- package/agents/plastic-executor.md +2 -6
- package/agents/plastic-future-intent-researcher.md +2 -7
- package/agents/plastic-intent-curator.md +2 -10
- package/agents/plastic-intent-discovery.md +2 -7
- package/agents/plastic-planner.md +2 -6
- package/agents/plastic-spec-specialist.md +2 -6
- package/package.json +2 -1
- package/scripts/install.rb +2 -1
- package/scripts/lib/bridge.rb +73 -2
- package/scripts/lib/installer_core.rb +1 -0
- package/scripts/lib/power_tools.rb +18 -16
- package/skills/auto/SKILL.md +40 -38
- package/skills/auto/references/end-tail.md +56 -0
- package/skills/auto/references/human-report-contract.md +55 -0
- package/skills/brainstorming/SKILL.md +7 -34
- package/skills/brainstorming/references/design-principles.md +49 -0
- package/skills/creating-intent/SKILL.md +5 -26
- package/skills/creating-project/SKILL.md +11 -74
- package/skills/creating-project/references/project-scaffolding.md +97 -0
- package/skills/dashboard/SKILL.md +2 -17
- package/skills/dashboard/references/classification.md +22 -0
- package/skills/install/SKILL.md +1 -1
- package/skills/releasing/SKILL.md +14 -46
- package/skills/releasing/references/promotion-and-tagging.md +60 -0
- package/skills/writing-plans/SKILL.md +10 -88
- package/skills/writing-plans/references/plan-format.md +102 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Plastic - Reference
|
|
2
|
+
|
|
3
|
+
> **This file is maintained by Plastic.** It will be overwritten when the
|
|
4
|
+
> plugin is updated. It holds reference material: read it on demand, it is
|
|
5
|
+
> not injected at session start.
|
|
6
|
+
|
|
7
|
+
### Structural maintenance and revisions.md
|
|
8
|
+
|
|
9
|
+
When a delivered intent accumulates structural junk (an unsanctioned section, a stray file, a
|
|
10
|
+
frontmatter edge to an intent that no longer exists), the intent-curator relocates it into
|
|
11
|
+
`revisions.md` instead of reopening the work. Each entry is a versioned, dated header
|
|
12
|
+
(`## Revision vN - YYYY-MM-DD-HH:MM`) plus `Why` (one sentence naming the broken rule, ending
|
|
13
|
+
with `[rule: <tag>]`), `Prior location`, and either `Content held` (the verbatim removed
|
|
14
|
+
content) or, for a frontmatter edit, a one-line `Change` (before and after). A stray file has
|
|
15
|
+
its full content embedded and the original is deleted.
|
|
16
|
+
|
|
17
|
+
Violation tags (starter set, free-text tags allowed):
|
|
18
|
+
- `unsanctioned-section`: a top-level section the sanctioned-section rule now rejects
|
|
19
|
+
- `phantom-section`: a section referenced but not present or not sanctioned
|
|
20
|
+
- `stray-file`: a file that does not belong in the intent directory
|
|
21
|
+
- `dangling-ref`: a link or reference to something that no longer exists
|
|
22
|
+
- `broken-chain`: a chain frontmatter edge to an intent that no longer exists
|
|
23
|
+
- `broken-source`: a sources frontmatter edge to an intent that no longer exists
|
|
24
|
+
- `misplaced-content`: content that belongs in a different artifact or section
|
|
25
|
+
|
|
26
|
+
## Two Processes
|
|
27
|
+
|
|
28
|
+
| Process | Scope | Type | Actor |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| **Build → Observe → Repeat** | The system | Continuous loop | Coordinator |
|
|
31
|
+
| **What → Why → How → Exec** | One intent | Finite lifecycle | Agent |
|
|
32
|
+
|
|
33
|
+
B→O→R is the Coordinator's heartbeat. W→W→H→E is what happens inside each intent.
|
|
34
|
+
The connection: an intent's `## Insights` feeds the Coordinator's Observe phase.
|
|
35
|
+
|
|
36
|
+
## Defaults-First
|
|
37
|
+
|
|
38
|
+
Plastic stands on its own. Skills and agents use Plastic's own defaults; an
|
|
39
|
+
external skill (for example `superpowers:*`) is opt-in, never load-bearing.
|
|
40
|
+
|
|
41
|
+
- **Default to Plastic, delegate by exception.** Name the Plastic-native path as
|
|
42
|
+
the default. Delegate to an external skill only when (a) it is available in the
|
|
43
|
+
harness, or (b) the user explicitly asks for it. A user without that plugin must
|
|
44
|
+
still get the core behavior.
|
|
45
|
+
- **Phrase external skills as enhancements.** Write "use Plastic's native X by
|
|
46
|
+
default; if `superpowers:<skill>` is available, or the user prefers it, delegate
|
|
47
|
+
to it" never "delegate to `superpowers:<skill>`" as the only path.
|
|
48
|
+
- **Optional dependencies detect then degrade.** `qmd` is the reference shape:
|
|
49
|
+
`scripts/lib/qmd_sync.rb` detects the binary first and every verb no-ops cleanly
|
|
50
|
+
when it is absent (see `scripts/qmd-sync`). Optional CLIs and MCP servers follow
|
|
51
|
+
the same detect-then-skip pattern, so a missing tool never crashes a session.
|
|
52
|
+
- **Legitimate hard dependencies are exempt.** Ruby, Node, git, and POSIX tools are
|
|
53
|
+
the cost of running Plastic, not silent coupling. The principle targets accidental
|
|
54
|
+
dependence on external skills doing work Plastic should do itself.
|
|
55
|
+
|
|
56
|
+
## Roadmaps
|
|
57
|
+
|
|
58
|
+
Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
|
|
59
|
+
is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
|
|
60
|
+
release (completion-side, tracked in `CHANGELOG.md`). Use `plastic-roadmap` to create, order,
|
|
61
|
+
close, and consume one.
|
|
62
|
+
|
|
63
|
+
File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
|
|
64
|
+
inside `store/` (store holds intent directories, not project artifacts). For a project that is its
|
|
65
|
+
root, `~/.plastic/projects/{slug}/roadmaps/`, beside `project.yml`; for the global tier it is
|
|
66
|
+
`~/.plastic/roadmaps/`, beside `~/.plastic/INDEX.md`. `roadmaps/` lists only live (open or
|
|
67
|
+
in-flight) roadmaps: once a roadmap's goal is reached, it moves to `roadmaps/archived/{slug}.md`,
|
|
68
|
+
a sibling subdirectory scaffolded once with a `.gitkeep`.
|
|
69
|
+
|
|
70
|
+
A roadmap file has four sections, in order: a title/meta header, `## Goal`, `## Waves`, and an
|
|
71
|
+
append-only dated `## Log`. `## Goal` is a checkable prose condition read by a human or agent, not
|
|
72
|
+
an executable checker. `## Waves` holds ordered waves; entries inside a wave are parallel-safe,
|
|
73
|
+
waves run sequentially, top to bottom.
|
|
74
|
+
|
|
75
|
+
Each wave entry carries a status token (`queued`/`delivering`/`delivered`/`abandoned`/`blocked`)
|
|
76
|
+
that mirrors that intent's status in `INDEX.md`. `INDEX.md` is the single writer of intent status;
|
|
77
|
+
on any conflict INDEX wins and the roadmap entry is corrected to match.
|
|
78
|
+
|
|
79
|
+
**Human-comprehension surface.** A roadmap is also written to be read cold. Wave entries render as
|
|
80
|
+
checkboxes (checked once delivered, unchecked otherwise) next to the status token, and each `## Log`
|
|
81
|
+
line is one plain-language sentence, starting `YYYY-MM-DD HH:MM UTC`, written the way an
|
|
82
|
+
engineering manager would brief a non-expert executive: what shipped and why it matters, no jargon
|
|
83
|
+
or codenames, ending with a link
|
|
84
|
+
to that intent's `outcome.md`. The log points at the detail instead of repeating it, so a person
|
|
85
|
+
opening the file with no other context can tell what shipped, what is running now, and what is
|
|
86
|
+
next in under a minute.
|
|
87
|
+
|
|
88
|
+
**Relationship to loop engineering (intent 69).** A roadmap is the planning half of the work; the
|
|
89
|
+
loop is its runtime. Waves lay out the parallelism plan: what can run together, and in what order.
|
|
90
|
+
Loop engineering (intent 69, not yet delivered) is expected to consume that plan and supply the
|
|
91
|
+
running parts, the heartbeat, how many dispatches run at once, checking the goal, and resuming
|
|
92
|
+
after a stop. This section only states the relationship and points to intent 69 as the future
|
|
93
|
+
consumer; it does not change intent 69's own design.
|
|
94
|
+
|
|
95
|
+
## Context-economy measurement buckets (84a)
|
|
96
|
+
|
|
97
|
+
Intent 84 defines three buckets for sibling 84a to audit against; 84 does not run the audit.
|
|
98
|
+
|
|
99
|
+
- (a) gate-hook prose tokens: the per-transition narration emitted by the gate hook.
|
|
100
|
+
- (b) main-loop store-read tokens: tokens the main agent spends reading or grepping the store
|
|
101
|
+
in the transcript.
|
|
102
|
+
- (c) authored-section sizes: sizes of authored artifacts (INDEX entries and the like).
|
|
103
|
+
|
|
104
|
+
## Deprecation Process
|
|
105
|
+
|
|
106
|
+
Deprecations live in `deprecations.yml` and are shown at SessionStart. While Plastic is
|
|
107
|
+
pre-1.0, a satisfied deprecation (its migration is already done on installed machines) may be
|
|
108
|
+
removed immediately instead of waiting for its declared `removal` version. From `1.0.0` on,
|
|
109
|
+
the steady-state grace rule applies (removal at least two minors ahead). For the full process,
|
|
110
|
+
severity levels, and the pre-1.0 exception, see the `plastic-releasing` skill.
|
|
111
|
+
|
|
112
|
+
## Skills Reference
|
|
113
|
+
|
|
114
|
+
Detailed conventions live inside the skills that use them, not in this file.
|
|
115
|
+
|
|
116
|
+
| Topic | Skill | References in skill |
|
|
117
|
+
|-------|-------|-------------------|
|
|
118
|
+
| Creating intents, lifecycle | `plastic-creating-intent` | lifecycle, wikilinks |
|
|
119
|
+
| Brainstorming, spec writing | `plastic-brainstorming` | — |
|
|
120
|
+
| Planning, actions | `plastic-writing-plans` | — |
|
|
121
|
+
| Execution, delivery | `plastic-executing-plan` | — |
|
|
122
|
+
| Autonomous delivery | `plastic-auto` | agent architecture |
|
|
123
|
+
| Save/restore state | `plastic-savepoint`, `plastic-continuing` | context management |
|
|
124
|
+
| Knowledge graph, linking | `plastic-linking-intents` | zettelkasten, wikilinks |
|
|
125
|
+
| Projects, hubs | `plastic-creating-project` | hubs, project stores |
|
|
126
|
+
| Provision a project store | `plastic-add-project-store` | project stores |
|
|
127
|
+
| Index maintenance | `plastic-managing-index` | — |
|
|
128
|
+
| Releases, deprecations | `plastic-releasing` | deprecation process |
|
|
129
|
+
| Health diagnostics | `plastic-doctor` | three scopes: `--core` (binary install-integrity check, runs on SessionStart), `--store [global\|<slug>]` (per-store check, runs on dashboard load), no flag = full check (runs after every update); gate enforcement, stuck detection |
|
|
130
|
+
| Authoring skills, agents, hooks | `plastic-creating-skills` | progressive disclosure, agentskills.io spec |
|
|
131
|
+
| Evaluating skills, evals | `plastic-evaluating-skills` | eval methodology, convention checks |
|
|
132
|
+
| Create, order, and consume a roadmap of intents | `plastic-roadmap` | file format, operations |
|
|
133
|
+
|
package/PLASTIC.md
CHANGED
|
@@ -1,31 +1,33 @@
|
|
|
1
|
-
# Plastic
|
|
1
|
+
# Plastic: Conventions
|
|
2
2
|
|
|
3
3
|
> **This file is maintained by Plastic.** It will be overwritten when the
|
|
4
|
-
> plugin is updated. Do not modify
|
|
4
|
+
> plugin is updated. Do not modify it: your changes will be lost.
|
|
5
5
|
> For project-specific rules, use `AGENTS.md` instead.
|
|
6
6
|
|
|
7
|
+
See `PLASTIC-reference.md` for reference material: read it on demand, it is not injected at session start.
|
|
8
|
+
|
|
7
9
|
## What is an Intent
|
|
8
10
|
|
|
9
11
|
A directory in the store containing `{ID}--{slug}.md` and optional supporting files.
|
|
10
|
-
It represents a desire
|
|
12
|
+
It represents a desire: something a human or agent wants to accomplish, explore, or understand.
|
|
11
13
|
|
|
12
14
|
```
|
|
13
15
|
store/
|
|
14
16
|
ID--three-to-five-words/
|
|
15
|
-
{ID}--{slug}.md # required
|
|
16
|
-
spec.md # optional
|
|
17
|
-
plan.md # optional
|
|
18
|
-
checklist.md # optional
|
|
19
|
-
outcome.md # optional
|
|
20
|
-
actions/ # optional
|
|
21
|
-
resources/ # optional
|
|
22
|
-
savepoint.md # optional
|
|
17
|
+
{ID}--{slug}.md # required - the intent itself
|
|
18
|
+
spec.md # optional - specification (Why deliverable)
|
|
19
|
+
plan.md # optional - implementation plan (How deliverable)
|
|
20
|
+
checklist.md # optional - execution registry (How deliverable)
|
|
21
|
+
outcome.md # optional - detailed result (Exec deliverable)
|
|
22
|
+
actions/ # optional - individual work items
|
|
23
|
+
resources/ # optional - research, references, screenshots, diagrams
|
|
24
|
+
savepoint.md # optional - deterministic cycle-step ledger (auto-written)
|
|
23
25
|
revisions.md # optional - append-only structural-maintenance audit trail
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
Lifecycle files (`spec.md`, `plan.md`, `checklist.md`, `outcome.md`) have defined
|
|
27
|
-
roles. Supporting artifacts that aren't lifecycle deliverables
|
|
28
|
-
reference docs, external API snapshots, screenshots, diagrams
|
|
29
|
+
roles. Supporting artifacts that aren't lifecycle deliverables (research reports,
|
|
30
|
+
reference docs, external API snapshots, screenshots, diagrams) go in `resources/`.
|
|
29
31
|
Name files inside as `{type}--{description}.md` (e.g., `deep-research--gsd-core.md`).
|
|
30
32
|
|
|
31
33
|
`revisions.md` is an optional, append-only structural-maintenance audit trail. It is not a
|
|
@@ -36,25 +38,6 @@ inside `revisions.md` (newest entry at the bottom, one entry per relocated item)
|
|
|
36
38
|
lost and the delivered meaning is never altered. Changing what an intent delivered is a new intent,
|
|
37
39
|
not a revision.
|
|
38
40
|
|
|
39
|
-
### Structural maintenance and revisions.md
|
|
40
|
-
|
|
41
|
-
When a delivered intent accumulates structural junk (an unsanctioned section, a stray file, a
|
|
42
|
-
frontmatter edge to an intent that no longer exists), the intent-curator relocates it into
|
|
43
|
-
`revisions.md` instead of reopening the work. Each entry is a versioned, dated header
|
|
44
|
-
(`## Revision vN - YYYY-MM-DD-HH:MM`) plus `Why` (one sentence naming the broken rule, ending
|
|
45
|
-
with `[rule: <tag>]`), `Prior location`, and either `Content held` (the verbatim removed
|
|
46
|
-
content) or, for a frontmatter edit, a one-line `Change` (before and after). A stray file has
|
|
47
|
-
its full content embedded and the original is deleted.
|
|
48
|
-
|
|
49
|
-
Violation tags (starter set, free-text tags allowed):
|
|
50
|
-
- `unsanctioned-section`: a top-level section the sanctioned-section rule now rejects
|
|
51
|
-
- `phantom-section`: a section referenced but not present or not sanctioned
|
|
52
|
-
- `stray-file`: a file that does not belong in the intent directory
|
|
53
|
-
- `dangling-ref`: a link or reference to something that no longer exists
|
|
54
|
-
- `broken-chain`: a chain frontmatter edge to an intent that no longer exists
|
|
55
|
-
- `broken-source`: a sources frontmatter edge to an intent that no longer exists
|
|
56
|
-
- `misplaced-content`: content that belongs in a different artifact or section
|
|
57
|
-
|
|
58
41
|
## Frontmatter
|
|
59
42
|
|
|
60
43
|
Identity and knowledge graph only. Nothing operational.
|
|
@@ -106,16 +89,6 @@ tags: [plastic, architecture]
|
|
|
106
89
|
- IDs use Luhmann's alternating convention: `1` → `1a` → `1a1` → `1a1a`
|
|
107
90
|
- Multiple branches increment: `1a`, `1b`, `1c`
|
|
108
91
|
|
|
109
|
-
## Two Processes
|
|
110
|
-
|
|
111
|
-
| Process | Scope | Type | Actor |
|
|
112
|
-
|---|---|---|---|
|
|
113
|
-
| **Build → Observe → Repeat** | The system | Continuous loop | Coordinator |
|
|
114
|
-
| **What → Why → How → Exec** | One intent | Finite lifecycle | Agent |
|
|
115
|
-
|
|
116
|
-
B→O→R is the Coordinator's heartbeat. W→W→H→E is what happens inside each intent.
|
|
117
|
-
The connection: an intent's `## Insights` feeds the Coordinator's Observe phase.
|
|
118
|
-
|
|
119
92
|
## Lifecycle Stages
|
|
120
93
|
|
|
121
94
|
| Stage | Section | Deliverable | Detail |
|
|
@@ -222,7 +195,7 @@ the intent directory ONLY. It never writes the intent file, `spec.md`, or any ot
|
|
|
222
195
|
deliverable; the Why-stage `plastic-brainstorming` agent reads its deposit and enriches
|
|
223
196
|
`## Context`.
|
|
224
197
|
|
|
225
|
-
`savepoint.md
|
|
198
|
+
`savepoint.md`: a deterministic, append-only ledger of cycle-step milestones (one line per
|
|
226
199
|
lifecycle boundary, newest at the bottom), written automatically by the gate hook. It is
|
|
227
200
|
sugar on top of the conventions, not a source of truth: state is always derivable from
|
|
228
201
|
files-on-disk, and the ledger is rebuildable. It exists so a resuming agent reads the cycle's
|
|
@@ -234,7 +207,7 @@ succession at a glance (last line = where we are).
|
|
|
234
207
|
`docs/specs/`, `researches/`, or similar. All meta-artifacts go in
|
|
235
208
|
`~/.plastic/store/ID--slug/` or the project store equivalent.
|
|
236
209
|
- **Code goes in the project. Everything else goes in the intent.**
|
|
237
|
-
Plans, specs, checklists, savepoints
|
|
210
|
+
Plans, specs, checklists, savepoints: all in the intent directory.
|
|
238
211
|
- **The global store is never pushed.** `~/.plastic/` is git-tracked locally
|
|
239
212
|
but contains sensitive data. Never push to a remote.
|
|
240
213
|
- **Agent-created repos are private by default.** Use `gh repo create --private`.
|
|
@@ -247,26 +220,6 @@ succession at a glance (last line = where we are).
|
|
|
247
220
|
brainstorming, writing-plans, etc., Plastic's directory rules override
|
|
248
221
|
their default output paths.
|
|
249
222
|
|
|
250
|
-
## Defaults-First
|
|
251
|
-
|
|
252
|
-
Plastic stands on its own. Skills and agents use Plastic's own defaults; an
|
|
253
|
-
external skill (for example `superpowers:*`) is opt-in, never load-bearing.
|
|
254
|
-
|
|
255
|
-
- **Default to Plastic, delegate by exception.** Name the Plastic-native path as
|
|
256
|
-
the default. Delegate to an external skill only when (a) it is available in the
|
|
257
|
-
harness, or (b) the user explicitly asks for it. A user without that plugin must
|
|
258
|
-
still get the core behavior.
|
|
259
|
-
- **Phrase external skills as enhancements.** Write "use Plastic's native X by
|
|
260
|
-
default; if `superpowers:<skill>` is available, or the user prefers it, delegate
|
|
261
|
-
to it" never "delegate to `superpowers:<skill>`" as the only path.
|
|
262
|
-
- **Optional dependencies detect then degrade.** `qmd` is the reference shape:
|
|
263
|
-
`scripts/lib/qmd_sync.rb` detects the binary first and every verb no-ops cleanly
|
|
264
|
-
when it is absent (see `scripts/qmd-sync`). Optional CLIs and MCP servers follow
|
|
265
|
-
the same detect-then-skip pattern, so a missing tool never crashes a session.
|
|
266
|
-
- **Legitimate hard dependencies are exempt.** Ruby, Node, git, and POSIX tools are
|
|
267
|
-
the cost of running Plastic, not silent coupling. The principle targets accidental
|
|
268
|
-
dependence on external skills doing work Plastic should do itself.
|
|
269
|
-
|
|
270
223
|
## State System
|
|
271
224
|
|
|
272
225
|
```
|
|
@@ -300,10 +253,10 @@ Format: `ID--three-to-five-words` (all stores).
|
|
|
300
253
|
- Intent file matches directory: `1a1--slug/1a1--slug.md`
|
|
301
254
|
- Next ID: `"${CLAUDE_PLUGIN_ROOT}/scripts/folgezettel-id" <parent_id> <store_path>`
|
|
302
255
|
|
|
303
|
-
**Branch vs root
|
|
256
|
+
**Branch vs root: the semantic decision.** The numbering is mechanics; choosing
|
|
304
257
|
*whether* to branch is meaning:
|
|
305
258
|
|
|
306
|
-
- **Branch (`14a`, `14b`)
|
|
259
|
+
- **Branch (`14a`, `14b`):** a sub-task, refinement, or direct continuation of the
|
|
307
260
|
parent. It cannot stand on its own; it only makes sense as part of the parent's work.
|
|
308
261
|
- **Root (`15`, `16`)**: an independent thought, even if inspired by another intent.
|
|
309
262
|
Reserve `sources` for true created-from provenance (intents this was built out of). An
|
|
@@ -324,45 +277,6 @@ One-line entry convention. Each index entry is ONE line: `- [<id> <terse title>]
|
|
|
324
277
|
The title is the title, not a summary: aim for about 80 characters, no multi-sentence
|
|
325
278
|
descriptions. This is a self-check, not a gate.
|
|
326
279
|
|
|
327
|
-
## Roadmaps
|
|
328
|
-
|
|
329
|
-
Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
|
|
330
|
-
is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
|
|
331
|
-
release (completion-side, tracked in `CHANGELOG.md`). Use `plastic-roadmap` to create, order,
|
|
332
|
-
close, and consume one.
|
|
333
|
-
|
|
334
|
-
File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
|
|
335
|
-
inside `store/` (store holds intent directories, not project artifacts). For a project that is its
|
|
336
|
-
root, `~/.plastic/projects/{slug}/roadmaps/`, beside `project.yml`; for the global tier it is
|
|
337
|
-
`~/.plastic/roadmaps/`, beside `~/.plastic/INDEX.md`. `roadmaps/` lists only live (open or
|
|
338
|
-
in-flight) roadmaps: once a roadmap's goal is reached, it moves to `roadmaps/archived/{slug}.md`,
|
|
339
|
-
a sibling subdirectory scaffolded once with a `.gitkeep`.
|
|
340
|
-
|
|
341
|
-
A roadmap file has four sections, in order: a title/meta header, `## Goal`, `## Waves`, and an
|
|
342
|
-
append-only dated `## Log`. `## Goal` is a checkable prose condition read by a human or agent, not
|
|
343
|
-
an executable checker. `## Waves` holds ordered waves; entries inside a wave are parallel-safe,
|
|
344
|
-
waves run sequentially, top to bottom.
|
|
345
|
-
|
|
346
|
-
Each wave entry carries a status token (`queued`/`delivering`/`delivered`/`abandoned`/`blocked`)
|
|
347
|
-
that mirrors that intent's status in `INDEX.md`. `INDEX.md` is the single writer of intent status;
|
|
348
|
-
on any conflict INDEX wins and the roadmap entry is corrected to match.
|
|
349
|
-
|
|
350
|
-
**Human-comprehension surface.** A roadmap is also written to be read cold. Wave entries render as
|
|
351
|
-
checkboxes (checked once delivered, unchecked otherwise) next to the status token, and each `## Log`
|
|
352
|
-
line is one plain-language sentence, starting `YYYY-MM-DD HH:MM UTC`, written the way an
|
|
353
|
-
engineering manager would brief a non-expert executive: what shipped and why it matters, no jargon
|
|
354
|
-
or codenames, ending with a link
|
|
355
|
-
to that intent's `outcome.md`. The log points at the detail instead of repeating it, so a person
|
|
356
|
-
opening the file with no other context can tell what shipped, what is running now, and what is
|
|
357
|
-
next in under a minute.
|
|
358
|
-
|
|
359
|
-
**Relationship to loop engineering (intent 69).** A roadmap is the planning half of the work; the
|
|
360
|
-
loop is its runtime. Waves lay out the parallelism plan: what can run together, and in what order.
|
|
361
|
-
Loop engineering (intent 69, not yet delivered) is expected to consume that plan and supply the
|
|
362
|
-
running parts, the heartbeat, how many dispatches run at once, checking the goal, and resuming
|
|
363
|
-
after a stop. This section only states the relationship and points to intent 69 as the future
|
|
364
|
-
consumer; it does not change intent 69's own design.
|
|
365
|
-
|
|
366
280
|
## Rules for Skills
|
|
367
281
|
|
|
368
282
|
ALL work flows through intents.
|
|
@@ -404,25 +318,16 @@ one recommendation line per present tool. The legacy trailing `# qmd-ok` token i
|
|
|
404
318
|
accepted on Bash commands and simply silences the hint. Scope stays the agent's own tool
|
|
405
319
|
calls; Ruby `File.read` inside a script is invisible to the hook by design.
|
|
406
320
|
|
|
407
|
-
## Context-economy measurement buckets (84a)
|
|
408
|
-
|
|
409
|
-
Intent 84 defines three buckets for sibling 84a to audit against; 84 does not run the audit.
|
|
410
|
-
|
|
411
|
-
- (a) gate-hook prose tokens: the per-transition narration emitted by the gate hook.
|
|
412
|
-
- (b) main-loop store-read tokens: tokens the main agent spends reading or grepping the store
|
|
413
|
-
in the transcript.
|
|
414
|
-
- (c) authored-section sizes: sizes of authored artifacts (INDEX entries and the like).
|
|
415
|
-
|
|
416
321
|
## Transition Gates
|
|
417
322
|
|
|
418
323
|
| Transition | Trigger | Gate |
|
|
419
324
|
|---|---|---|
|
|
420
|
-
| What → Why | `spec.md` written |
|
|
325
|
+
| What → Why | `spec.md` written | (none) |
|
|
421
326
|
| Why → How | `plan.md` + `actions/` + `checklist.md` | `spec.md` must exist |
|
|
422
327
|
| How → Exec | Checklist has items | Plan triplet must exist |
|
|
423
328
|
| Exec → Done | `outcome.md` written | All checklist items checked |
|
|
424
329
|
|
|
425
|
-
Hard blocking
|
|
330
|
+
Hard blocking: hooks exit code 2 on gate failure.
|
|
426
331
|
|
|
427
332
|
## Delivery Isolation and the Single-Owner Lock
|
|
428
333
|
|
|
@@ -547,32 +452,3 @@ liveness surface, the lock-issue message, orchestrator auto-repair, and the fail
|
|
|
547
452
|
behavior itself. Intent 112 owns the maintenance lock and the immutability gate (it inherits
|
|
548
453
|
fail-open from 111). Intent 4a1b1 owns deep agent stuck-detection and is not superseded.
|
|
549
454
|
|
|
550
|
-
## Deprecation Process
|
|
551
|
-
|
|
552
|
-
Deprecations live in `deprecations.yml` and are shown at SessionStart. While Plastic is
|
|
553
|
-
pre-1.0, a satisfied deprecation (its migration is already done on installed machines) may be
|
|
554
|
-
removed immediately instead of waiting for its declared `removal` version. From `1.0.0` on,
|
|
555
|
-
the steady-state grace rule applies (removal at least two minors ahead). For the full process,
|
|
556
|
-
severity levels, and the pre-1.0 exception, see the `plastic-releasing` skill.
|
|
557
|
-
|
|
558
|
-
## Skills Reference
|
|
559
|
-
|
|
560
|
-
Detailed conventions live inside the skills that use them, not in this file.
|
|
561
|
-
|
|
562
|
-
| Topic | Skill | References in skill |
|
|
563
|
-
|-------|-------|-------------------|
|
|
564
|
-
| Creating intents, lifecycle | `plastic-creating-intent` | lifecycle, wikilinks |
|
|
565
|
-
| Brainstorming, spec writing | `plastic-brainstorming` | — |
|
|
566
|
-
| Planning, actions | `plastic-writing-plans` | — |
|
|
567
|
-
| Execution, delivery | `plastic-executing-plan` | — |
|
|
568
|
-
| Autonomous delivery | `plastic-auto` | agent architecture |
|
|
569
|
-
| Save/restore state | `plastic-savepoint`, `plastic-continuing` | context management |
|
|
570
|
-
| Knowledge graph, linking | `plastic-linking-intents` | zettelkasten, wikilinks |
|
|
571
|
-
| Projects, hubs | `plastic-creating-project` | hubs, project stores |
|
|
572
|
-
| Provision a project store | `plastic-add-project-store` | project stores |
|
|
573
|
-
| Index maintenance | `plastic-managing-index` | — |
|
|
574
|
-
| Releases, deprecations | `plastic-releasing` | deprecation process |
|
|
575
|
-
| Health diagnostics | `plastic-doctor` | three scopes: `--core` (binary install-integrity check, runs on SessionStart), `--store [global\|<slug>]` (per-store check, runs on dashboard load), no flag = full check (runs after every update); gate enforcement, stuck detection |
|
|
576
|
-
| Authoring skills, agents, hooks | `plastic-creating-skills` | progressive disclosure, agentskills.io spec |
|
|
577
|
-
| Evaluating skills, evals | `plastic-evaluating-skills` | eval methodology, convention checks |
|
|
578
|
-
| Create, order, and consume a roadmap of intents | `plastic-roadmap` | file format, operations |
|
package/README.md
CHANGED
|
@@ -1,95 +1,110 @@
|
|
|
1
1
|
# Plastic
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
**Where you were, where you are, where you are heading.**
|
|
4
|
+
|
|
5
|
+
The everyday problem: losing the thread of your own work. You step away for a
|
|
6
|
+
day and come back to find the reasoning behind a decision is gone. A session
|
|
7
|
+
ends and the next one starts from nothing. Plastic keeps a durable, growing
|
|
8
|
+
record of your work as you do it, so that thread never breaks.
|
|
9
|
+
|
|
10
|
+
## Why Plastic
|
|
11
|
+
|
|
12
|
+
You do not write documentation about your work after the fact. You do the
|
|
13
|
+
work as an intent (a short file that states what you want, why, how you plan
|
|
14
|
+
to get there, and what happened). Because intents stay after you finish them,
|
|
15
|
+
and because they link to the intents that shaped them and the ones they led
|
|
16
|
+
to, they build into a queryable trace of your project over time. You can ask
|
|
17
|
+
what happened, why a choice was made, or where an idea came from, and get an
|
|
18
|
+
answer grounded in your own history. Memory is the result of working this
|
|
19
|
+
way, not a feature bolted onto an agent afterward.
|
|
20
|
+
|
|
21
|
+
## Two founding systems
|
|
22
|
+
|
|
23
|
+
**System for the Brain.** Plastic is built on the Zettelkasten method: small,
|
|
24
|
+
linked notes that add up to more than their sum. The name borrows from
|
|
25
|
+
neuroplasticity, the brain's own way of adapting and rewiring itself. An
|
|
26
|
+
intent is one such note. Its `sources` and `chain` links connect it to the
|
|
27
|
+
intents that shaped it and the ones it led to, so the store grows into a
|
|
28
|
+
graph you can actually navigate, not a pile of files.
|
|
29
|
+
|
|
30
|
+
**System for the Work.** Plastic separates the deterministic part of work
|
|
31
|
+
from the creative part. The blueprint (conventions, templates, directory
|
|
32
|
+
layout, and the lifecycle stages) is fixed: it comes out the same shape no
|
|
33
|
+
matter who or what is doing the work. The thinking (the actual reasoning
|
|
34
|
+
about what to build and how) stays free: a human or an agent does it, and
|
|
35
|
+
Plastic never replaces that judgment, only steers and checks it. This is
|
|
36
|
+
convention over configuration: one readable shape for every intent, so any
|
|
37
|
+
person or agent can pick up where another left off.
|
|
12
38
|
|
|
13
39
|
## The Two Cycles
|
|
14
40
|
|
|
15
|
-
**Coordinator loop (B→O→R):**
|
|
16
|
-
|
|
17
|
-
This loop runs continuously across sessions.
|
|
41
|
+
**Coordinator loop (B→O→R):** Build → Observe → Repeat. The agent advances
|
|
42
|
+
the active intent, observes what the work surfaced, and repeats with the
|
|
43
|
+
next one. This loop runs continuously, across sessions.
|
|
18
44
|
|
|
19
|
-
**Intent lifecycle (W→W→H→E):**
|
|
20
|
-
from
|
|
45
|
+
**Intent lifecycle (W→W→H→E):** What → Why → How → Exec. Each intent moves
|
|
46
|
+
from capture through justification and planning to delivery. Intents produce
|
|
21
47
|
artifacts: `spec.md`, `plan.md`, `checklist.md`, `outcome.md`.
|
|
22
48
|
|
|
23
|
-
## How Plastic
|
|
24
|
-
|
|
25
|
-
Plastic is a
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
correctly-shaped intent, the determinism is in the form, not the agent.
|
|
40
|
-
|
|
41
|
-
**Deterministic by design, free by intent.** The rigid part is rigid on purpose. It is
|
|
42
|
-
what makes work portable, reviewable, and resumable across any agent. The free part is
|
|
43
|
-
free on purpose. It is where the brain's creativity lives. Plastic draws the line between
|
|
44
|
-
the two and holds it.
|
|
45
|
-
|
|
46
|
-
**Harnesses are how it holds the line.** Shared harnesses (conventions, templates, and
|
|
47
|
-
directory structure) constrain humans and agents alike. Agent-extra harnesses (evals that
|
|
48
|
-
check a skill's output, plus hooks and instructions that steer reasoning) give an agent
|
|
49
|
-
the instincts a careful person already has: stop and save state, leave a note when the
|
|
50
|
-
context runs out, never plan before specifying.
|
|
51
|
-
|
|
52
|
-
This is **intent-driven delivery**, a new shape for the software lifecycle in the age of
|
|
53
|
-
agentic engineering. The unit of work is an *intent*, not a ticket, and every intent
|
|
54
|
-
carries its own spec, plan, checklist, and outcome as it moves through Why, What, How, and
|
|
55
|
-
Execute. What you get is agent-agnostic, auditable, and additive: a knowledge graph of
|
|
56
|
-
*why* things were built, not just what.
|
|
49
|
+
## How Plastic differs
|
|
50
|
+
|
|
51
|
+
Plastic is not a memory service. Tools like mem0 give an agent a vector
|
|
52
|
+
database to store and recall facts through an API; the memory lives in that
|
|
53
|
+
service, apart from your project. Plastic instead keeps intents as plain,
|
|
54
|
+
git-tracked Markdown files, moved through an enforced lifecycle (What, Why,
|
|
55
|
+
How, Exec) that a person can read without any tooling. The result reads like
|
|
56
|
+
the Zettelkasten linking model long used for personal notes, applied to
|
|
57
|
+
software delivery.
|
|
58
|
+
|
|
59
|
+
Projects like beads add persistent memory on top of an existing agent
|
|
60
|
+
workflow. Plastic shares that goal, an agent should remember what it did and
|
|
61
|
+
why, but gets there by making the intent itself, with its spec, plan, and
|
|
62
|
+
delivered outcome, the actual unit of work. Plastic runs today with Claude
|
|
63
|
+
Code, and works with Cursor and Cline through the same file-based
|
|
64
|
+
conventions.
|
|
57
65
|
|
|
58
66
|
## Install
|
|
59
67
|
|
|
60
|
-
Plastic requires Ruby (pre-installed on macOS
|
|
68
|
+
Plastic requires Ruby (pre-installed on macOS and Linux) and Node.js 18 or
|
|
69
|
+
later.
|
|
61
70
|
|
|
62
|
-
|
|
63
|
-
# Alpha (current, active development)
|
|
64
|
-
npx @zalom/plastic@alpha --claude
|
|
71
|
+
Plastic is in beta. Install with:
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
```bash
|
|
67
74
|
npx @zalom/plastic@beta --claude
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Replace `--claude` with `--codex` for Codex CLI, `--hermes` for Hermes, or
|
|
78
|
+
`--all` for all supported agents.
|
|
68
79
|
|
|
80
|
+
A stable channel will follow later:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
69
83
|
# Stable (when available, general use)
|
|
70
84
|
npx @zalom/plastic --claude
|
|
71
85
|
```
|
|
72
86
|
|
|
73
|
-
|
|
74
|
-
|
|
87
|
+
The bare command above is not a working install yet. It currently resolves
|
|
88
|
+
to an early stub release, so use `@beta` for now.
|
|
75
89
|
|
|
76
|
-
Bun users can substitute `bunx` for `npx` (
|
|
77
|
-
Bun is never required.
|
|
90
|
+
Bun users can substitute `bunx` for `npx` (for example, `bunx
|
|
91
|
+
@zalom/plastic@beta --claude`). Bun is never required.
|
|
78
92
|
|
|
79
93
|
Skills install as flat, hyphen-namespaced personal skills (`plastic-doctor`,
|
|
80
|
-
`plastic-auto`, and so on). Invoke them with a hyphen. Plastic is **not** a
|
|
81
|
-
plugin; re-running the installer
|
|
94
|
+
`plastic-auto`, and so on). Invoke them with a hyphen. Plastic is **not** a
|
|
95
|
+
Claude Code plugin; re-running the installer automatically removes any
|
|
96
|
+
legacy plugin registration.
|
|
82
97
|
|
|
83
98
|
### Updating
|
|
84
99
|
|
|
85
100
|
From within your agent, say "update plastic" or run:
|
|
86
101
|
|
|
87
102
|
```bash
|
|
88
|
-
npx @zalom/plastic@
|
|
103
|
+
npx @zalom/plastic@beta --claude
|
|
89
104
|
```
|
|
90
105
|
|
|
91
|
-
The `plastic-update` command shows available versions across all channels
|
|
92
|
-
lets you choose which to install.
|
|
106
|
+
The `plastic-update` command shows available versions across all channels
|
|
107
|
+
and lets you choose which to install.
|
|
93
108
|
|
|
94
109
|
## Quick Start
|
|
95
110
|
|
|
@@ -101,7 +116,11 @@ After installation, run `/clear` to load Plastic conventions, then:
|
|
|
101
116
|
4. Use `/plastic-writing-plans` to create an implementation plan
|
|
102
117
|
5. Use `/plastic-executing-plan` to deliver it
|
|
103
118
|
|
|
104
|
-
|
|
119
|
+
Guided delivery (a human at every gate) is the default. Say "auto" if you
|
|
120
|
+
want the agent to run the full lifecycle on its own instead.
|
|
121
|
+
|
|
122
|
+
Run `/plastic-dashboard` any time for a Value x Effort view across every
|
|
123
|
+
intent and what to work on next.
|
|
105
124
|
|
|
106
125
|
## Agents
|
|
107
126
|
|
|
@@ -119,11 +138,15 @@ install time.
|
|
|
119
138
|
processes, the store layout, and the component map.
|
|
120
139
|
- [`docs/internals.md`](docs/internals.md): how Plastic stays deterministic, the
|
|
121
140
|
determinism breakdown, and the harness system.
|
|
141
|
+
- [`docs/guides/`](docs/guides/index.md): task-oriented guides, from your
|
|
142
|
+
first intent in 10 minutes to picking a delivery mode.
|
|
122
143
|
|
|
123
144
|
## Conventions
|
|
124
145
|
|
|
125
|
-
|
|
126
|
-
|
|
146
|
+
Plastic conventions live in `PLASTIC.md`, distributed to `~/.plastic/PLASTIC.md`
|
|
147
|
+
and overwritten on every update. Project-specific rules live in `AGENTS.md`,
|
|
148
|
+
scaffolded once at `~/.plastic/AGENTS.md`. Run `plastic-doctor` to check
|
|
149
|
+
installation health.
|
|
127
150
|
`plastic-doctor --core` runs a binary install-integrity check (compares files
|
|
128
151
|
against the install manifests; pass or error). `plastic-doctor --store` checks
|
|
129
152
|
store state (intents, INDEX sections, conventions) and can be scoped to
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-brainstorming
|
|
3
3
|
description: |
|
|
4
|
-
Use
|
|
5
|
-
|
|
6
|
-
<example>Context: An intent has a What but a thin Why.
|
|
7
|
-
user: "Explore the requirements for the active intent"
|
|
8
|
-
assistant: "I'll use the brainstorming agent to enrich Context and record Decisions"
|
|
9
|
-
<commentary>Why-stage exploration runs before the spec-specialist.</commentary></example>
|
|
4
|
+
Use for the Why-stage exploration of an active intent in auto mode: enrich the
|
|
5
|
+
intent's Context and record its Decisions before the spec is written.
|
|
10
6
|
model: opus
|
|
11
7
|
---
|
|
12
8
|
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-enforcer
|
|
3
3
|
description: |
|
|
4
|
-
Use
|
|
5
|
-
specialists, owns every gate, and runs the final review.
|
|
6
|
-
<example>Context: User triggers auto on an active intent.
|
|
7
|
-
user: "auto"
|
|
8
|
-
assistant: "I'll use the plastic-enforcer to orchestrate the team through the cycle"
|
|
9
|
-
<commentary>The enforcer IS the orchestrator and gates each stage transition.</commentary></example>
|
|
4
|
+
Use as the auto-mode orchestrator: it spins up the team, sequences the
|
|
5
|
+
specialists, owns every gate, and runs the final review.
|
|
10
6
|
model: opus
|
|
11
7
|
---
|
|
12
8
|
|
|
@@ -63,6 +59,15 @@ ceremony, never these guarantees.
|
|
|
63
59
|
4. Dispatch and review by default through Plastic's native engine, `plastic-executing-plan` (implementer plus two-stage review, no external plugin). If `superpowers:subagent-driven-development` and `superpowers:dispatching-parallel-agents` are available, or the user asks for them, delegate to them as an enhancement
|
|
64
60
|
5. At the final gate, dispatch an independent reviewer subagent, then complete the intent
|
|
65
61
|
|
|
62
|
+
## Human-facing stage reporting
|
|
63
|
+
|
|
64
|
+
At each gate, the orchestrator briefs the human in EM-to-CTO voice: impact first, the one risk
|
|
65
|
+
that matters, then the decision left to them. The shape and per-stage content live in
|
|
66
|
+
`skills/auto/references/human-report-contract.md`; follow it rather than improvising a report.
|
|
67
|
+
This is separate from the intent 74 report contract (`skills/auto/references/agent-report-contract.md`),
|
|
68
|
+
which is the internal, structured handoff a dispatched specialist sends back to the orchestrator.
|
|
69
|
+
The orchestrator consumes that internal report to write the human briefing; the two never merge.
|
|
70
|
+
|
|
66
71
|
## Constraints
|
|
67
72
|
|
|
68
73
|
- Enforce gates manually; do not rely on hooks, because the session id may be unset in headless or background runs
|