reviewer-harness 1.8.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 +310 -110
- package/bin/cli.js +3 -2
- package/bin/install.sh +0 -0
- package/lib/adapters/index.js +2 -0
- package/lib/adapters/qoder.js +16 -0
- package/lib/frontmatter.js +4 -0
- package/lib/init.js +1 -1
- package/package.json +4 -3
- package/skills/api-security.md +10 -2
- package/skills/audit-team.md +93 -0
- package/skills/brainstorming.md +146 -0
- package/skills/design-taste-frontend.md +116 -0
- package/skills/devops-basics.md +9 -1
- package/skills/explain-bisaya.md +16 -0
- package/skills/frontend-performance.md +171 -0
- package/skills/motion-design.md +76 -0
- package/skills/no-hallucination.md +5 -0
- package/skills/nodejs-quality.md +231 -0
- package/skills/rea.md +1 -0
- package/skills/system-design.md +250 -0
- package/skills/ub-mode.md +112 -0
- package/skills/ui-ux-pro-max.md +85 -0
- package/skills/vengeance-ui.md +131 -0
- package/skills/writing-plans.md +108 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# reviewer-harness
|
|
2
2
|
|
|
3
3
|
```
|
|
4
|
-
|
|
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
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
19
|
-

|
|
20
20
|

|
|
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
|
|
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
|
-
##
|
|
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
|
|
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
|
|
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
|
-
|
|
38
|
+
### What it is — and what it is not
|
|
39
39
|
|
|
40
|
-
|
|
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
|
-
|
|
44
|
+
### Who it is for
|
|
43
45
|
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
54
|
+
## Installation
|
|
65
55
|
|
|
66
|
-
|
|
56
|
+
Pick one method. All six install the same tool; the first three need nothing but Node.js.
|
|
67
57
|
|
|
68
|
-
###
|
|
58
|
+
### Method A — npx (zero-install, recommended)
|
|
69
59
|
|
|
70
|
-
|
|
60
|
+
No install at all. Run the harness straight from the npm registry, one command at a time:
|
|
71
61
|
|
|
72
62
|
```bash
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
68
|
+
### Method B — pnpm dlx (zero-install)
|
|
84
69
|
|
|
85
|
-
|
|
70
|
+
The same idea, for pnpm users:
|
|
86
71
|
|
|
87
72
|
```bash
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
73
|
+
pnpm dlx reviewer-harness status
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Method C — Install globally (recommended for daily use)
|
|
92
77
|
|
|
93
|
-
|
|
94
|
-
pnpm dlx reviewer-harness init
|
|
78
|
+
Install once, then run `reviewer-harness` anywhere, in any project:
|
|
95
79
|
|
|
96
|
-
|
|
80
|
+
```bash
|
|
97
81
|
npm install -g reviewer-harness
|
|
98
|
-
reviewer-harness
|
|
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
|
-
|
|
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
|
|
99
|
+
cd reviewer-harness
|
|
100
|
+
node bin/cli.js status
|
|
103
101
|
```
|
|
104
102
|
|
|
105
|
-
|
|
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
|
-
###
|
|
117
|
+
### Method F — Docker (zero local Node.js required)
|
|
116
118
|
|
|
117
|
-
|
|
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
|
-
|
|
131
|
+
### Verify your installation
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
After any method, run this — you should see the harness name, version, and your runtimes:
|
|
132
134
|
|
|
133
|
-
|
|
134
|
-
-
|
|
135
|
-
|
|
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
|
-
|
|
139
|
+
Expected output (version number varies):
|
|
140
140
|
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
158
|
+
## Quick start — your first project in 5 minutes
|
|
149
159
|
|
|
150
|
-
|
|
160
|
+
This is the full flow, start to finish. Run the commands inside your project folder.
|
|
151
161
|
|
|
152
|
-
|
|
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
|
-
|
|
164
|
+
```bash
|
|
165
|
+
reviewer-harness init
|
|
166
|
+
```
|
|
157
167
|
|
|
158
|
-
|
|
168
|
+
Expected output:
|
|
159
169
|
|
|
160
|
-
|
|
170
|
+
```
|
|
171
|
+
Config created: /path/to/your/project/harness.config.json
|
|
172
|
+
```
|
|
161
173
|
|
|
162
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
181
|
+
|
|
182
|
+
Expected output when everything is fine:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
✓ Config is clean — no problems, no secrets.
|
|
170
186
|
```
|
|
171
187
|
|
|
172
|
-
|
|
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
|
-
|
|
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
|
-
|
|
224
|
+
```bash
|
|
225
|
+
# Browse the bundled skills first
|
|
226
|
+
npx reviewer-harness skills list
|
|
177
227
|
|
|
178
|
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
278
|
+
### The sync engine — what happens when you run `sync`
|
|
191
279
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
298
|
+
Change the rules in **one** place (`harness.config.json`), and `sync` propagates them to every runtime.
|
|
199
299
|
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
package/lib/adapters/index.js
CHANGED
|
@@ -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
|
+
}
|