reviewer-harness 1.2.0 → 1.3.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
@@ -176,10 +176,12 @@ Reusable playbooks, enabled per project:
176
176
  - `skills add <name>` — install into the project and enable it in the config
177
177
  - `skills remove <name>` — disable it
178
178
 
179
- Bundled: `safe-editing`, `no-hallucination`, `debug-first`, `explain-bisaya`. 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.
179
+ Bundled: `safe-editing`, `no-hallucination`, `debug-first`, `explain-bisaya`, `clone`. 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.
180
180
 
181
181
  **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.)
182
182
 
183
+ **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.
184
+
183
185
  ## Sub-agents and Slash Commands
184
186
 
185
187
  One master definition in the harness, generated into each runtime's format:
package/bin/cli.js CHANGED
@@ -218,7 +218,7 @@ function cmdGlobal() {
218
218
  for (const { runtime, dir } of targets) {
219
219
  let written = 0, unchanged = 0, pending = 0;
220
220
  for (const skill of skills) {
221
- const outcome = writeSafe(join(dir, `${skill.name}.md`), skillCommandContent(skill), dryRun);
221
+ const outcome = writeSafe(join(dir, `${skill.name}.md`), skillCommandContent(skill, skills), dryRun);
222
222
  if (outcome.written) written++;
223
223
  else if (outcome.dryRun && outcome.changed) pending++;
224
224
  else unchanged++;
package/lib/skills.js CHANGED
@@ -147,9 +147,24 @@ export function loadSkillSections(targetDir, config) {
147
147
  // in the runtime's "/" menu (OpenCode and Claude list the files in
148
148
  // their commands folders). Invoking /<skill> hands the playbook to
149
149
  // the AI together with whatever the user types after it.
150
- export function skillCommandContent(skill) {
151
- return (
152
- `---\ndescription: ${skill.description}\n---\n\n` +
153
- `${skill.body}\n\nApply this playbook to the following: $ARGUMENTS\n`
154
- );
150
+ // Companion pairings: when one of these skills is rendered as a slash
151
+ // command, the companion's playbook is embedded in the same file —
152
+ // so a single call always carries both disciplines. safe-editing
153
+ // pairs with no-hallucination: the AI that edits must never invent
154
+ // the code it edits with.
155
+ const COMPANIONS = { "safe-editing": ["no-hallucination"] };
156
+
157
+ export function skillCommandContent(skill, allSkills = []) {
158
+ let content =
159
+ `---\ndescription: ${skill.description}\n---\n\n` + `${skill.body}\n`;
160
+ for (const companionName of COMPANIONS[skill.name] ?? []) {
161
+ const companion = allSkills.find((s) => s.name === companionName);
162
+ if (companion) {
163
+ content +=
164
+ `\n---\n\n## Companion playbook: ${companion.name} ` +
165
+ `(always paired with ${skill.name})\n\n${companion.body}\n`;
166
+ }
167
+ }
168
+ content += `\nApply this playbook to the following: $ARGUMENTS\n`;
169
+ return content;
155
170
  }
package/lib/sync.js CHANGED
@@ -96,7 +96,7 @@ export function sync({ targetDir, dryRun = false }) {
96
96
  if (skills.length) {
97
97
  const files = [];
98
98
  for (const skill of skills) {
99
- const content = skillCommandContent(skill);
99
+ const content = skillCommandContent(skill, skills);
100
100
  for (const dir of [".opencode/commands", ".claude/commands"]) {
101
101
  const rel = `${dir}/${skill.name}.md`;
102
102
  files.push({ file: rel, ...writeSafe(join(targetDir, rel), content, dryRun) });
package/package.json CHANGED
@@ -23,7 +23,7 @@
23
23
  "url": "https://github.com/xcell321/reviewer-harness.git"
24
24
  },
25
25
  "type": "module",
26
- "version": "1.2.0",
26
+ "version": "1.3.0",
27
27
  "files": [
28
28
  "bin",
29
29
  "lib",
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: clone
3
+ description: Fully clone a website's design — layout, components, animations, borders — while replacing all text and assets with your own.
4
+ ---
5
+
6
+ ## Skill: clone
7
+
8
+ When to use: the user asks to clone a website or design, and gives a URL or reference to copy.
9
+
10
+ - Clone the DESIGN, replace the CONTENT. That is the whole rule: everything visual may be reproduced, everything owned must be replaced.
11
+ - First, inventory the target: sections, components, layout grid, colors, fonts, spacing, borders, and every animation (type, duration, easing, trigger). Write the inventory down before writing any code.
12
+ - Rebuild from the inventory with original code: reproduce the look and motion, never paste the target's source code.
13
+ - Replace every owned thing: all text (headings, skills, descriptions, projects), all image files, logos, and brand names become the user's own content or placeholders. Image placement and sizes may be copied; image files may not.
14
+ - Front-end only: a clone reproduces the look, never the backend — no login, database, or dynamic data.
15
+ - If the target is the user's own site, their own assets may be reused.
16
+ - Afterwards, validate: compare screenshots side by side, check responsive breakpoints, and audit that no third-party image, text, or brand remains. Report what was cloned and what was replaced.