reviewer-harness 1.9.0 → 1.14.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
@@ -1,7 +1,7 @@
1
1
  # reviewer-harness
2
2
 
3
3
  ```
4
- Four runtimes in the editor, each with files of its own,
4
+ Eight runtimes in the editor, each with files of its own,
5
5
  Scattered rules in every corner, never quite in sync,
6
6
  An AI that means well — but breaks what already works,
7
7
  And forgets your whole project the moment the session ends:
@@ -12,97 +12,99 @@ One sync to bind them all,
12
12
  and in your codebase, protect them.
13
13
  ```
14
14
 
15
- ![version](https://img.shields.io/badge/version-1.0.0-blue)
15
+ ![version](https://img.shields.io/badge/version-1.14.0-blue)
16
16
  ![License](https://img.shields.io/badge/License-MIT-yellowgreen)
17
17
  ![node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)
18
18
  ![dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)
19
- ![runtimes](https://img.shields.io/badge/runtimes-4-purple)
19
+ ![runtimes](https://img.shields.io/badge/runtimes-8-purple)
20
20
  ![status](https://img.shields.io/badge/status-Free%20%26%20Open%20Source-green)
21
21
 
22
- **reviewer-harness** is a personal AI agent harness: one master config that syncs guardrail rules, reusable skills, and a local project memory to **Claude Code, OpenCode, Gemini CLI, and Cline** — so the AI that codes for you stops breaking what already works. No API key. No dependencies. Just Node.js and your rules.
22
+ **reviewer-harness** is a personal AI agent harness: one master config that syncs guardrail rules, reusable skills, and a local project memory to **Claude Code, OpenCode, Gemini CLI, Cline, Freebuff, GitHub Copilot CLI, Antigravity, and Qoder** — so the AI that codes for you stops breaking what already works. No API key. No dependencies. Just Node.js and your rules.
23
23
 
24
- ## Overview
24
+ ## Introduction
25
25
 
26
- AI coding assistants are powerful, but anyone who vibe-codes with them daily runs into the same crises:
26
+ AI coding assistants are powerful, but anyone who vibe-codes with them daily runs into the same four crises:
27
27
 
28
28
  1. **The "you broke my code" crisis.** You ask the AI to add one feature, and it rewrites a file that was already working — deleting or altering parts you never asked it to touch. The fix becomes the bug.
29
29
 
30
30
  2. **The hallucination crisis.** The AI confidently imports packages that don't exist, calls functions it invented, and presents output that only *looks* correct — until you run it.
31
31
 
32
- 3. **The fragmentation crisis.** Every AI runtime wants its own instruction file (`CLAUDE.md`, `.opencode/instructions.md`, `GEMINI.md`, `.clinerules`). Keeping the same rules in sync across all of them by hand is tedious and error-prone.
32
+ 3. **The fragmentation crisis.** Every AI runtime wants its own instruction file (`CLAUDE.md`, `.opencode/instructions.md`, `GEMINI.md`, `.clinerules`, and more). Keeping the same rules in sync across all of them by hand is tedious and error-prone.
33
33
 
34
34
  4. **The amnesia crisis.** Every new session, the AI forgets your project: the decisions you made, the files that must never be touched, the gotchas you already paid for once.
35
35
 
36
- **reviewer-harness solves this with One Master Config.** You define your rules, your problem statement, and your skills once — in a single `harness.config.json` — and the harness validates them (including scanning for leaked secrets) and syncs them deterministically to every runtime. A local, graph-style memory gives the AI something to read before it codes, and to write to when it learns.
36
+ **reviewer-harness solves all four with One Master Config.** You define your rules, your problem statement, and your skills once — in a single `harness.config.json` — and the harness validates them (including scanning for leaked secrets) and syncs them deterministically to every runtime. A local, graph-style memory gives the AI something to read before it codes, and to write to when it learns.
37
37
 
38
- ## The problem (why this harness exists)
38
+ ### What it is — and what it is not
39
39
 
40
- **An AI with no guardrails.** You cannot control the model — but you *can* control **the rules it must follow**. That is the harness. The problem statement lives in `harness.config.json` (the `problem` field) and is synced along with everything else — it appears in every runtime file, so every AI knows not just the rules, but *why* they exist.
40
+ - **It is** the layer that prepares everything the AI reads before it starts coding: your rules, your skills, your project memory.
41
+ - **It is not** the AI model. It never calls an API, never sends your code anywhere, and never needs an API key.
42
+ - **It is not** a framework or a library you import. It is a small CLI that writes instruction files into your project, then gets out of the way.
41
43
 
42
- ## What is this?
44
+ ### Who it is for
43
45
 
44
- The harness is **not the AI model** — it is what prepares everything the AI reads before it starts coding:
46
+ Anyone who codes with an AI assistant and is tired of re-explaining the same rules, re-fixing the same breakage, and re-teaching the same project every session. It was built by a student vibe-coder for daily use across eight different AI CLIs — and it works just as well if you only use one.
45
47
 
46
- ```
47
- harness.config.json ← your master spec (ONE file)
48
- │ validate() ← quality checks + secret scanning
49
- ▼
50
- lib/adapters/*.js ← adapters: opencode, claude, gemini, cline,
51
- freebuff, copilot, antigravity
52
- │ renderInstructions()
53
- ▼
54
- .opencode/instructions.md ← OpenCode
55
- CLAUDE.md ← Claude Code
56
- GEMINI.md ← Gemini CLI
57
- .clinerules ← Cline
58
- .agents/skills/<skill>/SKILL.md ← Freebuff, Antigravity (project skills)
59
- .github/skills/<skill>/SKILL.md ← GitHub Copilot CLI (project skills)
60
- ```
48
+ ## Requirements
61
49
 
62
- Change the rules in **one** place (`harness.config.json`), and `sync` propagates them to every runtime.
50
+ - **Node.js 18 or newer.** Check yours with `node --version`. No other dependencies — the harness has zero npm dependencies.
51
+ - **Any OS:** Windows, macOS, or Linux.
52
+ - **No account, no API key, no sign-up.** Everything runs locally on your machine.
63
53
 
64
- ## Quickstart
54
+ ## Installation
65
55
 
66
- You can use reviewer-harness in two ways: **Modular Mode** (zero-install: add individual skills to any project, no setup) or **Full Harness Mode** (one master config synced across all 7 runtimes).
56
+ Pick one method. All six install the same tool; the first three need nothing but Node.js.
67
57
 
68
- ### 1. Modular Skills (zero-install via npx)
58
+ ### Method A — npx (zero-install, recommended)
69
59
 
70
- Copy a single skill straight into your current project — no install, no config needed. The skill lands in `./skills/` as a playbook your AI can follow:
60
+ No install at all. Run the harness straight from the npm registry, one command at a time:
71
61
 
72
62
  ```bash
73
- # Browse the bundled skills first
74
- npx reviewer-harness skills list
75
-
76
- # Add individual skills to this project
77
- npx reviewer-harness skills add safe-editing
78
- npx reviewer-harness skills add no-hallucination
63
+ npx reviewer-harness status
79
64
  ```
80
65
 
81
- > Prefer a global CLI? Install once with `npm install -g reviewer-harness` and run `reviewer-harness skills add <name>` anywhere.
66
+ The first run downloads the package (a few seconds); later runs reuse the cache. Use this method if you just want to try it, or if you use the harness occasionally.
82
67
 
83
- ### 2. Full Harness Synchronization (7 runtimes)
68
+ ### Method B — pnpm dlx (zero-install)
84
69
 
85
- `init` creates your master config, `validate` checks it (including secret scanning), and `sync` generates the native instruction file for every runtime you enable: `.opencode/instructions.md`, `CLAUDE.md`, `GEMINI.md`, and `.clinerules` — plus Agent Skills bundles (`.agents/skills/<skill>/SKILL.md` for Freebuff and Antigravity, `.github/skills/<skill>/SKILL.md` for GitHub Copilot CLI), so your skills follow you even when you switch CLIs.
70
+ The same idea, for pnpm users:
86
71
 
87
72
  ```bash
88
- # Using npx (zero-install, recommended)
89
- npx reviewer-harness init
90
- npx reviewer-harness sync --dry-run # preview: writes nothing
91
- npx reviewer-harness sync # writes, with .bak backups
73
+ pnpm dlx reviewer-harness status
74
+ ```
75
+
76
+ ### Method C — Install globally (recommended for daily use)
92
77
 
93
- # Using pnpm (zero-install)
94
- pnpm dlx reviewer-harness init
78
+ Install once, then run `reviewer-harness` anywhere, in any project:
95
79
 
96
- # Or install globally
80
+ ```bash
97
81
  npm install -g reviewer-harness
98
- reviewer-harness init
82
+ reviewer-harness status
83
+ ```
84
+
85
+ To update to the newest version later, run the same install command again:
86
+
87
+ ```bash
88
+ npm install -g reviewer-harness@latest
89
+ ```
90
+
91
+ > **Seeing an old version after updating?** `npx` can serve a cached copy. Run `npx --yes reviewer-harness@latest status` once to refresh the cache, or use the global install above.
92
+
93
+ ### Method D — Direct git clone (source checkout)
99
94
 
100
- # Direct git clone
95
+ Clone the repo and run the CLI from source — useful if you want to read or hack on the code:
96
+
97
+ ```bash
101
98
  git clone https://github.com/xcell321/reviewer-harness.git
102
- cd reviewer-harness && node bin/cli.js init --target ../my-project
99
+ cd reviewer-harness
100
+ node bin/cli.js status
103
101
  ```
104
102
 
105
- ### 3. Standalone one-liner installers
103
+ From a source checkout, every command in this README works as `node bin/cli.js <command>` instead of `reviewer-harness <command>`.
104
+
105
+ ### Method E — Standalone one-liner installers
106
+
107
+ A single command that installs the harness for you — no npm needed beyond Node.js:
106
108
 
107
109
  ```bash
108
110
  # Linux / macOS
@@ -112,9 +114,9 @@ curl -fsSL https://raw.githubusercontent.com/xcell321/reviewer-harness/main/bin/
112
114
  irm https://raw.githubusercontent.com/xcell321/reviewer-harness/main/bin/install.ps1 | iex
113
115
  ```
114
116
 
115
- ### 4. Running via Docker (zero local Node.js required)
117
+ ### Method F — Docker (zero local Node.js required)
116
118
 
117
- For zero-dependency execution without installing Node.js on your machine:
119
+ Run the harness without installing Node.js on your machine at all:
118
120
 
119
121
  ```bash
120
122
  git clone https://github.com/xcell321/reviewer-harness.git
@@ -126,100 +128,214 @@ docker compose run --rm reviewer-harness init
126
128
  docker compose run --rm reviewer-harness sync
127
129
  ```
128
130
 
129
- ## Sandboxing and security notice
131
+ ### Verify your installation
130
132
 
131
- reviewer-harness executes locally and is fully transparent:
133
+ After any method, run this — you should see the harness name, version, and your runtimes:
132
134
 
133
- - **Zero telemetry, zero network.** The tool reads and writes files in your project only. It sends no code or prompts to external servers, and it never needs an API key.
134
- - **Non-destructive backups.** Before modifying any existing instruction file, sync creates a `.bak` copy; files that would not change are skipped.
135
- - **Inspect before applying.** Run `sync --dry-run` to see exactly what would change — it writes nothing.
136
- - **Secrets are blocked, not leaked.** `validate` (and sync itself) scans the config for API keys and tokens and refuses to sync if one is found.
137
- - **Prefer a hard sandbox?** Run it in the Docker container above.
135
+ ```bash
136
+ reviewer-harness status
137
+ ```
138
138
 
139
- ## The Sync Engine (safe by design)
139
+ Expected output (version number varies):
140
140
 
141
- Guardrails that run before any file is written:
141
+ ```
142
+ Harness : reviewer-harness v1.14.0
143
+ Target : /path/to/your/project
144
+ Runtimes:
145
+ - opencode → .opencode/instructions.md
146
+ - claude → CLAUDE.md
147
+ - gemini → GEMINI.md
148
+ - cline → .clinerules
149
+ - freebuff → .agents/skills/<skill>/SKILL.md
150
+ - copilot → .github/skills/<skill>/SKILL.md
151
+ - antigravity → .agents/skills/<skill>/SKILL.md
152
+ - qoder → .qoder/skills/<skill>/SKILL.md
153
+ Skills : safe-editing, no-hallucination, ...
154
+ ```
142
155
 
143
- 1. **VALIDATE GATE** — if the spec is broken or contains a secret, sync refuses to run
144
- 2. **DRY-RUN** — `sync --dry-run`: preview only, writes nothing
145
- 3. **BACKUP** — before overwriting an existing file, write a `.bak` copy first
146
- 4. **IDEMPOTENT** — if nothing changed, touch nothing (safe to run repeatedly)
156
+ If you see `Config file not found`, you are in a folder without a harness config yet — run `init` (next section).
147
157
 
148
- ## Validate + Secret Scanning
158
+ ## Quick start — your first project in 5 minutes
149
159
 
150
- `validate` inspects the config before it becomes instructions:
160
+ This is the full flow, start to finish. Run the commands inside your project folder.
151
161
 
152
- - No empty rules, no duplicates
153
- - Secret scanning — API keys and tokens must never be synced (they would leak into Git!)
154
- - `sync` itself refuses to proceed when validation reports errors
162
+ **Step 1 — Create the master config.** One time per project:
155
163
 
156
- ## This repo governs itself
164
+ ```bash
165
+ reviewer-harness init
166
+ ```
157
167
 
158
- reviewer-harness eats its own cooking: the instruction files at this repo's root — `.opencode/instructions.md`, `CLAUDE.md`, `GEMINI.md`, `.clinerules` — plus the agents and commands in `.opencode/` and `.claude/` and the skill bundles in `.agents/skills/` and `.github/skills/` are **generated by reviewer-harness itself** from its own `harness.config.json`. Open this repo in any AI coding tool and the tool follows the harness's own rules while working on the harness. To refresh them after editing the config, just run `node bin/cli.js sync` here.
168
+ Expected output:
159
169
 
160
- ## Local Memory (graph-style, Obsidian-ready)
170
+ ```
171
+ Config created: /path/to/your/project/harness.config.json
172
+ ```
161
173
 
162
- AI models have no memory — every session, they forget your project. The harness keeps a `memory/` folder (inspired by Graphify's knowledge graph and Obsidian's vault, but lightweight and fully local):
174
+ This creates `harness.config.json` — the one file that holds your rules, your problem statement, and your enabled skills. Open it and edit the `rules` and `problem` fields to describe your project. (Running `init` again never overwrites an existing config.)
175
+
176
+ **Step 2 — Check the config.** Before anything gets written, validate it:
163
177
 
178
+ ```bash
179
+ reviewer-harness validate
164
180
  ```
165
- memory/
166
- project.md — notes (plain markdown, Obsidian-style)
167
- decisions.md — [[wiki links]] connect the notes
168
- INDEX.md — generated: the AI reads this first
169
- graph.json — generated: nodes = notes, edges = links
181
+
182
+ Expected output when everything is fine:
183
+
184
+ ```
185
+ ✓ Config is clean — no problems, no secrets.
170
186
  ```
171
187
 
172
- One of the rules orders the AI to read the memory first, and to write what it learns as a note with [[links]]. `sync` also refreshes the index. Open `memory/` in Obsidian to see the graph view.
188
+ `validate` checks for empty or duplicate rules and scans the config for leaked API keys and tokens — secrets must never be synced into instruction files (they would leak into Git).
189
+
190
+ **Step 3 — Add the skills you want.** Pick from the 22 bundled skills (full list below):
191
+
192
+ ```bash
193
+ reviewer-harness skills add safe-editing
194
+ reviewer-harness skills add no-hallucination
195
+ reviewer-harness skills add debug-first
196
+ ```
197
+
198
+ Each `skills add` copies the skill into your project and enables it in the config. See what is available first with `reviewer-harness skills list`.
199
+
200
+ **Step 4 — Preview the sync.** See exactly what would change, without writing anything:
201
+
202
+ ```bash
203
+ reviewer-harness sync --dry-run
204
+ ```
205
+
206
+ **Step 5 — Sync.** Write the instruction files for every runtime:
207
+
208
+ ```bash
209
+ reviewer-harness sync
210
+ ```
211
+
212
+ Before overwriting any existing instruction file, sync saves a `.bak` backup copy. Files that would not change are left untouched — running sync twice in a row writes nothing the second time.
213
+
214
+ **Step 6 — Open your AI tool.** That is it. Open the project in Claude Code, OpenCode, Gemini CLI, Cline, or any of the other runtimes, and the AI reads your rules, your skills, and your problem statement before it writes a single line.
215
+
216
+ **Step 7 — Repeat when rules change.** Edit `harness.config.json`, then run `validate` and `sync` again. One file changes, every runtime follows.
217
+
218
+ ## How to use
219
+
220
+ ### Two ways to use it
173
221
 
174
- ## Skills
222
+ **Modular Mode — one skill, zero setup.** Copy a single skill straight into any project, no config needed. The skill lands in `./skills/` as a playbook your AI can follow:
175
223
 
176
- Reusable playbooks, enabled per project:
224
+ ```bash
225
+ # Browse the bundled skills first
226
+ npx reviewer-harness skills list
177
227
 
178
- - `skills list` — see the bundled skills
179
- - `skills add <name>` — install into the project and enable it in the config
180
- - `skills remove <name>` — disable it
228
+ # Add individual skills to this project
229
+ npx reviewer-harness skills add safe-editing
230
+ npx reviewer-harness skills add no-hallucination
231
+ ```
232
+
233
+ **Full Harness Mode — one config, every runtime.** `init` creates your master config, `validate` checks it, and `sync` generates the native instruction file for every runtime you enable. This is the mode the Quick start above walks through, and the mode this README documents in detail.
234
+
235
+ ### Skills — reusable playbooks
181
236
 
182
- Bundled: `safe-editing`, `no-hallucination`, `debug-first`, `explain-bisaya`, `clone`, `rea`. Enabled skills render below the rules in every instruction file — and sync also generates a **slash command** for each one (`.opencode/commands/<name>.md` and `.claude/commands/<name>.md`), so every enabled skill appears in the `/` menu of OpenCode and Claude, ready to invoke on a specific task: `/safe-editing`, `/no-hallucination`, and so on.
237
+ A skill is a playbook: a short, checkable set of rules for one job (safe editing, API security, UI taste, debugging, and so on), distilled from real, reputable sources — not generic advice. Every rule cites its source.
183
238
 
184
- **Every project, instantly:** want the skills in the `/` menu of *every* project, with no per-project setup? Run `reviewer-harness global` once — it installs all bundled skills as slash commands into the global OpenCode (`~/.config/opencode/commands`) and Claude (`~/.claude/commands`) folders. From then on, they are in the `/` menu of any project you open. (Project rules still come from `sync` inside a project.)
239
+ ```bash
240
+ reviewer-harness skills list # see all 22 bundled skills (+ which are enabled)
241
+ reviewer-harness skills add <name> # install into the project and enable it in the config
242
+ reviewer-harness skills remove <name> # disable it in the config and remove it
243
+ ```
244
+
245
+ All 22 bundled skills (v1.14.0):
246
+
247
+ | Skill | What it does |
248
+ |---|---|
249
+ | `safe-editing` | Surgical editing — the smallest possible diff, no collateral damage. |
250
+ | `no-hallucination` | Make sure every library, function, and API actually exists before using it. |
251
+ | `debug-first` | Root-cause debugging — reproduce first, fix the cause, not the symptom. |
252
+ | `explain-bisaya` | After each task, explain the changes in simple Bisaya (Cebuano). |
253
+ | `clone` | Fully clone a website's design — layout, components, animations, borders — while replacing all text and assets with your own. |
254
+ | `rea` | Reverse-engineer a shipped app, binary, or website with REA: inspect it without source code, get evidence for how a feature works, and rebuild it as your own code. |
255
+ | `api-security` | 14 API security rules — apply to every backend endpoint you build or review. |
256
+ | `ux-edge-states` | 10 UX states beyond the happy path — empty, loading, error, offline, success. |
257
+ | `owasp-top10` | OWASP Top 10 web security risks — the industry standard check before shipping. |
258
+ | `backend-performance` | 10 backend performance rules from nodebestpractices and system-design-primer. |
259
+ | `devops-basics` | 12 DevOps rules from nodebestpractices — Docker, graceful shutdown, health checks, logging. |
260
+ | `motion-design` | Animation principles from GSAP (GreenSock) — easing, sequencing, stagger, performance. |
261
+ | `frontend-performance` | Frontend performance rules from the Front-End Checklist — animations, resource hints, budgets, lazy loading. |
262
+ | `system-design` | 68 system design rules from system-design-primer — CAP tradeoffs, load balancing, scaling. |
263
+ | `nodejs-quality` | 62 Node.js quality rules from nodebestpractices — errors, structure, testing, production, security. |
264
+ | `audit-team` | Run an 8-agent parallel audit — 5 skill specialists plus 3 area agents — report-only, no edits. |
265
+ | `ub-mode` | Uncle Bob mode — Clean Code discipline from Robert C. Martin: TDD first, CRAP < 10. |
266
+ | `design-taste-frontend` | Anti-slop design taste from Leonxlnx/taste-skill — layout, palettes, type, heroes, copy ban lists. |
267
+ | `ui-ux-pro-max` | Full UI/UX audit from nextlevelbuilder/ui-ux-pro-max-skill — 224 checkable guidelines across 10 categories. |
268
+ | `vengeance-ui` | Modern animated React components from VengeanceUI — 79 copy-paste components across 9 families. |
269
+ | `brainstorming` | Find out what you actually want — and why — before anything gets built. Design doc first, approval first. |
270
+ | `writing-plans` | Turn an approved spec into a bite-sized TDD implementation plan. |
271
+
272
+ Enabled skills render below the rules in every instruction file — and sync also generates a **slash command** for each one (`.opencode/commands/<name>.md` and `.claude/commands/<name>.md`), so every enabled skill appears in the `/` menu of OpenCode and Claude, ready to invoke on a specific task: `/safe-editing`, `/no-hallucination`, and so on.
185
273
 
186
274
  **A built-in pairing:** the `/safe-editing` command always carries the `no-hallucination` playbook inside it as a companion section — one call, both disciplines, so the AI that edits can never invent the code it edits with.
187
275
 
188
- ## Sub-agents and Slash Commands
276
+ **Every project, instantly:** want the skills in the `/` menu of *every* project, with no per-project setup? Run `reviewer-harness global` once — it installs all bundled skills as slash commands into the global OpenCode (`~/.config/opencode/commands`) and Claude (`~/.claude/commands`) folders, plus skill bundles for Freebuff, Copilot CLI, Antigravity, and Qoder. From then on, they are in the `/` menu of any project you open. (Project rules still come from `sync` inside a project.) Add `--dry-run` first to preview what it would install.
189
277
 
190
- One master definition in the harness, generated into each runtime's format:
278
+ ### The sync engine — what happens when you run `sync`
191
279
 
192
- - `agents add planner|reviewer|debugger` → `.opencode/agents/` + `.claude/agents/`
193
- - **planner** (Tigplano) — plans before coding
194
- - **reviewer** (Bantay) — hunts breakage and hallucinated code in diffs
195
- - **debugger** (Tig-ayo) — root-cause debugging, never symptom-patching
196
- - `commands add review|explain` → `.opencode/commands/` + `.claude/commands/` (type `/review` or `/explain` in your runtime)
280
+ ```
281
+ harness.config.json ← your master spec (ONE file)
282
+ │ validate() ← quality checks + secret scanning
283
+ ▼
284
+ lib/adapters/*.js ← adapters: opencode, claude, gemini, cline,
285
+ freebuff, copilot, antigravity, qoder
286
+ │ renderInstructions()
287
+ ▼
288
+ .opencode/instructions.md ← OpenCode
289
+ CLAUDE.md ← Claude Code
290
+ GEMINI.md ← Gemini CLI
291
+ .clinerules ← Cline
292
+ .agents/skills/<skill>/SKILL.md ← Freebuff, Antigravity (project skills)
293
+ .github/skills/<skill>/SKILL.md ← GitHub Copilot CLI (project skills)
294
+ .qoder/skills/<skill>/SKILL.md ← Qoder (project skills)
295
+ .opencode/commands/<name>.md + .claude/commands/<name>.md ← slash command per skill
296
+ ```
197
297
 
198
- ## Command reference
298
+ Change the rules in **one** place (`harness.config.json`), and `sync` propagates them to every runtime.
199
299
 
200
- Requires Node.js 18+ (no dependencies). Run these inside your project — every command works on the current directory unless you add `--target <dir>`.
300
+ Four guardrails run before any file is written:
301
+
302
+ 1. **VALIDATE GATE** — if the spec is broken or contains a secret, sync refuses to run.
303
+ 2. **DRY-RUN** — `sync --dry-run`: preview only, writes nothing.
304
+ 3. **BACKUP** — before overwriting an existing file, sync writes a `.bak` copy first.
305
+ 4. **IDEMPOTENT** — if nothing changed, sync touches nothing. Safe to run repeatedly.
306
+
307
+ ### Validate + secret scanning
201
308
 
202
- **Start & everyday**
309
+ `validate` inspects the config before it becomes instructions:
310
+
311
+ - No empty rules, no duplicates.
312
+ - Secret scanning — API keys and tokens must never be synced (they would leak into Git).
313
+ - `sync` itself refuses to proceed when validation reports errors.
203
314
 
204
315
  ```bash
205
- reviewer-harness init # one-time: create the master config
206
316
  reviewer-harness validate # check the config (quality + secret scan)
207
- reviewer-harness sync --dry-run # preview the changes, writes nothing
208
- reviewer-harness sync # apply the rules to every runtime
209
- reviewer-harness status # show the config + target files
210
317
  ```
211
318
 
212
- **Skills, agents, commands**
319
+ ### Sub-agents and slash commands
320
+
321
+ One master definition in the harness, generated into each runtime's format:
213
322
 
214
323
  ```bash
215
- reviewer-harness skills list
216
- reviewer-harness skills add safe-editing
217
- reviewer-harness skills remove safe-editing
324
+ reviewer-harness agents list
218
325
  reviewer-harness agents add reviewer
326
+ reviewer-harness commands list
219
327
  reviewer-harness commands add review
220
328
  ```
221
329
 
222
- **Local memory**
330
+ - `agents add planner|reviewer|debugger` → `.opencode/agents/` + `.claude/agents/`
331
+ - **planner** (Tigplano) — plans before coding
332
+ - **reviewer** (Bantay) — hunts breakage and hallucinated code in diffs
333
+ - **debugger** (Tig-ayo) — root-cause debugging, never symptom-patching
334
+ - `commands add review|explain` → `.opencode/commands/` + `.claude/commands/` (type `/review` or `/explain` in your runtime)
335
+
336
+ ### Local memory — the AI remembers your project
337
+
338
+ AI models have no memory — every session, they forget your project. The harness keeps a `memory/` folder (inspired by Graphify's knowledge graph and Obsidian's vault, but lightweight and fully local):
223
339
 
224
340
  ```bash
225
341
  reviewer-harness memory init # start the memory/ vault
@@ -227,22 +343,105 @@ reviewer-harness memory list # list notes + their links
227
343
  reviewer-harness memory index # rebuild INDEX.md + graph.json
228
344
  ```
229
345
 
346
+ What it creates:
347
+
348
+ ```
349
+ memory/
350
+ project.md — notes (plain markdown, Obsidian-style)
351
+ decisions.md — [[wiki links]] connect the notes
352
+ INDEX.md — generated: the AI reads this first
353
+ graph.json — generated: nodes = notes, edges = links
354
+ ```
355
+
356
+ One of the rules orders the AI to read the memory first, and to write what it learns as a note with [[links]]. `sync` also refreshes the index. Open `memory/` in Obsidian to see the graph view.
357
+
358
+ ### This repo governs itself
359
+
360
+ reviewer-harness eats its own cooking: the instruction files at this repo's root — `.opencode/instructions.md`, `CLAUDE.md`, `GEMINI.md`, `.clinerules` — plus the agents and commands in `.opencode/` and `.claude/` and the skill bundles in `.agents/skills/`, `.github/skills/`, and `.qoder/skills/` are **generated by reviewer-harness itself** from its own `harness.config.json`. Open this repo in any AI coding tool and the tool follows the harness's own rules while working on the harness. To refresh them after editing the config, just run `node bin/cli.js sync` here.
361
+
362
+ ## Sandboxing and security notice
363
+
364
+ reviewer-harness executes locally and is fully transparent:
365
+
366
+ - **Zero telemetry, zero network.** The tool reads and writes files in your project only. It sends no code or prompts to external servers, and it never needs an API key.
367
+ - **Non-destructive backups.** Before modifying any existing instruction file, sync creates a `.bak` copy; files that would not change are skipped.
368
+ - **Inspect before applying.** Run `sync --dry-run` to see exactly what would change — it writes nothing.
369
+ - **Secrets are blocked, not leaked.** `validate` (and sync itself) scans the config for API keys and tokens and refuses to sync if one is found.
370
+ - **Prefer a hard sandbox?** Run it in the Docker container (Installation, Method F).
371
+
372
+ ## Command reference
373
+
374
+ Requires Node.js 18+ (no dependencies). Run these inside your project — every command works on the current directory unless you add `--target <dir>`.
375
+
376
+ ### Start & everyday
377
+
378
+ | Command | What it does |
379
+ |---|---|
380
+ | `reviewer-harness init` | One-time: create `harness.config.json` in the project (never overwrites an existing one) |
381
+ | `reviewer-harness validate` | Check the config: rule quality + secret scanning |
382
+ | `reviewer-harness sync --dry-run` | Preview the sync: shows what would change, writes nothing |
383
+ | `reviewer-harness sync` | Apply the rules to every enabled runtime (with `.bak` backups) |
384
+ | `reviewer-harness status` | Show the config: name, version, runtimes, target files, enabled skills |
385
+
386
+ ### Skills, agents, commands
387
+
388
+ | Command | What it does |
389
+ |---|---|
390
+ | `reviewer-harness skills list` | List all 22 bundled skills (+ which are enabled) |
391
+ | `reviewer-harness skills add <name>` | Install a skill into the project and enable it in the config |
392
+ | `reviewer-harness skills remove <name>` | Disable a skill and remove it |
393
+ | `reviewer-harness agents list` | List the bundled sub-agents |
394
+ | `reviewer-harness agents add <name>` | Install a sub-agent (OpenCode + Claude) |
395
+ | `reviewer-harness commands list` | List the bundled slash commands |
396
+ | `reviewer-harness commands add <name>` | Install a slash command (OpenCode + Claude) |
397
+ | `reviewer-harness global [--dry-run]` | Install EVERY bundled skill for ALL projects (global `/` menus + skill bundles) |
398
+
399
+ ### Local memory
400
+
401
+ | Command | What it does |
402
+ |---|---|
403
+ | `reviewer-harness memory init` | Start the local memory vault (`memory/` folder) |
404
+ | `reviewer-harness memory list` | List memory notes + their links |
405
+ | `reviewer-harness memory index` | Rebuild `INDEX.md` + `graph.json` |
406
+
230
407
  Running from a source checkout instead? The same commands work as `node bin/cli.js <command>`.
231
408
 
232
409
  ## File map
233
410
 
234
- - `bin/cli.js` — commands: `status`, `sync`, `init`, `validate`, `memory`, `skills`, `agents`, `commands`
411
+ - `bin/cli.js` — commands: `status`, `sync`, `init`, `validate`, `memory`, `skills`, `agents`, `commands`, `global`
235
412
  - `bin/install.sh` / `bin/install.ps1` — one-liner installers (Linux/macOS, Windows)
236
413
  - `Dockerfile` / `docker-compose.yml` — run the harness with zero local Node.js
237
414
  - `lib/config.js` — loads and validates the structure of the master spec
238
415
  - `lib/validate.js` — rule quality checks + secret scanning
239
416
  - `lib/sync.js` — THE SYNC ENGINE: validate gate, dry-run, backup, idempotent writes
417
+ - `lib/frontmatter.js` — frontmatter parser (normalizes CRLF line endings, fixed in v1.14.0)
240
418
  - `lib/init.js` — creates the harness.config.json template in a new project
241
419
  - `lib/memory.js` — local memory: notes vault, graph builder, index generator
242
420
  - `lib/skills.js` — skills system: bundled store, install/enable, section rendering
243
421
  - `lib/agents.js` / `lib/commands.js` — one source → OpenCode + Claude formats
244
- - `lib/adapters/` — registry + one adapter per runtime (opencode, claude, gemini, cline, freebuff, copilot, antigravity)
422
+ - `lib/adapters/` — registry + one adapter per runtime (opencode, claude, gemini, cline, freebuff, copilot, antigravity, qoder)
245
423
  - `skills/` — bundled skills · `agents/` — bundled sub-agents · `commands/` — bundled slash commands
424
+ - `docs/superpowers/specs/` — design docs for releases and big changes
425
+
426
+ ## Troubleshooting
427
+
428
+ **`Error: Config file not found: .../harness.config.json`**
429
+ You are in a folder without a harness config. Run `reviewer-harness init` there first, or point at the right folder with `--target <dir>`.
430
+
431
+ **`Skill "X" is enabled in the config but has no file in skills/`**
432
+ The config enables a skill whose file is missing from the project's `skills/` folder. Fix it with `reviewer-harness skills add X` (re-installs the file), or remove it with `reviewer-harness skills remove X`.
433
+
434
+ **`validate` reports a secret / sync refuses to run**
435
+ A value in your config looks like an API key or token. Remove the secret from `harness.config.json` — secrets must never be synced into instruction files. Use your runtime's own secret storage instead.
436
+
437
+ **`status` shows an old version after updating**
438
+ Your shell or `npx` is serving a cached copy. Run `npx --yes reviewer-harness@latest status` once to refresh the cache, or reinstall globally with `npm install -g reviewer-harness@latest`.
439
+
440
+ **Windows line endings (CRLF)**
441
+ Skill files with Windows (`\r\n`) line endings used to lose their frontmatter on sync. Fixed in v1.14.0 — the parser normalizes line endings, so CRLF and LF files sync identically. No manual conversion needed anymore.
442
+
443
+ **Sync changed nothing, but I edited the config**
444
+ Check that you edited the config in the same folder you are syncing (`--target` defaults to the current directory), and that `validate` passes — sync refuses to run on a broken config.
246
445
 
247
446
  ## How it was built (the lessons)
248
447
 
@@ -253,6 +452,7 @@ Running from a source checkout instead? The same commands work as `node bin/cli.
253
452
  5. ✅ Sub-agents and slash commands — `agents add`, `commands add`
254
453
  6. ✅ Polish and publish — v1.0.0, LICENSE, publish-ready for GitHub/npx
255
454
  7. ✅ v1.1.0 — all-English repo, validate-and-report rule, self-governing repo, modular skills, one-liner installers, Docker
455
+ 8. ✅ v1.14.0 — the working peak: 22 skills (audit-team + ub-mode, design-taste-frontend, ui-ux-pro-max, vengeance-ui, brainstorming, writing-plans), Qoder as 8th runtime, system-design, nodejs-quality, all fix rounds verified WORKS, CRLF frontmatter fix (Windows sync without manual LF conversion)
256
456
 
257
457
  ## Contributing & Security
258
458
 
package/bin/cli.js CHANGED
@@ -45,7 +45,7 @@ Usage (run inside your project):
45
45
  reviewer-harness commands list List bundled slash commands
46
46
  reviewer-harness commands add <name> Install a slash command (OpenCode + Claude)
47
47
 
48
- reviewer-harness global [--dry-run] Install EVERY bundled skill for ALL projects (OpenCode + Claude "/" menus; Freebuff, Copilot CLI, Antigravity skill bundles)
48
+ reviewer-harness global [--dry-run] Install EVERY bundled skill for ALL projects (OpenCode + Claude "/" menus; Freebuff, Copilot CLI, Antigravity, Qoder skill bundles)
49
49
 
50
50
  reviewer-harness memory init Start the local memory (memory/ folder)
51
51
  reviewer-harness memory index Rebuild the memory INDEX.md + graph.json
@@ -232,6 +232,7 @@ function cmdGlobal() {
232
232
  { runtime: "Freebuff", dir: join(homedir(), ".agents", "skills"), bundle: true },
233
233
  { runtime: "Copilot CLI", dir: join(homedir(), ".copilot", "skills"), bundle: true },
234
234
  { runtime: "Antigravity", dir: join(homedir(), ".gemini", "config", "skills"), bundle: true },
235
+ { runtime: "Qoder", dir: join(homedir(), ".qoder", "skills"), bundle: true },
235
236
  ];
236
237
  if (dryRun) console.log("(dry-run: nothing was written)\n");
237
238
  for (const { runtime, dir, bundle } of targets) {
@@ -252,7 +253,7 @@ function cmdGlobal() {
252
253
  }
253
254
  console.log(
254
255
  `\nDone: ${skills.map((s) => "/" + s.name).join(", ")} are now available in EVERY project.` +
255
- `\n(OpenCode + Claude: "/" menu commands. Freebuff, Copilot CLI, Antigravity: Agent Skills bundles.)` +
256
+ `\n(OpenCode + Claude: "/" menu commands. Freebuff, Copilot CLI, Antigravity, Qoder: Agent Skills bundles.)` +
256
257
  `\n(Per-project rules still come from "sync" inside a project.)`
257
258
  );
258
259
  }
package/bin/install.sh CHANGED
File without changes
@@ -12,6 +12,7 @@ import * as cline from "./cline.js";
12
12
  import * as freebuff from "./freebuff.js";
13
13
  import * as copilot from "./copilot.js";
14
14
  import * as antigravity from "./antigravity.js";
15
+ import * as qoder from "./qoder.js";
15
16
 
16
17
  export const adapters = {
17
18
  opencode,
@@ -21,6 +22,7 @@ export const adapters = {
21
22
  freebuff,
22
23
  copilot,
23
24
  antigravity,
25
+ qoder,
24
26
  };
25
27
 
26
28
  export const supportedRuntimes = Object.keys(adapters);
@@ -0,0 +1,16 @@
1
+ // lib/adapters/qoder.js — ADAPTER for Qoder (Alibaba's agentic coding CLI/IDE).
2
+ //
3
+ // Qoder follows the Agent Skills open standard (agentskills.io):
4
+ // skills are folders containing a SKILL.md with `name` + `description`
5
+ // frontmatter. Personal skills live at `~/.qoder/skills/<name>/SKILL.md`;
6
+ // project skills live at `<project>/.qoder/skills/<name>/SKILL.md`.
7
+ // This adapter covers the project side (used by `sync`); the personal
8
+ // side is covered by the `global` command.
9
+ //
10
+ // Qoder has no single instruction file like CLAUDE.md, so this
11
+ // adapter is skills-only: it exports skillBundleDir() instead of
12
+ // targetFile()/renderInstructions().
13
+
14
+ export function skillBundleDir() {
15
+ return ".qoder/skills";
16
+ }