@fro.bot/systematic 2.20.5 → 2.21.0

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
@@ -15,520 +15,60 @@
15
15
 
16
16
  <br>
17
17
 
18
- **[Overview](#overview)** · **[Quick Start](#quick-start)** · **[Skills](#skills)** · **[Agents](#agents)** · **[CLI](#cli)** · **[Configuration](#configuration)** · **[Development](#development)**
18
+ **[Docs](https://fro.bot/systematic/)** · **[npm](https://www.npmjs.com/package/@fro.bot/systematic)** · **[GitHub](https://github.com/marcusrbrown/systematic)**
19
19
 
20
20
  </div>
21
21
 
22
22
  ---
23
23
 
24
- ## Overview
24
+ AI coding tools are fast at generating code, but they don't preserve engineering discipline by default. They skip planning, forget standards, miss review steps, and fail to capture what was learned. Systematic exists to turn those one-off interactions into a repeatable workflow.
25
25
 
26
- Systematic is an [OpenCode](https://opencode.ai/) plugin that transforms your AI assistant into a **disciplined engineering collaborator**. It provides battle-tested workflows adapted from the [Compound Engineering Plugin (CEP)](https://github.com/EveryInc/compound-engineering-plugin) for Claude Code.
26
+ ## Why Systematic?
27
27
 
28
- ### Why Systematic?
28
+ You want AI that follows your process, not just your prompts. You want repeatable engineering habits encoded into the environment. You want the system to get better after each task.
29
29
 
30
- Most AI coding assistants respond to requests without structure or methodology. This leads to inconsistent outputs, missed requirements, and wasted iterations.
30
+ ## What You Get
31
31
 
32
- **Systematic solves this with structured workflows.** Installation is the first step to equipping your AI with high-leverage engineering habits. Once installed, the plugin injects proven processes directly into the system prompt, enabling it to:
32
+ Systematic is an [OpenCode](https://opencode.ai/) plugin that ships 40+ bundled skills covering brainstorming, planning, implementation, review, and knowledge capture. It includes 50+ specialized agents for architecture, security, performance, design, and code review. Installation is zero-configuration — the plugin registers everything via OpenCode's config hooks and works immediately on restart. OCX registry support is available for component-level installs when you only want specific pieces.
33
33
 
34
- - **Brainstorm systematically** before jumping to implementation
35
- - **Plan with rigor** using multi-phase workflows
36
- - **Review code architecturally** with specialized agents
37
- - **Follow consistent patterns** across your entire team
34
+ ## Quick Install
38
35
 
39
- ### Key Features
40
-
41
- - **Structured Skills** — Pre-built workflows for brainstorming, planning, code review, and more
42
- - **Specialized Agents** — Purpose-built subagents for architecture, security, performance, and research
43
- - **Zero Configuration** — Works immediately after installation via config hooks
44
- - **Extensible** — Add project-specific skills and agents alongside bundled ones
45
- - **Batteries Included** — a curated catalog of skills and agents ships with the npm package
46
- - **CLI Tooling** — Inspect, list, and convert assets from the command line
47
-
48
- ## Quick Start
49
-
50
- ### Prerequisites
51
-
52
- - [OpenCode](https://opencode.ai/) installed and configured
53
- - Node.js 18+ or Bun runtime
54
-
55
- ### Installation
56
-
57
- Install the plugin by adding it to your OpenCode configuration (`~/.config/opencode/opencode.json`):
36
+ Add to your `opencode.json` and restart OpenCode:
58
37
 
59
38
  ```json
60
- {
61
- "plugins": ["@fro.bot/systematic@latest"]
62
- }
63
- ```
64
-
65
- Restart OpenCode to activate the plugin. All bundled skills and agents will be available immediately.
66
-
67
- > [!NOTE]
68
- > Systematic uses OpenCode's `config` hook to automatically register all bundled content. No manual file copying required.
69
-
70
- ### Alternative: Install via OCX
71
-
72
- [OCX](https://github.com/kdcokenny/ocx) provides component-level installation:
73
-
74
- ```bash
75
- # Add the Systematic registry
76
- ocx registry add https://fro.bot/systematic --name systematic
77
-
78
- # Install individual components
79
- ocx add systematic/using-systematic
80
- ocx add systematic/agent-architecture-strategist
81
-
82
- # Or install bundles
83
- ocx add systematic/skills # All bundled skills
84
- ocx add systematic/agents # All bundled agents
85
-
86
- # Or use a profile (requires --global registry)
87
- ocx registry add https://fro.bot/systematic --name systematic --global
88
- ocx profile add sys --from systematic/standalone
89
- ```
90
-
91
- See the [OCX Registry Guide](https://fro.bot/systematic/guides/ocx-registry/) for details.
92
-
93
- ### Verify Installation
94
-
95
- In any OpenCode conversation, type:
96
-
97
- ```
98
- /systematic:using-systematic
99
- ```
100
-
101
- If the skill loads and displays usage instructions, the plugin is working correctly.
102
-
103
- #### Next Steps
104
-
105
- Once verified, explore these guides to master the Systematic workflow:
106
- - **[Philosophy](https://fro.bot/systematic/guides/philosophy/)** — Understand the Compound Engineering mindset and why it works
107
- - **[Main Loop](https://fro.bot/systematic/guides/main-loop/)** — Learn the Plan → Work → Review → Compound cycle
108
- - **[Agent Install Guide](https://fro.bot/systematic/guides/agent-install/)** — Step-by-step install guide for AI agents
109
-
110
- ## Skills
111
-
112
- Skills are structured workflows that guide the AI through systematic engineering processes. They're loaded via the `systematic_skill` tool and invocable as slash commands (e.g., `/ce:brainstorm`).
113
-
114
- ### Core Workflows
115
-
116
- The Compound Engineering loop — the heart of Systematic:
117
-
118
- | Skill | Description |
119
- |-------|-------------|
120
- | `ce:brainstorm` | Explore requirements through collaborative dialogue before planning |
121
- | `ce:plan` | Transform feature descriptions into structured implementation plans |
122
- | `ce:review` | Perform exhaustive code reviews using multi-agent analysis |
123
- | `ce:work` | Execute work plans efficiently while maintaining quality |
124
- | `ce:compound` | Document recently solved problems to compound team knowledge |
125
- | `ce:ideate` | Generate and critically evaluate grounded improvement ideas |
126
- | `ce:compound-refresh` | Refresh stale learnings and pattern docs against current codebase |
127
-
128
- ### Development Tools
129
-
130
- | Skill | Description |
131
- |-------|-------------|
132
- | `using-systematic` | Bootstrap skill — teaches the AI how to discover and use other skills |
133
- | `agent-browser` | Browser automation using Vercel's agent-browser CLI |
134
- | `agent-native-architecture` | Design systems where AI agents are first-class citizens |
135
- | `compound-docs` | Capture solved problems as categorized documentation |
136
- | `document-review` | Refine requirements or plan documents before proceeding |
137
- | `deepen-plan` | Enhance a plan with parallel research for each section |
138
- | `todo-create` · `todo-resolve` · `todo-triage` | Durable file-based todo tracking, triage, and batch resolution |
139
- | `frontend-design` | Create distinctive, production-grade frontend interfaces |
140
- | `git-worktree` | Manage git worktrees for isolated parallel development |
141
- | `generate_command` | Create a new custom slash command following conventions |
142
- | `orchestrating-swarms` | Coordinate multi-agent swarms and pipeline workflows |
143
- | `lfg` · `slfg` | Full autonomous engineering workflow (single-agent / swarm) |
144
-
145
- ### Specialized Skills
146
-
147
- | Skill | Description |
148
- |-------|-------------|
149
- | `dhh-rails-style` | Write Ruby and Rails code in DHH's distinctive 37signals style |
150
- | `andrew-kane-gem-writer` | Write Ruby gems following Andrew Kane's proven patterns |
151
- | `dspy-ruby` | Build type-safe LLM applications with DSPy.rb |
152
- | `every-style-editor` | Review and edit copy for style guide compliance |
153
- | `gemini-imagegen` | Generate and edit images using the Gemini API |
154
- | `proof` | Create, edit, and share markdown documents via Proof |
155
- | `rclone` | Upload, sync, and manage files across cloud storage providers |
156
-
157
- > **[View all skills →](https://fro.bot/systematic/reference/skills/)**
158
-
159
- ### How Skills Work
160
-
161
- Skills are Markdown files with YAML frontmatter. When loaded, their content is injected into the conversation, guiding the AI's behavior:
162
-
163
- ```markdown
164
- ---
165
- name: brainstorming
166
- description: This skill should be used before implementing features...
167
- ---
168
-
169
- # Brainstorming
170
-
171
- This skill provides detailed process knowledge for effective brainstorming...
172
- ```
173
-
174
- The AI is instructed to invoke skills **before** taking action — even with a 1% chance a skill might apply.
175
-
176
- ## Agents
177
-
178
- Agents are specialized subagents with pre-configured prompts and expertise. They're registered automatically via the config hook.
179
-
180
- ### Design Agents
181
-
182
- | Agent | Purpose |
183
- |-------|---------|
184
- | `design-implementation-reviewer` | Visually compare live UI against Figma designs and report discrepancies |
185
- | `design-iterator` | Iteratively refine UI design through screenshot-analyze-improve cycles |
186
- | `figma-design-sync` | Detect and fix visual differences between web implementation and Figma |
187
-
188
- ### Docs Agents
189
-
190
- | Agent | Purpose |
191
- |-------|---------|
192
- | `ankane-readme-writer` | Create or update README files following Ankane-style template for Ruby gems |
193
-
194
- ### Research Agents
195
-
196
- | Agent | Purpose |
197
- |-------|---------|
198
- | `best-practices-researcher` | Research external best practices, documentation, and examples for any technology |
199
- | `framework-docs-researcher` | Gather framework documentation and best practices |
200
- | `git-history-analyzer` | Archaeological analysis of git history to trace code evolution and patterns |
201
- | `issue-intelligence-analyst` | Analyze GitHub issues to surface recurring themes, pain patterns, and severity trends |
202
- | `learnings-researcher` | Search past solutions in docs/solutions/ to surface institutional knowledge |
203
- | `repo-research-analyst` | Research repository structure, documentation, conventions, and implementation patterns |
204
-
205
- ### Review Agents
206
-
207
- | Agent | Purpose |
208
- |-------|---------|
209
- | `agent-native-reviewer` | Ensure agent-native parity — any user action should also be available to agents |
210
- | `architecture-strategist` | Analyze code changes from an architectural perspective |
211
- | `code-simplicity-reviewer` | Final review pass for simplicity and YAGNI principles |
212
- | `data-integrity-guardian` | Review database migrations, data models, and persistent data code for safety |
213
- | `data-migration-expert` | Validate data migrations, backfills, and production data transformations |
214
- | `deployment-verification-agent` | Produce Go/No-Go deployment checklists with verification queries and rollback procedures |
215
- | `dhh-rails-reviewer` | Brutally honest Rails code review from DHH's perspective |
216
- | `julik-frontend-races-reviewer` | Review JavaScript and Stimulus code for race conditions and timing issues |
217
- | `kieran-python-reviewer` | High quality bar Python review for Pythonic patterns, type safety, and maintainability |
218
- | `kieran-rails-reviewer` | High quality bar Rails review for conventions, clarity, and maintainability |
219
- | `kieran-typescript-reviewer` | High quality bar TypeScript review for type safety, modern patterns, and maintainability |
220
- | `pattern-recognition-specialist` | Detect design patterns, anti-patterns, and code smells |
221
- | `performance-oracle` | Performance analysis, bottleneck identification, scalability |
222
- | `schema-drift-detector` | Detect unrelated schema.rb changes by cross-referencing against included migrations |
223
- | `security-sentinel` | Security audits, vulnerability assessment, OWASP compliance |
224
-
225
- ### Workflow Agents
226
-
227
- | Agent | Purpose |
228
- |-------|---------|
229
- | `bug-reproduction-validator` | Systematically verify and reproduce reported bugs |
230
- | `lint` | Run linting and code quality checks on Ruby and ERB files |
231
- | `pr-comment-resolver` | Address PR review comments by implementing requested changes |
232
- | `spec-flow-analyzer` | Analyze specifications for user flow gaps and missing requirements |
233
-
234
- ### Using Agents
235
-
236
- Agents are invoked via OpenCode's `@mention` syntax or `task`:
237
-
238
- ```
239
- @architecture-strategist Review the authentication refactoring in this PR
39
+ { "plugins": ["@fro.bot/systematic@latest"] }
240
40
  ```
241
41
 
242
- Or programmatically in skills:
42
+ Your global config lives at `~/.config/opencode/opencode.json`.
243
43
 
244
- ```
245
- task(subagent_type="architecture-strategist", prompt="Review...")
246
- ```
44
+ ## First Workflow
247
45
 
248
- ## CLI
249
-
250
- Systematic includes a CLI for inspecting and converting assets outside of OpenCode.
46
+ Once installed, run a full engineering cycle on any feature:
251
47
 
252
48
  ```
253
- systematic <command> [options]
49
+ /ce:brainstorm "add dark mode toggle"
50
+ /ce:plan
51
+ /ce:work
52
+ /ce:review
254
53
  ```
255
54
 
256
- ### Commands
257
-
258
- | Command | Description |
259
- |---------|-------------|
260
- | `list [type]` | List available skills, agents, or commands |
261
- | `convert <type> <file>` | Convert a CEP file and output the result to stdout |
262
- | `config show` | Show current configuration and file contents |
263
- | `config path` | Print config file locations |
264
-
265
- ### Examples
266
-
267
- ```bash
268
- # List all bundled skills
269
- systematic list skills
270
-
271
- # List all bundled agents
272
- systematic list agents
273
-
274
- # Convert a Claude Code agent to OpenCode format
275
- systematic convert agent ./agents/my-agent.md
276
-
277
- # Convert with a specific agent mode
278
- systematic convert agent ./agents/my-agent.md --mode=primary
279
-
280
- # Show configuration
281
- systematic config show
282
- ```
283
-
284
- ## Configuration
285
-
286
- Systematic works out of the box, but you can customize it via configuration files.
287
-
288
- ### Plugin Configuration
289
-
290
- Configuration is loaded from multiple locations and merged (later sources override earlier ones):
291
-
292
- 1. **User config:** `~/.config/opencode/systematic.json`
293
- 2. **Project config:** `.opencode/systematic.json`
294
- 3. **Custom config:** `$OPENCODE_CONFIG_DIR/systematic.json` (if `OPENCODE_CONFIG_DIR` is set)
295
-
296
- ```json
297
- {
298
- "disabled_skills": ["git-worktree"],
299
- "disabled_agents": [],
300
- "categories": {
301
- "review": {
302
- "temperature": 0.1,
303
- "steps": 12
304
- }
305
- },
306
- "agents": {
307
- "security-sentinel": {
308
- "variant": "thinking"
309
- },
310
- "workflow/systematic-implementer": {
311
- "steps": 20
312
- }
313
- },
314
- "bootstrap": {
315
- "enabled": true
316
- }
317
- }
318
- ```
319
-
320
- | Option | Type | Default | Description |
321
- |--------|------|---------|-------------|
322
- | `disabled_skills` | `string[]` | `[]` | Skills to exclude from registration |
323
- | `disabled_agents` | `string[]` | `[]` | Agents to exclude from registration |
324
- | `categories` | `object` | `{}` | Overlay bundled agents by category (`design`, `docs`, `document-review`, `research`, `review`, `workflow`) |
325
- | `agents` | `object` | `{}` | Overlay exact bundled agents by unique stem or `<category>/<stem>` key |
326
- | `bootstrap.enabled` | `boolean` | `true` | Inject the `using-systematic` guide into system prompts |
327
- | `bootstrap.file` | `string` | — | Custom bootstrap file path (overrides default) |
328
-
329
- Agent overlays support `model`, `variant`, `temperature`, `top_p`, `permission`, `mode`, `color`, `steps`, `hidden`, exact-agent-only `disable`, and managed `skills`. `color` accepts `#RRGGBB` hex colors or OpenCode theme tokens: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, and `info`. `skills` uses bundled skill frontmatter names like `ce:review`; it is a shortcut that writes OpenCode `permission.skill` rules, not a native OpenCode agent field. Because `model` and `variant` control provider routing/cost/privacy and `permission`/`skills` control tool access, those fields are only accepted from user config or `$OPENCODE_CONFIG_DIR/systematic.json`. Project config may tune non-sensitive presentation and runtime fields such as `temperature`, `top_p`, `mode`, `color`, `steps`, `hidden`, or exact-agent `disable`, but it cannot choose model/provider routing, tune `variant`, or loosen permission/capability policy.
330
-
331
- Systematic separates config-source precedence from overlay precedence. Config files merge in this order: user config, project config, then `$OPENCODE_CONFIG_DIR/systematic.json` if set. Higher-priority `agents.<key>` and `categories.<id>` entries replace lower-priority entries wholesale, while unrelated keys survive. Project overlays are the exception for trust-sensitive fields: same-key project overlays preserve user-level `model`, `variant`, `permission`, and `skills` fields instead of erasing them. After the effective config is built, Systematic applies agent overlay precedence for bundled agents:
332
-
333
- 1. Exact `agents.<key>` overlay (high-trust `model` wins)
334
- 2. `categories.<category-id>` overlay (high-trust `model` wins)
335
- 3. Source category model default (built-in, code-owned)
336
- 4. Bundled markdown/frontmatter defaults
337
- 5. OpenCode inherited defaults
338
-
339
- Source category model defaults are primary model choices only — they are not fallback chains. Systematic does not support `fallback_models`, inherited retry semantics, runtime fallback behavior, or fallback to the parent model when a source model is unavailable. Explicit and source model IDs are structurally validated and may still fail at OpenCode runtime if the provider or model is unavailable.
340
-
341
- Source category model defaults are ordered provider/model preference chains per category. At plugin load, Systematic asks OpenCode for connected providers through `client.config.providers()` and selects the first provider/model entry OpenCode reports as available. If the live provider query fails, Systematic falls back to OpenCode's `models.json` cache; if both sources fail, it skips source-default emission so bundled agents inherit the parent OpenCode model instead of pinning an unavailable model. The chains are ordered preference lists, not runtime fallback chains — `fallback_models` is still not supported.
342
-
343
- If you want to restore OpenCode parent-model inheritance for a bundled agent or category (opting out of the source default), set `"model": null` in high-trust user or `$OPENCODE_CONFIG_DIR/systematic.json` config. Project config cannot use `model: null` — project config cannot set, erase, or shadow `model` at any value.
344
-
345
- The source defaults are:
346
-
347
- | Category | Chain | Rationale | When to Override |
348
- | --- | --- | --- | --- |
349
- | `design` | `github-copilot/gemini-3.1-pro-preview`, `openai/gpt-5.5` (`high`), `anthropic/claude-opus-4-7` (`max`), … | High-judgment UX, product, and design work benefits from a strong general reasoning model with broad creative capability. | Override to a faster/cheaper model when design tasks are primarily templating or low-stakes layout work. |
350
- | `docs` | `github-copilot/gemini-3.1-pro-preview`, `openai/gpt-5.4-mini`, `anthropic/claude-haiku-4-5`, … | Documentation and summarization tasks should start cheaper and faster; quality is sufficient at mid-tier models. | — |
351
- | `document-review` | `anthropic/claude-opus-4-7` (`max`), `openai/gpt-5.5` (`high`), `github-copilot/gemini-3.1-pro-preview`, … | Requirements and plan critique benefit from the strongest nuanced reasoning to surface non-obvious gaps and contradictions. | — |
352
- | `research` | `openai/gpt-5.4-mini`, `anthropic/claude-sonnet-4-6`, `github-copilot/gemini-3.1-pro-preview`, … | Tool-heavy synthesis and source evaluation benefit from a strong general reasoning model with broad knowledge. | — |
353
- | `review` | `anthropic/claude-sonnet-4-6`, `openai/gpt-5.3-codex`, `github-copilot/gemini-3.1-pro-preview`, … | Code, security, and adversarial review benefits from the strongest reasoning to catch subtle bugs and security issues. | Override to a faster model when review tasks are primarily style or formatting checks rather than correctness or security analysis. |
354
- | `workflow` | `openai/gpt-5.4-mini`, `anthropic/claude-sonnet-4-6`, `opencode/claude-haiku-4-5`, … | Orchestration and bounded implementation tasks should default cheaper and faster; strong reasoning is rarely needed for routing decisions. | — |
355
-
356
- These defaults are owned by Systematic code and emitted for bundled agents in each category when no stronger high-trust exact or category `model` override exists. Uncategorized bundled agents receive no source default and continue inheriting the parent OpenCode model. Native OpenCode agents with the same emitted key are full replacements and receive no Systematic source model default.
357
-
358
- Bundled agent markdown still intentionally omits `model` — the field belongs in source code defaults, not portable markdown files. Authors must not add `model:` frontmatter to bundled agent files.
359
-
360
- Systematic emits a source model as the default; you can override it per-agent or per-category in user or `$OPENCODE_CONFIG_DIR/systematic.json` config. Project config cannot set, erase, or shadow `model` policy.
361
-
362
- > **Migration: Restoring parent-model inheritance.** If you previously relied on bundled agents inheriting the parent OpenCode model (no source defaults), set `"model": null` in your high-trust config to opt out of the source default per agent or per category. For example:
363
- >
364
- > ```jsonc
365
- > // ~/.config/opencode/systematic.json or $OPENCODE_CONFIG_DIR/systematic.json
366
- > {
367
- > "categories": {
368
- > "review": { "model": null } // All review agents inherit parent model
369
- > },
370
- > "agents": {
371
- > "security-sentinel": { "model": null } // Single agent inherits parent model
372
- > }
373
- > }
374
- > ```
375
- >
376
- > This only works from high-trust config (user or `$OPENCODE_CONFIG_DIR/systematic.json`). Project `.opencode/systematic.json` cannot set `model: null` or any `model` value.
377
-
378
- Native OpenCode agents with the same emitted key are full replacements. An exact Systematic overlay for that key conflicts, while category overlays skip native replacements and continue applying to other bundled agents. Use one canonical agent key form across config sources (`security-sentinel` or `review/security-sentinel`) because alias collisions fail duplicate-target validation.
379
-
380
- Category IDs are V1 public API because broad policy overlays are a core use case; future agent reorganizations must preserve aliases or provide migration warnings. Category overlays also apply to future bundled agents added to that category. V1 does not include an MCP allowlist shortcut.
381
-
382
- ### Project-Specific Content
383
-
384
- Add your own skills and agents alongside bundled ones:
385
-
386
- ```
387
- .opencode/
388
- ├── skills/
389
- │ └── my-skill/
390
- │ └── SKILL.md
391
- └── agents/
392
- └── my-agent.md
393
- ```
394
-
395
- Project-level content takes precedence over bundled content with the same name.
396
-
397
- ## Tools
398
-
399
- The plugin exposes one tool to OpenCode:
400
-
401
- | Tool | Description |
402
- |------|-------------|
403
- | `systematic_skill` | Load Systematic bundled skills by name. Lists available skills in its description and returns formatted skill content when invoked. |
404
-
405
- For non-Systematic skills (project or user-level), use OpenCode's `skill` tool.
406
-
407
- ## How It Works
408
-
409
- Systematic uses three OpenCode plugin hooks:
410
-
411
- ```mermaid
412
- %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#1a1a2e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4FD1C5', 'lineColor': '#4FD1C5', 'secondaryColor': '#16213e', 'tertiaryColor': '#0f0f23'}}}%%
413
- flowchart TB
414
- A[Plugin Loaded] --> B[config hook]
415
- A --> C[tool hook]
416
- A --> D[system.transform hook]
417
-
418
- B --> E[Merge bundled agents and skills into OpenCode config]
419
- C --> F[Register systematic_skill tool]
420
- D --> G[Inject bootstrap prompt into every conversation]
421
-
422
- style A fill:#1a1a2e,stroke:#4FD1C5,color:#fff
423
- style B fill:#16213e,stroke:#4FD1C5,color:#4FD1C5
424
- style C fill:#16213e,stroke:#E91E8C,color:#E91E8C
425
- style D fill:#16213e,stroke:#F5A623,color:#F5A623
426
- style E fill:#0f0f23,stroke:#4FD1C5,color:#B2F5EA
427
- style F fill:#0f0f23,stroke:#E91E8C,color:#B2F5EA
428
- style G fill:#0f0f23,stroke:#F5A623,color:#B2F5EA
429
- ```
430
-
431
- 1. **`config` hook** — Discovers and merges bundled skills and agents into your OpenCode configuration. Existing config takes precedence over bundled content. Skills are registered as slash commands with the `systematic:` prefix.
432
- 2. **`tool` hook** — Registers the `systematic_skill` tool, which lists available skills in its XML description and loads skill content on demand.
433
- 3. **`system.transform` hook** — Injects the "Using Systematic" bootstrap guide into system prompts, teaching the AI how to discover and invoke skills.
434
-
435
- This architecture ensures skills and agents are available immediately without manual setup.
436
-
437
- ## Development
438
-
439
- ### Prerequisites
440
-
441
- - [Bun](https://bun.sh/) runtime
442
- - Node.js 18+ (for compatibility)
443
-
444
- ### Setup
445
-
446
- ```bash
447
- # Clone the repository
448
- git clone https://github.com/marcusrbrown/systematic.git
449
- cd systematic
450
-
451
- # Install dependencies
452
- bun install
453
-
454
- # Build the plugin
455
- bun run build
456
-
457
- # Run type checking
458
- bun run typecheck
459
-
460
- # Run linter
461
- bun run lint
462
-
463
- # Run unit tests
464
- bun test
465
- ```
466
-
467
- ### Project Structure
468
-
469
- ```
470
- systematic/
471
- ├── src/
472
- │ ├── index.ts # Plugin entry point (SystematicPlugin)
473
- │ ├── cli.ts # CLI entry point
474
- │ └── lib/
475
- │ ├── bootstrap.ts # System prompt injection
476
- │ ├── config.ts # JSONC config loading + merging
477
- │ ├── config-handler.ts # OpenCode config hook implementation
478
- │ ├── converter.ts # CEP-to-OpenCode content conversion
479
- │ ├── skill-tool.ts # systematic_skill tool factory
480
- │ ├── skill-loader.ts # Skill content loading + formatting
481
- │ ├── skills.ts # Skill discovery
482
- │ ├── agents.ts # Agent discovery
483
- │ ├── commands.ts # Command discovery (backward compat)
484
- │ ├── frontmatter.ts # YAML frontmatter parsing
485
- │ ├── validation.ts # Agent config validation + type guards
486
- │ └── walk-dir.ts # Recursive directory walker
487
- ├── skills/ # Bundled skills (SKILL.md files)
488
- ├── agents/ # Bundled agents (6 categories)
489
- ├── docs/ # Starlight documentation site
490
- ├── registry/ # OCX registry config + profiles
491
- ├── scripts/ # Build and utility scripts
492
- ├── tests/
493
- │ ├── unit/ # Unit test files
494
- │ └── integration/ # Integration test files
495
- └── dist/ # Build output
496
- ```
497
-
498
- ### Testing
499
-
500
- ```bash
501
- # Run all unit tests
502
- bun test tests/unit
503
-
504
- # Run a specific test file
505
- bun test tests/unit/skills.test.ts
506
-
507
- # Run integration tests
508
- bun test tests/integration
509
-
510
- # Run all tests
511
- bun test
512
- ```
513
-
514
- ### Contributing
515
-
516
- See [`AGENTS.md`](./AGENTS.md) for detailed development guidelines, code style conventions, and architecture overview.
55
+ Each step invokes a structured skill that guides the AI through the appropriate phase — requirements exploration, implementation planning, execution, and code review.
517
56
 
518
- ## Converting from Claude Code
57
+ ## First-Run Checklist
519
58
 
520
- Migrating skills or agents from Claude Code format to Systematic? The CLI includes a converter — run `bun src/cli.ts convert <file>` for field mappings and tool name translations.
59
+ - [ ] [OpenCode](https://opencode.ai/) installed
60
+ - [ ] Add `@fro.bot/systematic@latest` to your `opencode.json` plugins list
61
+ - [ ] Restart OpenCode
62
+ - [ ] Run `/ce:brainstorm` on something you're building
63
+ - [ ] Verify: the `systematic_skill` tool appears in your tool list
521
64
 
522
- ## References
65
+ ## Learn More
523
66
 
524
- - [Systematic Documentation](https://fro.bot/systematic) — Full documentation site
525
- - [Philosophy Guide](https://fro.bot/systematic/guides/philosophy/) — Core engineering principles
526
- - [Main Loop Guide](https://fro.bot/systematic/guides/main-loop/) — The standard development cycle
527
- - [Agent Install Guide](https://fro.bot/systematic/guides/agent-install/) — Advanced subagent configuration
528
- - [OpenCode Documentation](https://opencode.ai/docs/) — Official OpenCode platform docs
529
- - [OpenCode Plugin API](https://opencode.ai/docs/plugins) — Plugin development reference
530
- - [Compound Engineering Plugin](https://github.com/EveryInc/compound-engineering-plugin) — Original Claude Code workflows
531
- - [Source Code](https://github.com/marcusrbrown/systematic) — View the implementation
67
+ - [Documentation](https://fro.bot/systematic/)
68
+ - [Skills Catalog](https://fro.bot/systematic/reference/skills/)
69
+ - [Agents Catalog](https://fro.bot/systematic/reference/agents/)
70
+ - [Configuration Reference](https://fro.bot/systematic/reference/configuration/)
71
+ - [Architecture](./ARCHITECTURE.md)
532
72
 
533
73
  ## License
534
74
 
package/dist/cli.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  findCommandsInDir,
7
7
  findSkillsInDir,
8
8
  getConfigPaths
9
- } from "./index-6evyges6.js";
9
+ } from "./index-175fc4yn.js";
10
10
 
11
11
  // src/cli.ts
12
12
  import fs from "fs";
@@ -16087,7 +16087,7 @@ function loadJsoncFile(filePath) {
16087
16087
  }
16088
16088
  return parsed;
16089
16089
  }
16090
- var TYPED_VALIDATION_DOCS_URL = "https://systematic.fro.bot/getting-started/configuration#typed-validation";
16090
+ var TYPED_VALIDATION_DOCS_URL = "https://fro.bot/systematic/reference/configuration#typed-validation";
16091
16091
  var TYPED_KEY_FIELDS = new Set([
16092
16092
  "agents",
16093
16093
  "disabled_agents",
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  loadConfig,
14
14
  loadConfigWithSources,
15
15
  parseFrontmatter
16
- } from "./index-6evyges6.js";
16
+ } from "./index-175fc4yn.js";
17
17
 
18
18
  // src/index.ts
19
19
  import fs5 from "fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "2.20.5",
3
+ "version": "2.21.0",
4
4
  "description": "Structured engineering workflows for OpenCode",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -68,7 +68,7 @@ This file contains the shipping workflow (Phase 3-4). Load it only when all Phas
68
68
 
69
69
  1. **Prepare Evidence Context**
70
70
 
71
- Do not invoke `ce-demo-reel` directly in this step. Evidence capture belongs to the PR creation or PR description update flow, where the final PR diff and description context are available.
71
+ Do not invoke `feature-video` directly in this step. Evidence capture belongs to the PR creation or PR description update flow, where the final PR diff and description context are available.
72
72
 
73
73
  Note whether the completed work has observable behavior (UI rendering, CLI output, API/library behavior with a runnable example, generated artifacts, or workflow output). The `ce-commit-push-pr` skill will ask whether to capture evidence only when evidence is possible.
74
74
 
@@ -38,7 +38,7 @@ This skill captures problem solutions immediately after confirmation, creating s
38
38
  - "problem solved"
39
39
  - "that did it"
40
40
 
41
- **OR manual:** `/doc-fix` command
41
+ **OR manual:** Invoke the `ce:compound` skill directly
42
42
 
43
43
  **Non-trivial problems only:**
44
44
 
@@ -348,7 +348,7 @@ Action:
348
348
  ## Integration Points
349
349
 
350
350
  **Invoked by:**
351
- - /compound command (primary interface)
351
+ - `/ce:compound` skill (primary interface)
352
352
  - Manual invocation in conversation after solution confirmed
353
353
  - Can be triggered by detecting confirmation phrases like "that worked", "it's fixed", etc.
354
354
 
@@ -297,7 +297,7 @@ Use the first available option:
297
297
 
298
298
  1. **Existing project browser tooling** -- if Playwright, Puppeteer, Cypress, or similar is already in the project's dependencies, use it. Do not introduce new dependencies just for verification.
299
299
  2. **Browser MCP tools** -- if browser automation tools (e.g., claude-in-chrome) are available in the agent's environment, use them.
300
- 3. **agent-browser CLI** -- if nothing else is available and `agent-browser` is installed, use it. If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then skip to the next option.
300
+ 3. **agent-browser CLI** -- if nothing else is available and `agent-browser` is installed, use it. If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then skip to the next option.
301
301
  4. **Mental review** -- if no browser access is possible (headless CI, no permissions to install), apply the litmus checks as a self-review and note that visual verification was skipped.
302
302
 
303
303
  ### What to Assess
@@ -69,11 +69,18 @@ Read the current PR description to drive the compare-and-confirm step later:
69
69
  gh pr view --json body --jq '.body'
70
70
  ```
71
71
 
72
- **Generate the updated title and body** — load the `ce-pr-description` skill with the PR URL from DU-2 (e.g., `https://github.com/owner/repo/pull/123`). The URL preserves repo/PR identity even when invoked from a worktree or subdirectory where the current repo is ambiguous. If the user provided a focus (e.g., "include the benchmarking results"), append it as free-text steering after the URL. The skill returns a `{title, body_file}` block (body in an OS temp file) without applying or prompting.
72
+ **Generate the updated title and body** — using the PR URL from DU-2 and the commit range it covers, write an updated PR title and body. The URL preserves repo/PR identity even when invoked from a worktree or subdirectory. If the user provided a focus (e.g., "include the benchmarking results"), incorporate it into the generated content. Write the body to an OS temp file:
73
73
 
74
- If `ce-pr-description` returns a "not open" or other graceful-exit message instead of a `{title, body_file}` pair, report that message and stop.
74
+ ```bash
75
+ BODY_FILE=$(mktemp /tmp/pr-body-XXXXXX.md)
76
+ cat > "$BODY_FILE" << 'EOF'
77
+ <generated body>
78
+ EOF
79
+ ```
80
+
81
+ If the PR is not open or the commit range cannot be resolved, report the issue and stop.
75
82
 
76
- **Evidence decision:** `ce-pr-description` preserves any existing `## Demo` or `## Screenshots` block from the current body by default. If the user's focus asks to refresh or remove evidence, pass that intent as steering text — the skill will honor it. If no evidence block exists and one would benefit the reader, invoke `ce-demo-reel` separately to capture, then re-invoke `ce-pr-description` with updated steering that references the captured evidence.
83
+ **Evidence decision:** Preserve any existing `## Demo` or `## Screenshots` block from the current body by default. If the user's focus asks to refresh or remove evidence, honor that intent. If no evidence block exists and one would benefit the reader, load the `feature-video` skill to capture evidence, then splice the result as a `## Demo` section into the body file.
77
84
 
78
85
  **Compare and confirm** — briefly explain what the new description covers differently from the old one. This helps the user decide whether to apply; the description itself does not narrate these differences. Summarize from the body already in context (from the bash call that wrote `body_file`); do not `cat` the temp file, which would re-emit the body.
79
86
 
@@ -134,7 +141,7 @@ Priority order for commit messages and PR titles:
134
141
 
135
142
  Use the current branch and existing PR check from context. If the branch is empty, report detached HEAD and stop.
136
143
 
137
- If the PR check returned `state: OPEN`, note the URL -- this is the existing-PR flow. Continue to Step 4 and 5 (commit any pending work and push), then go to Step 7 to ask whether to rewrite the description. Only run Step 6 (which generates a new description via `ce-pr-description`) if the user confirms the rewrite; Step 7's existing-PR sub-path consumes the `{title, body_file}` that Step 6 produces. Otherwise (no open PR), continue through Steps 6, 7, and 8 in order.
144
+ If the PR check returned `state: OPEN`, note the URL -- this is the existing-PR flow. Continue to Step 4 and 5 (commit any pending work and push), then go to Step 7 to ask whether to rewrite the description. Only run Step 6 (which generates a new description) if the user confirms the rewrite; Step 7's existing-PR sub-path uses the title and body file that Step 6 produces. Otherwise (no open PR), continue through Steps 6, 7, and 8 in order.
138
145
 
139
146
  ### Step 4: Branch, stage, and commit
140
147
 
@@ -191,44 +198,49 @@ Use this branch diff (not the working-tree diff) for the evidence decision. If t
191
198
 
192
199
  **Evidence decision (before delegation).** If the branch diff changes observable behavior (UI, CLI output, API behavior with runnable code, generated artifacts, workflow output) and evidence is not otherwise blocked (unavailable credentials, paid services, deploy-only infrastructure, hardware), ask: "This PR has observable behavior. Capture evidence for the PR description?"
193
200
 
194
- - **Capture now** -- load the `ce-demo-reel` skill with a target description inferred from the branch diff. ce-demo-reel returns `Tier`, `Description`, and `URL`. Note the captured evidence so it can be passed as free-text steering to `ce-pr-description` (e.g., "include the captured demo: <URL> as a `## Demo` section") or spliced into the returned body before apply. If capture returns `Tier: skipped` or `URL: "none"`, proceed with no evidence.
195
- - **Use existing evidence** -- ask for the URL or markdown embed, then pass it as free-text steering to `ce-pr-description` or splice in before apply.
201
+ - **Capture now** -- load the `feature-video` skill with a target description inferred from the branch diff. feature-video returns `Tier`, `Description`, and `URL`. Note the captured evidence so it can be spliced into the PR body as a `## Demo` section. If capture returns `Tier: skipped` or `URL: "none"`, proceed with no evidence.
202
+ - **Use existing evidence** -- ask for the URL or markdown embed, then splice it into the PR body as a `## Demo` section before applying.
196
203
  - **Skip** -- proceed with no evidence section.
197
204
 
198
205
  When evidence is not possible (docs-only, markdown-only, changelog-only, release metadata, CI/config-only, test-only, or pure internal refactors), skip without asking.
199
206
 
200
- **Delegate title and body generation to `ce-pr-description`.** Load the `ce-pr-description` skill:
207
+ **Generate title and body.** Using the branch diff and commit log, write a PR title and body directly:
201
208
 
202
- - **For a new PR** (no existing PR found in Step 3): invoke with `base:<base-remote>/<base-branch>` using the already-resolved base from earlier in this step, so `ce-pr-description` describes the correct commit range even when the branch targets a non-default base (e.g., `develop`, `release/*`). Append any captured-evidence context or user focus as free-text steering (e.g., "include the captured demo: <URL> as a `## Demo` section").
203
- - **For an existing PR** (found in Step 3): invoke with the full PR URL from the Step 3 context (e.g., `https://github.com/owner/repo/pull/123`). The URL preserves repo/PR identity even when invoked from a worktree or subdirectory; the skill reads the PR's own `baseRefName` so no `base:` override is needed. Append any focus steering as free text after the URL.
204
-
205
- `ce-pr-description` returns a `{title, body_file}` block (body in an OS temp file). It applies the value-first writing principles, commit classification, sizing, narrative framing, writing voice, visual communication, numbering rules, and the Systematic badge footer internally. Use the returned values verbatim in Step 7; do not layer manual edits onto them unless a focused adjustment is required (e.g., splicing an evidence block captured in this step that was not passed as steering text — in that case, edit the body file directly before applying).
209
+ - **Title**: conventional-commit format, under 72 characters, describing the value delivered (not the implementation).
210
+ - **Body**: value-first narrative scaled to the change size. Apply the writing principles, commit classification, sizing, and narrative framing described in this skill. Write the body to an OS temp file:
211
+ ```bash
212
+ BODY_FILE=$(mktemp /tmp/pr-body-XXXXXX.md)
213
+ cat > "$BODY_FILE" << 'EOF'
214
+ <generated body>
215
+ EOF
216
+ ```
217
+ - Splice any captured evidence as a `## Demo` section into the body file before applying.
206
218
 
207
- If `ce-pr-description` returns a graceful-exit message instead of `{title, body_file}` (e.g., closed PR, no commits to describe, base ref unresolved), report the message and stop — do not create or edit the PR.
219
+ If the branch diff is empty or the base ref is unresolved, report the issue and stop — do not create or edit the PR.
208
220
 
209
221
  ### Step 7: Create or update the PR
210
222
 
211
223
  #### New PR (no existing PR from Step 3)
212
224
 
213
- Using the `{title, body_file}` returned by `ce-pr-description`:
225
+ Using the title and body file generated in Step 6:
214
226
 
215
227
  ```bash
216
- gh pr create --title "<returned title>" --body "$(cat "<returned body_file>")"
228
+ gh pr create --title "<title>" --body "$(cat "<body_file>")"
217
229
  ```
218
230
 
219
- Keep the title under 72 characters; `ce-pr-description` already emits a conventional-commit title in that range.
231
+ Keep the title under 72 characters.
220
232
 
221
233
  #### Existing PR (found in Step 3)
222
234
 
223
235
  The new commits are already on the PR from Step 5. Report the PR URL, then ask whether to rewrite the description.
224
236
 
225
- - If **yes**, run Step 6 now to generate `{title, body_file}` via `ce-pr-description` (passing the existing PR URL as `pr:`), then apply the returned title and body file:
237
+ - If **yes**, run Step 6 now to generate the title and body file (passing the existing PR URL for context), then apply:
226
238
 
227
239
  ```bash
228
- gh pr edit --title "<returned title>" --body "$(cat "<returned body_file>")"
240
+ gh pr edit --title "<title>" --body "$(cat "<body_file>")"
229
241
  ```
230
242
 
231
- - If **no** -- skip Step 6 entirely and finish. Do not run delegation or evidence capture when the user declined the rewrite.
243
+ - If **no** -- skip Step 6 entirely and finish. Do not run evidence capture when the user declined the rewrite.
232
244
 
233
245
  ### Step 8: Report
234
246
 
@@ -32,7 +32,7 @@ Check whether `agent-browser` is installed:
32
32
  command -v agent-browser >/dev/null 2>&1 && echo "Installed" || echo "NOT INSTALLED"
33
33
  ```
34
34
 
35
- If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then stop — this skill cannot function without agent-browser.
35
+ If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then stop — this skill cannot function without agent-browser.
36
36
 
37
37
  ## Workflow
38
38
 
@@ -44,7 +44,7 @@ Before starting, verify `agent-browser` is available:
44
44
  command -v agent-browser >/dev/null 2>&1 && echo "Ready" || echo "NOT INSTALLED"
45
45
  ```
46
46
 
47
- If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then stop.
47
+ If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then stop.
48
48
 
49
49
  ### 2. Ask Browser Mode
50
50
 
@@ -93,9 +93,9 @@ To check blockers: search for `{dep_id}-complete-*.md` in both paths. Missing ma
93
93
 
94
94
  | Trigger | Flow |
95
95
  |---------|------|
96
- | Code review | `/ce:review` -> Findings -> `/todo-triage` -> Todos |
97
- | Autonomous review | `/ce:review mode:autofix` -> Residual todos -> `/todo-resolve` |
98
- | Code TODOs | `/todo-resolve` -> Fixes + Complex todos |
96
+ | Code review | `/ce:review` -> Findings -> `/systematic:todo-triage` -> Todos |
97
+ | Autonomous review | `/ce:review mode:autofix` -> Residual todos -> `/systematic:todo-resolve` |
98
+ | Code TODOs | `/systematic:todo-resolve` -> Fixes + Complex todos |
99
99
  | Planning | Brainstorm -> Create todo -> Work -> Complete |
100
100
 
101
101
  ## Key Distinction
@@ -62,7 +62,7 @@ Todos cleaned up: [count deleted]
62
62
  If pending todos were skipped, list them:
63
63
 
64
64
  ```
65
- Skipped pending todos (run /todo-triage to approve):
65
+ Skipped pending todos (run `/systematic:todo-triage` to approve):
66
66
  - 003-pending-p2-missing-index.md
67
67
  - 005-pending-p3-rename-variable.md
68
68
  ```
@@ -9,7 +9,7 @@ disable-model-invocation: true
9
9
 
10
10
  Interactive workflow for reviewing pending todos one by one and deciding whether to approve, skip, or modify each.
11
11
 
12
- **Do not write code during triage.** This is purely for review and prioritization -- implementation happens in `/todo-resolve`.
12
+ **Do not write code during triage.** This is purely for review and prioritization -- implementation happens in `/systematic:todo-resolve`.
13
13
 
14
14
  - First set the /model to Haiku
15
15
  - Read all pending todos from `.context/systematic/todos/` and legacy `todos/` directories
@@ -64,7 +64,7 @@ After all items processed:
64
64
  ```markdown
65
65
  What would you like to do next?
66
66
 
67
- 1. run /todo-resolve to resolve the todos
67
+ 1. run `/systematic:todo-resolve` to resolve the todos
68
68
  2. commit the todos
69
69
  3. nothing, go chill
70
70
  ```