pluidr 0.7.5 → 0.7.6

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 CHANGED
@@ -4,225 +4,260 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dm/pluidr)](https://www.npmjs.com/package/pluidr)
5
5
  [![License](https://img.shields.io/npm/l/pluidr)](https://github.com/funara/pluidr/blob/main/LICENSE)
6
6
 
7
- ** Plan · Build · Review ** opinionated engineering workflow installer for [OpenCode](https://opencode.ai).
7
+ ** Plan - Build - Review ** -- opinionated engineering workflow installer for [OpenCode](https://opencode.ai).
8
+
9
+ ## TL;DR
10
+
11
+ Pluidr installs an opinionated, strict AI-agent workflow (Composer, Debugger, and Prober) with 14 specialized subagents into **OpenCode**. It enforces structured phases (Explore -> Plan -> Build), interactive guardrail gates, and test verification without ad-hoc delegation.
12
+
13
+ ## Quick Start
14
+
15
+ Get up and running in 3 simple steps:
16
+
17
+ 1. **Install globally:**
18
+ ```bash
19
+ npm install -g pluidr
20
+ ```
21
+
22
+ 2. **Initialize and configure agents:**
23
+ ```bash
24
+ pluidr init
25
+ ```
26
+ *(Select LLM models for reasoning, precision, and fast tiers when prompted)*
27
+
28
+ 3. **Launch OpenCode with Pluidr:**
29
+ ```bash
30
+ pluidr
31
+ ```
8
32
 
9
33
  ---
10
34
 
11
35
  ## What is Pluidr?
12
36
 
13
- Pluidr installs **3 primary agents + 14 subagents** into OpenCode each primary agent owns its exclusive subagents, scoped permissions, and enforced workflow rules. No shared subagents. No ad-hoc delegation.
37
+ Pluidr installs **3 primary agents + 14 subagents** into OpenCode -- each primary agent owns its exclusive subagents, scoped permissions, and enforced workflow rules. No shared subagents. No ad-hoc delegation.
14
38
 
15
39
  | Primary Agent | Purpose | Subagents |
16
40
  |---|---|---|
17
- | **Composer** | Feature work Explore Plan Build | Researcher, Plan-Writer, Plan-Checker, Coder, Tester, Reviewer, Compose-Reporter |
18
- | **Debugger** | Bug investigation Investigate Fix Report | Inspector, Fixer, Debug-Reporter |
19
- | **Prober** | Security audit Trace Patch Audit | Tracer, Patcher, Auditor, Probe-Reporter |
41
+ | **Composer** | Feature work -- Explore -> Plan -> Build | Researcher, Plan-Writer, Plan-Checker, Coder, Tester, Reviewer, Compose-Reporter |
42
+ | **Debugger** | Bug investigation -- Investigate -> Fix -> Report | Inspector, Fixer, Debug-Reporter |
43
+ | **Prober** | Security audit -- Trace -> Patch -> Audit | Tracer, Patcher, Auditor, Probe-Reporter |
44
+
45
+ ---
46
+
47
+ ### Parallel Subagent Swarming
48
+
49
+ To optimize wall-clock execution time, Pluidr's primary agents are empowered to **swarm multiple subagents concurrently** (e.g. running multiple researchers, inspectors, tracers, coders, fixers, patchers, testers, or auditors in parallel) for independent directories, files, or API endpoints. This enables non-linear workflow execution and leverages OpenCode's concurrent process engine.
20
50
 
21
51
  ---
22
52
 
23
53
  ## Agent Workflows
24
54
 
25
- ### 🎼 Composer Feature Work
55
+ ### Composer -- Feature Work
26
56
 
27
- Composer is the **single entry point for all feature work**. It runs 3 strict, one-directional phases. Phase direction is one-way no going back without explicit user instruction.
57
+ Composer is the **single entry point for all feature work**. It runs 3 strict, one-directional phases. Phase direction is one-way -- no going back without explicit user instruction.
28
58
 
29
59
  ```
30
60
  You describe a feature / idea
31
-
32
-
33
- ┌─────────────────────────────────────────┐
34
- EXPLORE PHASE (mandatory start)
35
-
36
- Delegate: Researcher
37
- deep codebase + web fact-finding
38
- confirmed-inferred facts / risks
39
-
40
- Composer internally assesses:
41
- Is this feature simple or complex?
42
- └──────────┬──────────────────────────────┘
43
-
44
- ┌────────┴───────────────┐
45
- Simple feature Complex feature
46
- ▼ ▼
61
+ |
62
+ v
63
+ +-----------------------------------------+
64
+ | EXPLORE PHASE (mandatory start) |
65
+ | |
66
+ | Delegate: Researcher |
67
+ | -> deep codebase + web fact-finding |
68
+ | -> confirmed-inferred facts / risks |
69
+ | |
70
+ | Composer internally assesses: |
71
+ | Is this feature simple or complex? |
72
+ +----------+------------------------------+
73
+ |
74
+ +--------+---------------+
75
+ | Simple feature | Complex feature
76
+ v v
47
77
  GUARDRAIL GATE 1a GUARDRAIL GATE 1b
48
78
  "Build directly?" "Write a PRD?"
49
-
50
- Yes Yes
51
-
52
- ┌──────────────────────────────┐
53
- PLAN PHASE
54
-
55
- Plan-Writer docs/plans/
56
- Plan-Checker validates PRD
57
- PASS/FAIL + gap list only
58
-
59
- FAIL surface gaps to you
60
- (max 5 loops)
61
-
62
- PASS GUARDRAIL GATE 2
63
- "Build from this PRD?"
64
- └─────────────┬────────────────┘
65
- Yes
66
- └──────────┬─────────────┘
67
-
68
- ┌────────────────────────────────────────────┐
69
- BUILD PHASE
70
-
71
- Coder implements from PRD / request
72
-
73
-
74
- Tester PASS/FAIL/BLOCKED
75
- FAIL back to Coder (max 5 loops)
76
- PASS
77
-
78
- Reviewer PASS/FAIL + gap list
79
- FAIL back to Coder (max 5 loops)
80
- PASS
81
-
82
- Compose-Reporter docs/reports/
83
- └────────────────────────────────────────────┘
84
-
85
-
79
+ | |
80
+ | Yes | Yes
81
+ | v
82
+ | +------------------------------+
83
+ | | PLAN PHASE |
84
+ | | |
85
+ | | Plan-Writer -> docs/plans/ |
86
+ | | Plan-Checker validates PRD |
87
+ | | PASS/FAIL + gap list only |
88
+ | | |
89
+ | | FAIL -> surface gaps to you |
90
+ | | (max 5 loops) |
91
+ | | |
92
+ | | PASS -> GUARDRAIL GATE 2 |
93
+ | | "Build from this PRD?" |
94
+ | +-------------+----------------+
95
+ | | Yes
96
+ +----------+-------------+
97
+ v
98
+ +--------------------------------------------+
99
+ | BUILD PHASE |
100
+ | |
101
+ | Coder -> implements from PRD / request |
102
+ | | |
103
+ | v |
104
+ | Tester -> PASS/FAIL/BLOCKED |
105
+ | | FAIL -> back to Coder (max 5 loops) |
106
+ | | PASS v |
107
+ | v |
108
+ | Reviewer -> PASS/FAIL + gap list |
109
+ | | FAIL -> back to Coder (max 5 loops) |
110
+ | | PASS v |
111
+ | v |
112
+ | Compose-Reporter -> docs/reports/ |
113
+ +--------------------------------------------+
114
+ |
115
+ v
86
116
  You review result
87
-
88
- Composer resets asks: New feature? Debug? Iterate?
117
+ |
118
+ Composer resets -> asks: New feature? Debug? Iterate?
89
119
  ```
90
120
 
91
121
  **Key rules:**
92
- - Composer has **no read/write/bash permissions** all work delegated to subagents
93
- - Phase transition only via guardrail gates no skipping
94
- - `Coder Coder` loops without Tester verification are forbidden
95
- - 5 consecutive FAILs from Tester or Reviewer surfaces to you
122
+ - Composer has **no read/write/bash permissions** -- all work delegated to subagents
123
+ - Phase transition only via guardrail gates -- no skipping
124
+ - `Coder -> Coder` loops without Tester verification are forbidden
125
+ - 5 consecutive FAILs from Tester or Reviewer -> surfaces to you
96
126
 
97
127
  ---
98
128
 
99
- ### 🐛 Debugger Bug Investigation
129
+ ### Debugger -- Bug Investigation
100
130
 
101
- Debugger is a **standalone primary agent** does not depend on Composer. Trigger it directly from the Debugger tab whenever you find a bug.
131
+ Debugger is a **standalone primary agent** -- does not depend on Composer. Trigger it directly from the Debugger tab whenever you find a bug.
102
132
 
103
133
  ```
104
134
  You report a bug / defect
105
-
106
-
107
- ┌─────────────────────────────────────────────┐
108
- │ INVESTIGATE PHASE │
109
- │ │
110
- │ Delegate: Inspector │
111
- │ Review mode (Debugger selects): │
112
- · PR Review → classify R1-R6 │
113
- │ · Architecture → dependency analysis │
114
- · Tech Debt → Pain × Spread score │
115
- · Test Quality → classify T1-T6 │
116
- │ │
117
- Output: Iron Law chain per finding │
118
- Symptom Source Consequence → Remedy │
119
- └──────────┬──────────────────────────────────┘
120
-
135
+ |
136
+ v
137
+ GUARDRAIL GATE 1 (question tool):
138
+ "Ready to investigate?"
139
+ | Yes
140
+ v
141
+ +---------------------------------------------+
142
+ | INVESTIGATE PHASE (Inspector subagent) |
143
+ | |
144
+ | Review mode (Debugger selects): |
145
+ | - PR Review -> classify R1-R6 |
146
+ | - Architecture -> dependency analysis |
147
+ | - Tech Debt -> Pain x Spread score |
148
+ | - Test Quality -> classify T1-T6 |
149
+ | |
150
+ | Output: Iron Law chain per finding |
151
+ | Symptom -> Source -> Consequence -> Remedy |
152
+ +----------+----------------------------------+
153
+ |
121
154
  Root cause identified?
122
- ┌────────┴────────┐
123
- Yes No / unknowns remain
124
-
125
- ┌─────────────┐ Halt surface to you
126
- │ FIX PHASE │ with specific questions
127
-
128
- │ Delegate: │
129
- │ Fixer │
130
- minimal
131
- │ fix per │
132
- │ Iron Law │
133
- └──────┬──────┘
134
-
135
-
136
- ┌──────────────────────────────────────┐
137
- REPORT PHASE │
138
- │ │
139
- Delegate: Debug-Reporter │
140
- │ → Iron Law diagnosis report │
141
- │ → saved to docs/reports/ │
142
- └──────────────────────────────────────┘
143
-
144
-
155
+ +--------+--------+
156
+ | Yes | No / unknowns remain
157
+ v v
158
+ GUARDRAIL GATE 2 (question tool):
159
+ "Ready to apply fix?"
160
+ | Yes Halt -- surface to you
161
+ v with specific questions
162
+ +-------------+
163
+ | FIX PHASE | (Fixer subagent)
164
+ +------+------+
165
+ |
166
+ v
167
+ +--------------------------------------+
168
+ | REPORT PHASE |
169
+ | |
170
+ | Delegate: Debug-Reporter |
171
+ | -> Iron Law diagnosis report |
172
+ | -> saved to docs/reports/ |
173
+ +--------------------------------------+
174
+ |
175
+ v
145
176
  You review the diagnosis + fix
146
-
147
- Debugger resets asks: New bug? Feature work? Re-investigate?
177
+ |
178
+ Debugger resets -> asks (question tool): Finished? Iterate?
148
179
  ```
149
180
 
150
181
  **Key rules:**
151
- - Debugger has **no read/write/bash permissions** all delegated to subagents
182
+ - Debugger has **no read/write/bash permissions** -- all delegated to subagents
183
+ - Executes only after Gate 1 (Investigation) and Gate 2 (Fix) user confirmations
152
184
  - Never delegates Fixer without Inspector confirming root cause first
153
- - If unknowns remain after investigation halts and prompts you, does not guess
185
+ - If unknowns remain after investigation -> halts and prompts you, does not guess
154
186
 
155
187
  ---
156
188
 
157
- ### 🔍 Prober Security Audit
189
+ ### Prober -- Security Audit
158
190
 
159
- Prober is a **standalone primary agent** does not depend on Composer or Debugger. Trigger it directly from the Prober tab to audit any codebase for security vulnerabilities and quality decay.
191
+ Prober is a **standalone primary agent** -- does not depend on Composer or Debugger. Trigger it directly from the Prober tab to audit any codebase for security vulnerabilities and quality decay.
160
192
 
161
193
  ```
162
194
  You trigger a security audit
163
-
164
-
165
- ┌───────────────────────────────────────────────────┐
166
- │ TRACE PHASE (mandatory start) │
167
- │ │
168
- │ Delegate: Tracer │
169
- │ → WSTG-guided breadth-first recon │
170
- trace data flows: input → path → sink │
171
-
172
- Output: │
173
- · Confirmed Vulnerabilities (OWASP category, │
174
- │ location, data flow) │
175
- · Suspected Vulnerabilities (manual verify) │
176
- · Quality & Decay Risks (e.g. hardcoded │
177
- secrets, missing input validation)
178
- └──────────┬────────────────────────────────────────┘
179
-
180
-
181
- GUARDRAIL GATE (question tool):
195
+ |
196
+ v
197
+ GUARDRAIL GATE 1 (question tool):
198
+ "Ready to start scan?"
199
+ | Yes
200
+ v
201
+ +---------------------------------------------------+
202
+ | TRACE PHASE (Tracer subagent) |
203
+ | |
204
+ | -> WSTG-guided breadth-first recon |
205
+ | -> trace data flows: input -> path -> sink |
206
+ | |
207
+ | Output: |
208
+ | - Confirmed Vulnerabilities (OWASP category, |
209
+ | location, data flow) |
210
+ | - Suspected Vulnerabilities (manual verify) |
211
+ | - Quality & Decay Risks (e.g. hardcoded |
212
+ | secrets, missing input validation) |
213
+ +----------+----------------------------------------+
214
+ |
215
+ v
216
+ GUARDRAIL GATE 2 (question tool):
182
217
  "Audit findings ready. How to proceed?"
183
- ├── "Patch all confirmed findings" PATCH PHASE
184
- ├── "Select specific findings" PATCH PHASE (you pick)
185
- ├── "Audit only no patches" AUDIT PHASE (skip PATCH)
186
- └── "Re-investigate attack surface" re-delegate Tracer
187
-
188
-
189
- ┌──────────────────────────────────────────────────┐
190
- PATCH PHASE (skipped if audit-only)
191
-
192
- Delegate: Patcher
193
- Ponytail mindset: smallest correct diff
194
- prefer deleting the cause over wrapping it
195
- escalates to you if patch > 10 lines
196
- └──────────┬───────────────────────────────────────┘
197
-
198
-
199
- ┌──────────────────────────────────────────────────┐
200
- AUDIT PHASE (max 5 loops)
201
-
202
- Delegate: Auditor
203
- verify patch resolved vulnerabilities
204
- security regression check
205
- Ponytail BLOAT analysis (over-engineering)
206
-
207
- PASS proceed to report
208
- FAIL re-delegate Patcher with Gap + BLOAT
209
- lists verbatim (max 5 loops, then you)
210
-
211
- Delegate: Probe-Reporter
212
- security audit report docs/reports/
213
- └──────────────────────────────────────────────────┘
214
-
215
-
216
- You review the audit report
217
-
218
- Prober resets asks: New audit? Feature work? Bug investigation?
218
+ +-- "Patch all confirmed findings" -> PATCH PHASE
219
+ +-- "Select specific findings" -> PATCH PHASE (you pick)
220
+ +-- "Audit only -- no patches" -> AUDIT PHASE (skip PATCH)
221
+ +-- "Re-investigate attack surface" -> re-delegate Tracer
222
+ |
223
+ v
224
+ +--------------------------------------------------+
225
+ | PATCH PHASE (skipped if audit-only) |
226
+ | |
227
+ | Delegate: Patcher |
228
+ | -> Ponytail mindset: smallest correct diff |
229
+ | -> prefer deleting the cause over wrapping it |
230
+ | -> escalates to you if patch > 10 lines |
231
+ +----------+---------------------------------------+
232
+ |
233
+ v
234
+ +--------------------------------------------------+
235
+ | AUDIT PHASE (max 5 loops) |
236
+ | |
237
+ | Delegate: Auditor |
238
+ | -> verify patch resolved vulnerabilities |
239
+ | -> security regression check |
240
+ | | (Auditor subagent) |
241
+ | |
242
+ | PASS -> proceed to report |
243
+ | FAIL -> re-delegate Patcher with Gap + BLOAT |
244
+ | lists verbatim (max 5 loops, then you) |
245
+ | |
246
+ | Delegate: Probe-Reporter |
247
+ | -> security audit report -> docs/reports/ |
248
+ +--------------------------------------------------+
249
+ |
250
+ v
251
+ You review the audit report
252
+ |
253
+ Prober resets -> asks (question tool): Finished? Iterate?
219
254
  ```
220
255
 
221
256
  **Key rules:**
222
- - Prober has **no read/write/bash permissions** all delegated to subagents
223
- - TRACE phase is always mandatory no patching without recon first
224
- - GUARDRAIL GATE required before any patches are applied
225
- - 5 consecutive AUDIT FAILs surfaces to you
257
+ - Prober has **no read/write/bash permissions** -- all delegated to subagents
258
+ - Never starts scanning/tracing without Gate 1 user confirmation
259
+ - Never patches without a GUARDRAIL GATE 2 user confirmation after TRACE
260
+ - 5 consecutive AUDIT FAILs -> surfaces to you
226
261
 
227
262
  ---
228
263
 
@@ -232,20 +267,20 @@ Each subagent belongs to exactly one primary agent and cannot be invoked by anyo
232
267
 
233
268
  | Primary | Phase | Subagent | Model Tier | Role |
234
269
  |---------|-------|----------|------------|------|
235
- | Composer | EXPLORE | Researcher | 🧠 Reasoning | Fact-finding: confirmed_facts / inferred_facts / unknowns / risks |
236
- | Composer | PLAN | Plan-Writer | Fast | **Formatter** writes PRD to `docs/plans/`, missing input = TBD |
237
- | Composer | PLAN | Plan-Checker | 🧠 Reasoning | **Gate** PASS/FAIL + gap list only, no suggestions |
238
- | Composer | BUILD | Coder | Fast | Implements code from PRD |
239
- | Composer | BUILD | Tester | 🎯 Precision | PASS/FAIL/BLOCKED + coverage gaps only |
240
- | Composer | BUILD | Reviewer | 🎯 Precision | **Gate** PASS/FAIL + gap list only, no suggestions |
241
- | Composer | BUILD | Compose-Reporter | Fast | **Formatter** completion report to `docs/reports/` |
242
- | Debugger | INVESTIGATE | Inspector | 🧠 Reasoning | Brooks-Lint RCA (Iron Law + 6 decay risks + 4 review modes) |
243
- | Debugger | FIX | Fixer | Fast | Minimal, root-cause-targeted fix |
244
- | Debugger | REPORT | Debug-Reporter | Fast | **Formatter** Iron Law diagnosis report to `docs/reports/` |
245
- | Prober | TRACE | Tracer | 🎯 Precision | WSTG recon + vuln path tracing, no remedies |
246
- | Prober | PATCH | Patcher | Fast | Minimal, security-targeted fix (Ponytail, max 10 lines) |
247
- | Prober | AUDIT | Auditor | 🎯 Precision | **Gate** PASS/FAIL + Gap List + BLOAT List only |
248
- | Prober | AUDIT | Probe-Reporter | Fast | **Formatter** security audit report to `docs/reports/` |
270
+ | Composer | EXPLORE | Researcher | Reasoning | Fact-finding: confirmed_facts / inferred_facts / unknowns / risks |
271
+ | Composer | PLAN | Plan-Writer | Fast | **Formatter** -- writes PRD to `docs/plans/`, missing input = TBD |
272
+ | Composer | PLAN | Plan-Checker | Reasoning | **Gate** -- PASS/FAIL + gap list only, no suggestions |
273
+ | Composer | BUILD | Coder | Fast | Implements code from PRD |
274
+ | Composer | BUILD | Tester | Precision | PASS/FAIL/BLOCKED + coverage gaps only |
275
+ | Composer | BUILD | Reviewer | Precision | **Gate** -- PASS/FAIL + gap list only, no suggestions |
276
+ | Composer | BUILD | Compose-Reporter | Fast | **Formatter** -- completion report to `docs/reports/` |
277
+ | Debugger | INVESTIGATE | Inspector | Reasoning | Brooks-Lint RCA (Iron Law + 6 decay risks + 4 review modes) |
278
+ | Debugger | FIX | Fixer | Fast | Minimal, root-cause-targeted fix |
279
+ | Debugger | REPORT | Debug-Reporter | Fast | **Formatter** -- Iron Law diagnosis report to `docs/reports/` |
280
+ | Prober | TRACE | Tracer | Precision | WSTG recon + vuln path tracing, no remedies |
281
+ | Prober | PATCH | Patcher | Fast | Minimal, security-targeted fix (Ponytail, max 10 lines) |
282
+ | Prober | AUDIT | Auditor | Precision | **Gate** -- PASS/FAIL + Gap List + BLOAT List only |
283
+ | Prober | AUDIT | Probe-Reporter | Fast | **Formatter** -- security audit report to `docs/reports/` |
249
284
 
250
285
  ---
251
286
 
@@ -254,14 +289,14 @@ Each subagent belongs to exactly one primary agent and cannot be invoked by anyo
254
289
  | Rule | Detail |
255
290
  |------|--------|
256
291
  | **Mandatory starts** | Composer always starts in EXPLORE. Prober always starts in TRACE. No skipping. |
257
- | **Guardrail gates** | Composer: Gate 1 (EXPLOREPLAN/BUILD), Gate 2 (PLANBUILD). Prober: Gate after TRACE. All require user confirmation. |
258
- | **Gate agents** | Plan-Checker, Reviewer, Auditor PASS/FAIL + gap list only. No suggestions, no decisions. |
259
- | **Formatter agents** | Plan-Writer, Compose-Reporter, Debug-Reporter, Probe-Reporter stateless. Missing input = TBD/NA. Never invent content. |
260
- | **Fact-finding agents** | Researcher, Inspector, Tracer facts/inferences/risks only. No recommendations. |
261
- | **Build gate order** | Coder Tester Reviewer Compose-Reporter. No skipping. No CoderCoder without verification. |
292
+ | **Guardrail gates** | Composer: Gate 1 (EXPLORE->PLAN/BUILD), Gate 2 (PLAN->BUILD). Prober: Gate after TRACE. All require user confirmation. |
293
+ | **Gate agents** | Plan-Checker, Reviewer, Auditor -- PASS/FAIL + gap list only. No suggestions, no decisions. |
294
+ | **Formatter agents** | Plan-Writer, Compose-Reporter, Debug-Reporter, Probe-Reporter -- stateless. Missing input = TBD/NA. Never invent content. |
295
+ | **Fact-finding agents** | Researcher, Inspector, Tracer -- facts/inferences/risks only. No recommendations. |
296
+ | **Build gate order** | Coder -> Tester -> Reviewer -> Compose-Reporter. No skipping. No Coder->Coder without verification. |
262
297
  | **FAIL loops** | Plan-Checker FAIL: max 5 loops. Build FAIL (Tester/Reviewer): max 5 loops. Prober AUDIT FAIL: max 5 loops. All surface to you after limit. |
263
- | **Output directories** | PRDs `docs/plans/`. Reports (Compose-Reporter, Debug-Reporter, Probe-Reporter) `docs/reports/`. Enforced by permissions. |
264
- | **Independence** | Debugger and Prober are fully standalone triggered directly, do not flow through Composer. |
298
+ | **Output directories** | PRDs -> `docs/plans/`. Reports (Compose-Reporter, Debug-Reporter, Probe-Reporter) -> `docs/reports/`. Enforced by permissions. |
299
+ | **Independence** | Debugger and Prober are fully standalone -- triggered directly, do not flow through Composer. |
265
300
 
266
301
  ---
267
302
 
@@ -269,20 +304,20 @@ Each subagent belongs to exactly one primary agent and cannot be invoked by anyo
269
304
 
270
305
  The Debugger pipeline uses the [Brooks-Lint](https://hyhmrright.github.io/brooks-lint/guide.html) framework:
271
306
 
272
- - **Iron Law** per finding: Symptom Source Consequence Remedy
273
- - **6 Decay Risks (R1R6)**: Cognitive Overload, Change Propagation, Knowledge Duplication, Accidental Complexity, Dependency Disorder, Domain Model Distortion
274
- - **4 Review Modes**: PR Review (R1R6), Architecture Audit, Tech Debt Assessment (Pain × Spread), Test Quality (T1T6)
275
- - **T1T6 Test Risks**: Test Obscurity, Brittleness, Duplication, Mock Abuse, Coverage Illusion, Architecture Mismatch
307
+ - **Iron Law** per finding: Symptom -> Source -> Consequence -> Remedy
308
+ - **6 Decay Risks (R1-R6)**: Cognitive Overload, Change Propagation, Knowledge Duplication, Accidental Complexity, Dependency Disorder, Domain Model Distortion
309
+ - **4 Review Modes**: PR Review (R1-R6), Architecture Audit, Tech Debt Assessment (Pain x Spread), Test Quality (T1-T6)
310
+ - **T1-T6 Test Risks**: Test Obscurity, Brittleness, Duplication, Mock Abuse, Coverage Illusion, Architecture Mismatch
276
311
 
277
312
  ## Principle Hierarchy
278
313
 
279
314
  All agents resolve conflicts using this priority order (defined in `hierarchy.txt`):
280
315
 
281
- 1. **PRD / Spec** explicit requirement text
282
- 2. **Verdict** Reviewer / Plan-Checker / Auditor PASS/FAIL
283
- 3. **Engineering principles** Fail Fast, Single Responsibility
284
- 4. **Heuristics** KISS, DRY, SOLID, Law of Demeter
285
- 5. **Local optimization** style preference
316
+ 1. **PRD / Spec** -- explicit requirement text
317
+ 2. **Verdict** -- Reviewer / Plan-Checker / Auditor PASS/FAIL
318
+ 3. **Engineering principles** -- Fail Fast, Single Responsibility
319
+ 4. **Heuristics** -- KISS, DRY, SOLID, Law of Demeter
320
+ 5. **Local optimization** -- style preference
286
321
 
287
322
  ---
288
323
 
@@ -298,9 +333,9 @@ npm install -g pluidr
298
333
 
299
334
  The everyday command. Runs three steps in sequence:
300
335
 
301
- 1. **Update check** compares local version against npm registry; prompts to `npm install -g pluidr` if a new version is available
302
- 2. **Doctor check** verifies installation health; prompts to repair with `pluidr init` if any checks fail
303
- 3. **Launch** spawns `opencode`
336
+ 1. **Update check** -- compares local version against npm registry; prompts to `npm install -g pluidr` if a new version is available
337
+ 2. **Doctor check** -- verifies installation health; prompts to repair with `pluidr init` if any checks fail
338
+ 3. **Launch** -- spawns `opencode`
304
339
 
305
340
  ### `pluidr init`
306
341
 
@@ -316,7 +351,7 @@ Prompts you to select models for three agent tiers (reasoning, precision, and fa
316
351
 
317
352
  ### `pluidr doctor`
318
353
 
319
- Checks installation health and reports ✓/✗ for each component:
354
+ Checks installation health and reports pass/fail for each component:
320
355
 
321
356
  - `opencode.jsonc` exists
322
357
  - All 18 prompt files present
@@ -349,15 +384,15 @@ Restores your previous configuration:
349
384
 
350
385
  Provides subagents with cross-session context access:
351
386
 
352
- - `parent_session_messages` read the parent session's transcript
353
- - `session_messages(sessionId)` read any session by ID
354
- - `session_messages_batch(sessionIds)` read multiple sessions in one call
387
+ - `parent_session_messages` -- read the parent session's transcript
388
+ - `session_messages(sessionId)` -- read any session by ID
389
+ - `session_messages_batch(sessionIds)` -- read multiple sessions in one call
355
390
 
356
391
  ### `pluidr-squeeze`
357
392
 
358
- Hooks into tool execution to rewrite bash commands through the `squeeze` binary, filtering verbose output and saving **6090% of tokens** across all agents.
393
+ Hooks into tool execution to rewrite bash commands through the `squeeze` binary, filtering verbose output and saving **60-90% of tokens** across all agents.
359
394
 
360
- Both plugins and their dependency declaration are installed automatically by `pluidr init` no extra user action required. On OpenCode's first launch, the bundled Bun runtime installs `@opencode-ai/plugin` from the generated `package.json`.
395
+ Both plugins and their dependency declaration are installed automatically by `pluidr init` -- no extra user action required. On OpenCode's first launch, the bundled Bun runtime installs `@opencode-ai/plugin` from the generated `package.json`.
361
396
 
362
397
  ### Themes & Colors
363
398
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pluidr",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
4
4
  "description": "Opinionated Engineering Workflow for OpenCode — Plan, Build, Review.",
5
5
  "keywords": [
6
6
  "opencode",
@@ -4,11 +4,11 @@ import { confirm, isCancel } from "@clack/prompts"
4
4
  export function fetchLatestVersion() {
5
5
  try {
6
6
  if (process.platform === "win32") {
7
- return execSync("npm view pluidr version", { stdio: "pipe" })
7
+ return execSync("npm view pluidr version", { stdio: "pipe", timeout: 1500 })
8
8
  .toString()
9
9
  .trim()
10
10
  }
11
- return execFileSync("npm", ["view", "pluidr", "version"], { stdio: "pipe" })
11
+ return execFileSync("npm", ["view", "pluidr", "version"], { stdio: "pipe", timeout: 1500 })
12
12
  .toString()
13
13
  .trim()
14
14
  } catch {