@zalom/plastic 1.0.0-beta.36 → 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/README.md +88 -65
- package/package.json +1 -1
- package/scripts/install.rb +2 -1
- package/skills/install/SKILL.md +1 -1
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
|
package/package.json
CHANGED
package/scripts/install.rb
CHANGED
|
@@ -129,7 +129,8 @@ class Install < InstallerCore
|
|
|
129
129
|
verb = mode == :reinstall ? "re-synced" : "installed"
|
|
130
130
|
puts "\n\u{2705} Plastic v#{version} #{verb}."
|
|
131
131
|
puts " Registered for: #{installed.map { |r| r[:agent] }.join(", ")}"
|
|
132
|
-
puts " Run /clear (or restart your agent) to pick up new conventions
|
|
132
|
+
puts " Run /clear (or restart your agent) to pick up new conventions."
|
|
133
|
+
puts " Next: read docs/guides/your-first-intent-in-10-minutes.md\n\n"
|
|
133
134
|
end
|
|
134
135
|
|
|
135
136
|
def show_help
|
package/skills/install/SKILL.md
CHANGED
|
@@ -158,7 +158,7 @@ Version: none -> <installed>
|
|
|
158
158
|
Doctor: <summary or "all clear">
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
-
Then: "
|
|
161
|
+
Then: "Read `docs/guides/your-first-intent-in-10-minutes.md` for your first intent, start to finish."
|
|
162
162
|
|
|
163
163
|
### Local Install (testing/legacy)
|
|
164
164
|
|