@rune-kit/rune 2.23.0 → 2.25.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 +43 -16
- package/compiler/__tests__/adapter-model-mapping.test.js +6 -6
- package/compiler/__tests__/adapters.test.js +13 -0
- package/compiler/adapters/codex.js +29 -4
- package/compiler/adapters/windsurf.js +14 -7
- package/extensions/ai-ml/skills/llm-architect.md +3 -3
- package/package.json +1 -1
- package/skills/adversary/SKILL.md +40 -2
- package/skills/adversary/references/oracle-mode.md +3 -2
- package/skills/ba/SKILL.md +6 -1
- package/skills/brainstorm/SKILL.md +22 -1
- package/skills/brainstorm/references/design-it-twice.md +5 -2
- package/skills/cook/SKILL.md +19 -1
- package/skills/council/SKILL.md +222 -0
- package/skills/council/references/dispatch-protocol.md +77 -0
- package/skills/marketing/SKILL.md +26 -1
- package/skills/mcp-builder/SKILL.md +2 -2
- package/skills/plan/SKILL.md +13 -2
- package/skills/problem-solver/SKILL.md +21 -2
- package/skills/review/SKILL.md +52 -3
- package/skills/session-bridge/SKILL.md +2 -2
- package/skills/video-creator/SKILL.md +74 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<strong>Less skills. Deeper connections.</strong><br>
|
|
7
7
|
A lean, interconnected skill ecosystem for AI coding assistants.<br>
|
|
8
|
-
|
|
8
|
+
66 skills · 206 connections · 45 signals · 13 platforms · MIT
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
Most skill ecosystems are either **too many isolated skills** (540+ that don't talk to each other) or **rigid pipelines** (A → B → C, if B fails everything stops).
|
|
25
25
|
|
|
26
|
-
Rune is a **mesh** —
|
|
26
|
+
Rune is a **mesh** — 66 skills with 206 connections + 45 signals across a 5-layer architecture. Skills call each other bidirectionally, forming resilient workflows that adapt when things go wrong.
|
|
27
27
|
|
|
28
28
|
```
|
|
29
29
|
Pipeline: A → B → C → D (B fails = stuck)
|
|
@@ -83,7 +83,33 @@ _Methodology: Claude Code CLI headless mode (`claude -p --output-format json`),
|
|
|
83
83
|
|
|
84
84
|
---
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## Level Up: Rune Pro
|
|
87
|
+
|
|
88
|
+
<p align="center">
|
|
89
|
+
<a href="https://github.com/rune-kit/rune-pro"><img src="assets/pro-upgrade.svg" alt="Rune Pro — Autopilot + Context Intelligence · $49 lifetime" width="100%"></a>
|
|
90
|
+
</p>
|
|
91
|
+
|
|
92
|
+
Free gives Claude discipline. **Pro** gives it two things the free tier can't:
|
|
93
|
+
|
|
94
|
+
- **Autopilot** — approve a plan once and walk away. It executes each phase autonomously (self-reviews with zero-HIGH gates, regression-checks against baselines, commits per phase) and **resumes across sessions**. `cook` gets the job done; `autopilot` gets it done while you sleep.
|
|
95
|
+
- **Context Intelligence** — a live **context cockpit** in your statusline (real %, the active skill's mesh layer, cost, predictive "~4m until auto-compaction") that also makes Claude *itself* aware of the pressure, so it saves decisions + progress to `.rune/` **before** compact wipes the session. Zero data loss.
|
|
96
|
+
|
|
97
|
+
Plus **9 domain packs** (product, sales, data-science, support, growth, media, personal-brand, ecommerce, vietnam). **$49 lifetime, one-time — no subscription.**
|
|
98
|
+
|
|
99
|
+
<p align="center">
|
|
100
|
+
<a href="https://github.com/rune-kit/rune-pro"><img src="https://img.shields.io/badge/Unlock_Pro_%2449-lifetime-a855f7?style=for-the-badge" alt="Unlock Rune Pro"></a>
|
|
101
|
+
<a href="https://rune-kit.github.io/rune#pricing"><img src="https://img.shields.io/badge/See_Pricing-rune--kit.github.io-blue?style=for-the-badge" alt="Pricing"></a>
|
|
102
|
+
</p>
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## What's New (v2.25.0 — Council)
|
|
107
|
+
|
|
108
|
+
> **v2.25.0 (2026-07-11):** New **`council`** L3 primitive — genuinely decorrelated multi-perspective gathering. Detects installed AI CLIs, fans a question across distinct model families (external CLIs when present, subagents when not), gates off-topic/malformed voices, normalizes claims (anchor-first + shared-evidence arbiter fallback — prose similarity never counts), and arbitrates inline with an honest `NO_DECORRELATION` stamp when fewer than 2 real model families answered. Wired into 4 consumers: `adversary` (CRITICAL-tier plans), `review` (high-blast-radius diffs), `brainstorm` (Design-It-Twice candidate judgment), `problem-solver` (high-stakes conclusions) — every integration explicitly refuses to launder a same-family run as independent confirmation. **Live-dogfooded same day**: a real 3-voice self-test (external `grok` dispatch + 2 subagent fallbacks) independently converged on a real gap — "confirmed" `model_family` was CLI-brand identity, not verified backend identity, letting two CLIs redirected to the same backend (BYOK/proxy override) defeat the gate — fixed before shipping. **Pro**: `council-cockpit` (separate repo) adds a read-only live panel + cost-aware allocation + history-informed family weighting, PRE-council advisory only — Free never depends on Pro. Mesh now 66 skills / 208 connections / 45 signals.
|
|
109
|
+
|
|
110
|
+
### Previous (v2.24.0 — Market Refresh)
|
|
111
|
+
|
|
112
|
+
> **v2.24.0 (2026-07-11):** Model lineup + platform adapters refreshed to the mid-2026 landscape. Claude tiers across the mesh → **Opus 4.8 / Sonnet 5 / Haiku 4.5**; the **Codex** adapter → **GPT-5.6** `sol` / `terra` / `luna` (verified against codex-cli 0.144.1), with a suggested tier→`model_reasoning_effort` mapping in the generated `AGENTS.md`. **Fable 5** is positioned as an API-only frontier **oracle** target rather than a routing tier (opus stays the ceiling). **Windsurf → Devin Desktop** rebrand documented (emission kept on `.windsurf/`, which Devin still reads). New **goal-first advisory** in `plan`/`ba` to leverage native `/goal` + Managed Agents Outcomes. CI 1572/1572.
|
|
87
113
|
|
|
88
114
|
> **v2.23.0 (2026-07-04):** Seven platform adapters move to the **Agent Skills open standard** (dir-per-skill `SKILL.md`, discovered and lazy-loaded by each platform's native loader). The headline fix: **Codex** dropped `.codex/skills/` from its scan list, so compiled skills were only findable via the AGENTS.md pointer — agents kept "re-finding" the path mid-session. Codex now emits to **`.agents/skills/`** (scanned CWD → repo root). Same treatment across the fleet: **cursor** `.cursor/rules/*.mdc` → `.cursor/skills/` (Cursor 2.4+ Skills, on-demand instead of always-on), **windsurf** → `.windsurf/skills/` (Cascade Skills), **copilot** → `.github/skills/`, **qoder** → `.qoder/skills/`, and **gemini/qwen** drop their all-skills-always-on context bombs (GEMINI.md bundle, QWEN.md `@import` wall) for native `.gemini/skills/` / `.qwen/skills/` + slim pointer files — a big context-window win on those platforms. Runtime hooks intentionally stay on `.cursor/rules` / `.windsurf/rules` (always-on is correct for hook context). Also fixes a YAML double-escaping bug that corrupted compiled frontmatter for skills with quoted descriptions on 6 platforms, and a duplicate `scripts/` copy in dir-per-skill builds. If you previously built for Codex/Cursor/Windsurf/Copilot/Gemini/Qwen/Qoder: re-run `npx @rune-kit/rune build` and delete the old output dirs. CI 1571/1571.
|
|
89
115
|
|
|
@@ -138,7 +164,7 @@ _Methodology: Claude Code CLI headless mode (`claude -p --output-format json`),
|
|
|
138
164
|
- **`adversary` v0.2.0 — Mode: oracle** — when `agent.stuck` fires from `debug` (3 disproved hypotheses) or `fix` (2+ failed attempts), oracle-mode dispatches a stateless second-model pass with explicit "no prior context" framing. Bundle format is regex-validated (`[SYSTEM]` invariant role-priming + `[USER]` template + `### File N`), token-capped (100k bundle, 4k per file, 12 files max), citation-required reply contract. Secrets auto-redacted. Breaks the confirmation-bias loop that scout's zoom-out (structural pivot) cannot.
|
|
139
165
|
- **`session-bridge` v0.8.0 — Detach Mode** — async escalation primitive. Heavy-model second-opinion calls (1-10 min wall time) no longer block the primary agent. `.rune/oracle-pending/<sessionId>.json` is the rendezvous file; idempotent dispatch (bundleHash-keyed); 10min default timeout; 24h orphan cleanup on session start. `cook` Phase 4 and `team` Phase 3 reattach via filesystem poll between adjacent tasks.
|
|
140
166
|
- **`context-engine` v1.1.0 — Mode: preview** — pre-flight cost gate. Caller emits `context.preview` BEFORE bundle build with file list + estimated tokens (chars × 0.25). Per-caller thresholds: adversary 50k/100k, team 30k/80k (per worker), review 40k/100k, audit 60k/120k. Action enum `proceed | warn | block`. Override via `RUNE_CONTEXT_THRESHOLDS_<CALLER>`. Stops `team` parallel workstreams from silently blowing $20 of Opus tokens.
|
|
141
|
-
- **Cross-provider model mapping** — 5 non-Anthropic adapters now translate `model: opus|sonnet|haiku` to provider-correct names. **codex** → gpt-5-
|
|
167
|
+
- **Cross-provider model mapping** — 5 non-Anthropic adapters now translate `model: opus|sonnet|haiku` to provider-correct names. **codex** → gpt-5.6-sol / gpt-5.6-terra / gpt-5.6-luna. **antigravity** → gemini-3-pro / gemini-3-flash / gemini-3-flash-lite. **opencode / openclaw / generic** → tier:heavy / tier:mid / tier:light (provider-agnostic). claude / cursor / windsurf remain no-op (Anthropic backend understands native names).
|
|
142
168
|
- **Routing clarity sweep** — all 63 SKILL.md descriptions now double-quoted (YAML safety). 13 ambiguous-name skills got explicit "Use when…" routing hints so skill-router doesn't have to guess: ba, completion-gate, constraint-check, doc-processor, integrity-check, logic-guardian, onboard, preflight, sentinel-env, watchdog, worktree, hallucination-guard, mcp-builder.
|
|
143
169
|
- **4 new mesh signals** — `oracle.dispatched`, `oracle.response`, `oracle.failed`, `context.preview`. All registered in Signal Catalog with full emit/listen mapping. `agent.stuck` listeners updated to include adversary in addition to scout.
|
|
144
170
|
- **1,331 tests** — +71 from v2.14.0 across 5 new test files: adapter-model-mapping (18), oracle-bundle-format (19), oracle-pending-schema (16), context-preview-signal (13), skill-description-quality (5).
|
|
@@ -227,7 +253,7 @@ cook ───emit:phase.complete────→ session-bridge
|
|
|
227
253
|
|
|
228
254
|
## What Rune Is (and Isn't)
|
|
229
255
|
|
|
230
|
-
Rune started as a **Claude Code plugin** and now compiles to **every major AI IDE**. Same
|
|
256
|
+
Rune started as a **Claude Code plugin** and now compiles to **every major AI IDE**. Same 66 skills, same mesh connections, same workflows — zero knowledge loss across platforms.
|
|
231
257
|
|
|
232
258
|
| | Rune Provides | Claude Code Provides |
|
|
233
259
|
|---|---|---|
|
|
@@ -319,14 +345,14 @@ npx @rune-kit/rune init --platform windsurf
|
|
|
319
345
|
npx @rune-kit/rune init --platform antigravity
|
|
320
346
|
```
|
|
321
347
|
|
|
322
|
-
This compiles all
|
|
348
|
+
This compiles all 66 skills into your IDE's rules format. Same knowledge, same workflows.
|
|
323
349
|
|
|
324
350
|
### Platform Comparison
|
|
325
351
|
|
|
326
352
|
| Feature | Claude Code | Cursor / Windsurf / Others |
|
|
327
353
|
|---------|-------------|---------------------------|
|
|
328
|
-
| Skills available |
|
|
329
|
-
| Mesh connections |
|
|
354
|
+
| Skills available | 66/66 | 66/66 |
|
|
355
|
+
| Mesh connections | 206 sync + 45 signals (programmatic) | 206 sync + 45 signals (rule references) |
|
|
330
356
|
| Workflows & HARD-GATEs | Full | Full |
|
|
331
357
|
| Extension packs | 14 | 14 |
|
|
332
358
|
| Subagent parallelism | Native | Sequential fallback |
|
|
@@ -595,14 +621,15 @@ Domain-specific skills that plug into the core mesh:
|
|
|
595
621
|
|
|
596
622
|
> *Free Rune makes Claude disciplined. Pro makes Claude self-aware.*
|
|
597
623
|
|
|
598
|
-
**Context Intelligence** — the headline Pro feature. Claude Code auto-compacts
|
|
624
|
+
**Context Intelligence** — the headline Pro feature. Claude Code auto-compacts without warning, wiping your session. Pro turns the statusline into a live **context cockpit** and makes Claude *know* when the window is filling — so it saves decisions, progress, and discoveries before compact hits.
|
|
599
625
|
|
|
600
626
|
```
|
|
601
|
-
|
|
602
|
-
Pro: Claude sees real-time context % → saves state → compact → reloads → zero loss
|
|
627
|
+
◈ Opus 4.8 │ ████████░░░ 73% WARM │ ⬡ cook·L1 │ $0.91 │ 5h ██░░ 22% 7d ███░ 61%
|
|
603
628
|
```
|
|
604
629
|
|
|
605
|
-
|
|
630
|
+
Three things a blind meter can't do: a **glitch-proof %** (no phantom 0%, no false "100% URGENT" during light work), a **burn-rate ETA** (*"~4m until auto-compaction"*), and **what's eating your context** (*"files 61% · mcp 22%"* → trim the biggest, don't nuke blind). At 70/80/90% real, `context-inject` writes the pressure into Claude's own context → it triggers `session-bridge` + `neural-memory`, you `/compact`, and `session-start` reloads `.rune/`. Zero loss.
|
|
631
|
+
|
|
632
|
+
Free ships the blind tool-call counter; the real-% cockpit + predictive intelligence is Pro.
|
|
606
633
|
|
|
607
634
|
**Autopilot** — approve a plan, walk away. Autonomous multi-session execution with zero-HIGH-tolerance quality gates, baseline regression checks, cross-phase coherence review, and structured completion reports. `cook` gets the job done. `autopilot` gets it done while you sleep.
|
|
608
635
|
|
|
@@ -679,7 +706,7 @@ See [docs/MULTI-PLATFORM.md](docs/MULTI-PLATFORM.md) for the full architecture.
|
|
|
679
706
|
| Doc | What's inside |
|
|
680
707
|
|-----|---------------|
|
|
681
708
|
| [`docs/GETTING_STARTED.md`](docs/GETTING_STARTED.md) | Your first 5 minutes with Rune — install to first `/rune cook` |
|
|
682
|
-
| [`docs/SKILLS.md`](docs/SKILLS.md) | All
|
|
709
|
+
| [`docs/SKILLS.md`](docs/SKILLS.md) | All 66 skills, searchable by intent and layer |
|
|
683
710
|
| [`docs/SIGNALS.md`](docs/SIGNALS.md) | Canonical signal inventory — 25 events, emit/listen graph |
|
|
684
711
|
| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | 5-layer mesh architecture reference |
|
|
685
712
|
| [`docs/VISION.md`](docs/VISION.md) | Philosophy — what Rune is and isn't |
|
|
@@ -692,10 +719,10 @@ See [docs/MULTI-PLATFORM.md](docs/MULTI-PLATFORM.md) for the full architecture.
|
|
|
692
719
|
## Numbers
|
|
693
720
|
|
|
694
721
|
```
|
|
695
|
-
Core Skills:
|
|
722
|
+
Core Skills: 66 (L0: 1 │ L1: 5 │ L2: 30 │ L3: 30)
|
|
696
723
|
Extension Packs: 14 free + 9 pro + 4 business
|
|
697
|
-
Mesh Connections:
|
|
698
|
-
Mesh Signals:
|
|
724
|
+
Mesh Connections: 206 sync calls (rune doctor)
|
|
725
|
+
Mesh Signals: 45 signals · 55 emit/listen edges (rune doctor)
|
|
699
726
|
Connections/Skill: 3.2 avg
|
|
700
727
|
Platforms: 8 (Claude Code, Cursor, Windsurf, Antigravity, Codex, OpenCode, OpenClaw, Generic)
|
|
701
728
|
Compiler: ~1400 LOC (parser + 8 transforms + 8 adapters + CLI)
|
|
@@ -25,19 +25,19 @@ const baseSkill = {
|
|
|
25
25
|
describe('codex adapter model mapping', () => {
|
|
26
26
|
const codex = getAdapter('codex');
|
|
27
27
|
|
|
28
|
-
test('opus translates to gpt-5-
|
|
28
|
+
test('opus translates to gpt-5.6-sol', () => {
|
|
29
29
|
const header = codex.generateHeader({ ...baseSkill, model: 'opus' });
|
|
30
|
-
assert.match(header, /model: gpt-5-
|
|
30
|
+
assert.match(header, /model: gpt-5\.6-sol/);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
test('sonnet translates to gpt-5', () => {
|
|
33
|
+
test('sonnet translates to gpt-5.6-terra', () => {
|
|
34
34
|
const header = codex.generateHeader({ ...baseSkill, model: 'sonnet' });
|
|
35
|
-
assert.match(header, /model: gpt-5
|
|
35
|
+
assert.match(header, /model: gpt-5\.6-terra/);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
test('haiku translates to gpt-5-
|
|
38
|
+
test('haiku translates to gpt-5.6-luna', () => {
|
|
39
39
|
const header = codex.generateHeader({ ...baseSkill, model: 'haiku' });
|
|
40
|
-
assert.match(header, /model: gpt-5-
|
|
40
|
+
assert.match(header, /model: gpt-5\.6-luna/);
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
test('omitted model produces no model line', () => {
|
|
@@ -161,6 +161,19 @@ test('codex adapter uses skill directories', () => {
|
|
|
161
161
|
assert.strictEqual(codex.skillFileName, 'SKILL.md');
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
+
test('codex AGENTS.md documents the tier→model + reasoning-effort mapping', async () => {
|
|
165
|
+
const codex = getAdapter('codex');
|
|
166
|
+
const extras = await codex.generateExtraFiles({
|
|
167
|
+
stats: { skillCount: 65, crossRefsResolved: 204, packCount: 14, files: [] },
|
|
168
|
+
});
|
|
169
|
+
const agents = extras.find((e) => e.path === 'AGENTS.md');
|
|
170
|
+
assert.ok(agents, 'codex emits AGENTS.md');
|
|
171
|
+
// Guards against a MODEL_MAP / REASONING_EFFORT_MAP interpolation swap.
|
|
172
|
+
assert.match(agents.content, /opus → `gpt-5\.6-sol` \(`model_reasoning_effort = "high"`\)/);
|
|
173
|
+
assert.match(agents.content, /sonnet → `gpt-5\.6-terra` \(`model_reasoning_effort = "medium"`\)/);
|
|
174
|
+
assert.match(agents.content, /haiku → `gpt-5\.6-luna` \(`model_reasoning_effort = "low"`\)/);
|
|
175
|
+
});
|
|
176
|
+
|
|
164
177
|
// --- New v2.18 adapters: shape + generateExtraFiles contract ---
|
|
165
178
|
|
|
166
179
|
test('qoder adapter targets .qoder/skills (dir-per-skill) and emits AGENTS.md', async () => {
|
|
@@ -13,18 +13,33 @@
|
|
|
13
13
|
* only (config.toml). Repo skills MUST live in .agents/skills/ to be
|
|
14
14
|
* auto-discovered. @see https://developers.openai.com/codex/skills
|
|
15
15
|
*
|
|
16
|
-
* MODEL TIER MAPPING (v2.15
|
|
16
|
+
* MODEL TIER MAPPING (v2.15+, lineup refreshed 2026-07):
|
|
17
17
|
* Skill frontmatter `model: opus|sonnet|haiku` (Anthropic naming) is
|
|
18
18
|
* translated to Codex/OpenAI provider-correct model names so the field
|
|
19
19
|
* is meaningful in the compiled output. Unknown tier values pass through.
|
|
20
|
+
*
|
|
21
|
+
* Codex GPT-5.6 tiers (verified against codex-cli 0.144.1 + developers.openai.com/codex/models):
|
|
22
|
+
* sol = flagship/complex → opus
|
|
23
|
+
* terra = balanced everyday → sonnet
|
|
24
|
+
* luna = fast/affordable → haiku
|
|
25
|
+
* Codex also exposes `model_reasoning_effort = minimal|low|medium|high|xhigh`
|
|
26
|
+
* (a config.toml key, not per-skill frontmatter) — Rune surfaces the tier→effort
|
|
27
|
+
* suggestion in AGENTS.md rather than emitting a speculative per-skill field.
|
|
20
28
|
*/
|
|
21
29
|
|
|
22
30
|
import { BRANDING_FOOTER } from '../transforms/branding.js';
|
|
23
31
|
|
|
24
32
|
const MODEL_MAP = {
|
|
25
|
-
opus: 'gpt-5-
|
|
26
|
-
sonnet: 'gpt-5',
|
|
27
|
-
haiku: 'gpt-5-
|
|
33
|
+
opus: 'gpt-5.6-sol',
|
|
34
|
+
sonnet: 'gpt-5.6-terra',
|
|
35
|
+
haiku: 'gpt-5.6-luna',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Suggested config.toml `model_reasoning_effort` per tier (global key, documented in AGENTS.md).
|
|
39
|
+
const REASONING_EFFORT_MAP = {
|
|
40
|
+
opus: 'high',
|
|
41
|
+
sonnet: 'medium',
|
|
42
|
+
haiku: 'low',
|
|
28
43
|
};
|
|
29
44
|
|
|
30
45
|
const TOOL_MAP = {
|
|
@@ -111,6 +126,16 @@ export default {
|
|
|
111
126
|
'',
|
|
112
127
|
'Skills are located in: .agents/skills/ (auto-discovered by Codex)',
|
|
113
128
|
'',
|
|
129
|
+
'## Model Tiers',
|
|
130
|
+
'',
|
|
131
|
+
'Rune skills carry a tier hint (`opus`/`sonnet`/`haiku`). Suggested Codex mapping:',
|
|
132
|
+
'',
|
|
133
|
+
`- opus → \`${MODEL_MAP.opus}\` (\`model_reasoning_effort = "${REASONING_EFFORT_MAP.opus}"\`) — architecture / security / planning`,
|
|
134
|
+
`- sonnet → \`${MODEL_MAP.sonnet}\` (\`model_reasoning_effort = "${REASONING_EFFORT_MAP.sonnet}"\`) — code / edit / review`,
|
|
135
|
+
`- haiku → \`${MODEL_MAP.haiku}\` (\`model_reasoning_effort = "${REASONING_EFFORT_MAP.haiku}"\`) — scan / read-only`,
|
|
136
|
+
'',
|
|
137
|
+
'Set `model` + `model_reasoning_effort` in `~/.codex/config.toml` to match the tier of the task.',
|
|
138
|
+
'',
|
|
114
139
|
'---',
|
|
115
140
|
'> Rune Skill Mesh — https://github.com/rune-kit/rune',
|
|
116
141
|
'',
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Windsurf Adapter
|
|
3
3
|
*
|
|
4
|
-
* Emits SKILL.md files into .windsurf/skills/{name}/ directories —
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Emits SKILL.md files into .windsurf/skills/{name}/ directories — the native
|
|
5
|
+
* Cascade Skills format. Cascade uses progressive disclosure: only the skill's
|
|
6
|
+
* name and description are shown to the model by default; the full SKILL.md is
|
|
7
|
+
* loaded when Cascade invokes the skill (or via @skill-name).
|
|
8
8
|
*
|
|
9
|
-
* Windsurf
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* REBRAND (2026-06-02): Windsurf is now "Devin Desktop" (Cognition), rolled out
|
|
10
|
+
* over-the-air. Devin Desktop PREFERS `.devin/skills/` + `.devin/rules/` but
|
|
11
|
+
* still reads `.windsurf/skills/` + `.windsurf/rules/` as a documented fallback
|
|
12
|
+
* (docs.devin.ai). Rune keeps emitting to `.windsurf/` for maximum compat — it
|
|
13
|
+
* works on both current Devin and any un-migrated Windsurf install. The CLI flag
|
|
14
|
+
* stays `--platform windsurf`. Flip the emission dirs to `.devin/` only once
|
|
15
|
+
* Devin deprecates the `.windsurf/` fallback. @see docs.devin.ai/desktop
|
|
16
|
+
*
|
|
17
|
+
* Windsurf/Devin skills dir: .windsurf/skills/ (Devin also reads .devin/skills/)
|
|
18
|
+
* Skill format: .windsurf/skills/{name}/SKILL.md
|
|
12
19
|
*
|
|
13
20
|
* NOTE: .windsurf/rules/ is still used by the runtime-hooks installer
|
|
14
21
|
* (adapters/hooks/windsurf.js) — rules are the correct vehicle for always-on
|
|
@@ -64,21 +64,21 @@ interface ModelConfig {
|
|
|
64
64
|
|
|
65
65
|
const MODELS: Record<string, ModelConfig> = {
|
|
66
66
|
fast: {
|
|
67
|
-
id: 'claude-haiku-4-5
|
|
67
|
+
id: 'claude-haiku-4-5',
|
|
68
68
|
provider: 'anthropic',
|
|
69
69
|
costPer1kTokens: 0.001,
|
|
70
70
|
maxTokens: 4096,
|
|
71
71
|
latencyP50Ms: 200,
|
|
72
72
|
},
|
|
73
73
|
balanced: {
|
|
74
|
-
id: 'claude-sonnet-
|
|
74
|
+
id: 'claude-sonnet-5',
|
|
75
75
|
provider: 'anthropic',
|
|
76
76
|
costPer1kTokens: 0.01,
|
|
77
77
|
maxTokens: 8192,
|
|
78
78
|
latencyP50Ms: 800,
|
|
79
79
|
},
|
|
80
80
|
deep: {
|
|
81
|
-
id: 'claude-opus-4-
|
|
81
|
+
id: 'claude-opus-4-8',
|
|
82
82
|
provider: 'anthropic',
|
|
83
83
|
costPer1kTokens: 0.05,
|
|
84
84
|
maxTokens: 16384,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rune-kit/rune",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.25.0",
|
|
4
4
|
"description": "65-skill mesh for AI coding assistants — runtime auto-discipline via native hooks (Claude/Cursor/Windsurf/Antigravity), 5-layer architecture, 204 connections + 43 signals, multi-platform compiler. converge (L3) scans spec vs code so dead-button/frontend-only implementations can't ship.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -3,7 +3,7 @@ name: adversary
|
|
|
3
3
|
description: "Pre-implementation red-team analysis. Use when a plan is high-risk, critical path, or expensive to reverse. Challenges plans before code is written — finds edge cases, security holes, scalability bottlenecks, error propagation risks, and integration conflicts. Catches flaws at plan time (10x cheaper than post-implementation)."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "0.
|
|
6
|
+
version: "0.5.0"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: opus
|
|
9
9
|
group: quality
|
|
@@ -41,6 +41,7 @@ Every finding MUST reference the specific plan section, file, or assumption it c
|
|
|
41
41
|
- `hallucination-guard` (L3): verify that APIs, packages, or patterns referenced in the plan actually exist
|
|
42
42
|
- `context-engine` (L3): (oracle-mode) emit `context.preview` before bundle build to gate token cost
|
|
43
43
|
- `session-bridge` (L3): (oracle-mode) detach protocol when target model is opus-class for non-blocking dispatch
|
|
44
|
+
- `council` (L3): Step 0.6 — decorrelated multi-perspective critique for CRITICAL-tier plans (one-way-door decisions, auth/payment/crypto/user-data), mode=critique
|
|
44
45
|
|
|
45
46
|
## Called By (inbound)
|
|
46
47
|
|
|
@@ -58,6 +59,7 @@ Every finding MUST reference the specific plan section, file, or assumption it c
|
|
|
58
59
|
- `adversary` → `perf` — scalability concern raised → perf quantifies the bottleneck
|
|
59
60
|
- `adversary` → `scout` — integration risk flagged → scout finds affected code
|
|
60
61
|
- `adversary` → `plan` — CRITICAL findings → plan revises before implementation
|
|
62
|
+
- `adversary` → `council` — CRITICAL-tier plan (one-way-door decision, or auth/payment/crypto/user-data) → decorrelated critique before red-teaming
|
|
61
63
|
|
|
62
64
|
## Execution
|
|
63
65
|
|
|
@@ -93,6 +95,35 @@ produces concrete remediations (likely HARDEN), but maps to REVISE if it exposes
|
|
|
93
95
|
structural flaw in the chosen approach; Socratic's surfaced assumptions and Pre-mortem's
|
|
94
96
|
narratives become findings.
|
|
95
97
|
|
|
98
|
+
### Step 0.6: Decorrelated Multi-Perspective Gathering (council, CRITICAL-tier only)
|
|
99
|
+
|
|
100
|
+
adversary's own single pass is one model's opinion, however rigorous. For the subset of plans
|
|
101
|
+
where being wrong is expensive enough to justify it, call `rune:council` (mode=critique) before
|
|
102
|
+
Steps 1-5, instead of (or in addition to) solo analysis.
|
|
103
|
+
|
|
104
|
+
**Trigger — call council when ANY of:**
|
|
105
|
+
- Step 0.5 selected the **Dialectic** or **Pre-mortem** lens (one-way-door architecture/vendor
|
|
106
|
+
decisions, irreversible migrations — exactly the cases where a second architecture's blind
|
|
107
|
+
spots differing from yours has the highest expected value)
|
|
108
|
+
- The plan touches auth, payment, crypto, or user data at a severity that would otherwise
|
|
109
|
+
trigger mandatory `sentinel` escalation (Step 2)
|
|
110
|
+
- The user explicitly asks for a second opinion or "gut check" before committing
|
|
111
|
+
|
|
112
|
+
**Do NOT call council for**: Quick Challenge mode plans, plans under 3 files with no
|
|
113
|
+
auth/payment/data logic, or routine feature work — council is opt-in overhead, not a default
|
|
114
|
+
tax on every adversary run (see council's own Sharp Edges: never auto-fires on every plan).
|
|
115
|
+
|
|
116
|
+
**Request**: `{ question: <steelmanned thesis + the specific risk being tested>, mode: "critique",
|
|
117
|
+
n: 3, diversity: { prefer_model_families: true }, evidence_required: [reasoning, citation] }`.
|
|
118
|
+
The question MUST be self-contained — council's voices have no access to this conversation.
|
|
119
|
+
|
|
120
|
+
**Consume**: fold `CouncilResult.agreement.consensus_claims` into the relevant dimension's
|
|
121
|
+
findings below, tagged `[council-verified]`. Fold `agreement.dissent` into that dimension's
|
|
122
|
+
findings too, but tagged `[council-dissent]` — dissent is information, not something to
|
|
123
|
+
resolve by picking a side. If `decorrelation: NO_DECORRELATION`, do not describe the result as
|
|
124
|
+
a second opinion in the report — say plainly that no independent model family was reachable and
|
|
125
|
+
the additional voices were same-family subagents.
|
|
126
|
+
|
|
96
127
|
### Step 1: Edge Case Analysis
|
|
97
128
|
|
|
98
129
|
Challenge the plan's handling of boundary conditions.
|
|
@@ -212,6 +243,9 @@ Synthesize all findings into an actionable report.
|
|
|
212
243
|
- 3+ HIGH findings → **REVISE**
|
|
213
244
|
- HIGH findings with clear remediations → **HARDEN** (add remediations to plan, then proceed)
|
|
214
245
|
- Only MEDIUM/LOW findings → **PROCEED** (note findings for implementation awareness)
|
|
246
|
+
- If council was invoked (Step 0.6) and returned `needs_decision: true` → the verdict cannot be
|
|
247
|
+
PROCEED regardless of adversary's own findings; surface the unresolved dissent to the user
|
|
248
|
+
instead of silently picking a side
|
|
215
249
|
|
|
216
250
|
After reporting:
|
|
217
251
|
- If verdict is REVISE: return to `plan` with findings attached as constraints
|
|
@@ -225,6 +259,7 @@ After reporting:
|
|
|
225
259
|
- **Plan analyzed**: [path to plan file]
|
|
226
260
|
- **Dimensions checked**: [which of the 5 were relevant]
|
|
227
261
|
- **Reasoning lens**: [Red Team | Pre-mortem | Evidence Audit | Dialectic | Socratic — and why]
|
|
262
|
+
- **Council**: [not invoked | MULTI_FAMILY (N families) | NO_DECORRELATION — same-family subagents only]
|
|
228
263
|
- **Findings**: [count by severity]
|
|
229
264
|
- **Verdict**: REVISE | HARDEN | PROCEED
|
|
230
265
|
|
|
@@ -347,6 +382,8 @@ See `references/oracle-mode.md` for the full protocol and integration with `debu
|
|
|
347
382
|
| (cross-model) External CLI invoked without authorization or in non-interactive run | CRITICAL | Per-call user authorization required; non-interactive → skip + announce. See `references/cross-model-escalation.md` |
|
|
348
383
|
| (cross-model) Bundle interpolated into shell args — embedded `$(...)` executes | CRITICAL | Always pass via stdin from a temp file; read-only sandbox. Never inline `-p "<bundle>"` |
|
|
349
384
|
| (cross-model) Rubber-stamping the external reviewer's verdict | MEDIUM | Reply is data, not ruling — reconcile against the artifact; classify each finding |
|
|
385
|
+
| (council) Reporting council output as consensus when decorrelation is NO_DECORRELATION | CRITICAL | Step 0.6 consume rule: report the decorrelation stamp plainly, never imply independent validation from same-family subagents |
|
|
386
|
+
| (council) Calling council on every plan, not just CRITICAL-tier | MEDIUM | Step 0.6 trigger list is explicit — Dialectic/Pre-mortem lens, auth/payment/crypto/user-data, or explicit user request only |
|
|
350
387
|
|
|
351
388
|
## Done When
|
|
352
389
|
|
|
@@ -358,6 +395,7 @@ See `references/oracle-mode.md` for the full protocol and integration with `debu
|
|
|
358
395
|
- Findings formatted for consumption by cook Phase 3 (if PROCEED) or plan (if REVISE)
|
|
359
396
|
- Strength Notes section acknowledges well-designed aspects of the plan
|
|
360
397
|
- (oracle-mode) If dispatched: response cited file:line for each claim, or `oracle.failed` emitted with rejection reason
|
|
398
|
+
- (council) If CRITICAL-tier trigger matched: council invoked before Steps 1-5, its decorrelation stamp reported plainly, consensus/dissent folded into the relevant dimension findings
|
|
361
399
|
|
|
362
400
|
## Returns
|
|
363
401
|
|
|
@@ -371,6 +409,6 @@ See `references/oracle-mode.md` for the full protocol and integration with `debu
|
|
|
371
409
|
|
|
372
410
|
## Cost Profile
|
|
373
411
|
|
|
374
|
-
~4000-8000 tokens input (plan + codebase context), ~2000-3000 tokens output. Opus model for adversarial depth. Runs once per feature plan — high cost justified by preventing wasted implementation cycles.
|
|
412
|
+
~4000-8000 tokens input (plan + codebase context), ~2000-3000 tokens output. Opus model for adversarial depth. Runs once per feature plan — high cost justified by preventing wasted implementation cycles. When Step 0.6 fires (CRITICAL-tier only): add council's cost profile (~1500-4000 tokens per voice × 2-5 voices) — reserved for the minority of plans where being wrong is expensive.
|
|
375
413
|
|
|
376
414
|
**Scope guardrail:** adversary reviews THE PLAN only — never audits existing codebase quality or rewrites code.
|
|
@@ -42,8 +42,9 @@ Emit `oracle.dispatched` carrying `{sessionId, triggerSignal, sourceSkill, targe
|
|
|
42
42
|
|
|
43
43
|
| Target model | Protocol |
|
|
44
44
|
|--------------|----------|
|
|
45
|
-
| sonnet-class (gpt-5, gemini-3-flash, claude-sonnet) | Synchronous — block until reply or 60s timeout |
|
|
46
|
-
| opus-class (gpt-5-
|
|
45
|
+
| sonnet-class (gpt-5.6-terra, gemini-3-flash, claude-sonnet-5) | Synchronous — block until reply or 60s timeout |
|
|
46
|
+
| opus-class (gpt-5.6-sol, gemini-3-pro, claude-opus-4-8) | Async — primary agent continues; poll `.rune/oracle-pending/<sessionId>.json` between phases |
|
|
47
|
+
| frontier-class (claude-fable-5, API-only) | Async, heaviest second opinion for the hardest red-team / architecture calls. **API-only** — not available on a subscription runtime, so reach it via an API key or a non-Anthropic CLI, never via the primary Claude Code session's model. Thinking is always on (control depth with `effort`, do not send a `thinking` param) and it can return a `refusal` stop reason — treat a refusal as "no oracle reply", fall back to opus-class. |
|
|
47
48
|
|
|
48
49
|
### 5. Validate response
|
|
49
50
|
|
package/skills/ba/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: ba
|
|
|
3
3
|
description: "Business Analyst agent. Use when starting a new feature requiring requirements elicitation BEFORE plan or cook. Asks probing questions, identifies hidden requirements, maps stakeholders, defines scope boundaries, and produces a structured Requirements Document that plan and cook consume."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.1"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: opus
|
|
9
9
|
group: creation
|
|
@@ -19,6 +19,11 @@ Business Analyst agent — the ROOT FIX for "Claude works a lot but produces not
|
|
|
19
19
|
|
|
20
20
|
> Wrong requirements shipped correctly is the most expensive bug. BA's job is to prevent it — measure clarity (Step 2.5), measure completeness (Step 3.5), and measure cross-dimension consistency (Step 3.6) before handoff.
|
|
21
21
|
|
|
22
|
+
> **Goal-first (advisory, 2026).** The Requirements Document is the goal spec current
|
|
23
|
+
> models want up front. Where the platform has a native goal/outcome command — Claude
|
|
24
|
+
> Code `/goal`, Managed Agents Outcomes (rubric) — seed it from this document's scope
|
|
25
|
+
> boundaries + acceptance criteria so the whole run stays anchored to the agreed WHAT.
|
|
26
|
+
|
|
22
27
|
<HARD-GATE>
|
|
23
28
|
BA produces WHAT, not HOW. Never write code. Never plan implementation.
|
|
24
29
|
Output is a Requirements Document → hand off to rune:plan for implementation planning.
|
|
@@ -3,7 +3,7 @@ name: brainstorm
|
|
|
3
3
|
description: "Creative ideation and solution exploration. Generates multiple approaches with trade-offs, uses structured frameworks (SCAMPER, First Principles), and hands off to plan for structuring."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "0.
|
|
6
|
+
version: "0.8.0"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: opus
|
|
9
9
|
group: creation
|
|
@@ -57,6 +57,7 @@ Activated when exploring alternative *interface shapes* for a deepening candidat
|
|
|
57
57
|
3. Diversity score MUST be >= 0.4 before presenting (re-spawn once if below)
|
|
58
58
|
4. Recommendation MUST be opinionated with a concrete hedge condition — "it depends" is BLOCKED
|
|
59
59
|
5. Hybrid synthesis (Step 4.5) is opt-in when 2 designs have complementary strengths
|
|
60
|
+
6. council (Step 3.75) is opt-in per the narrow trigger — MUST NOT fire on every design-it-twice run, and its output MUST NOT replace the diversity-score mechanism, only supplement it
|
|
60
61
|
|
|
61
62
|
Full doctrine: [references/design-it-twice.md](references/design-it-twice.md).
|
|
62
63
|
|
|
@@ -110,6 +111,7 @@ Direct API call ≠ Wrapper/middleware layer ≠ Reverse engineering ≠ Browser
|
|
|
110
111
|
- `trend-scout` (L3): market context and trends for product-oriented brainstorming
|
|
111
112
|
- `problem-solver` (L3): structured reasoning frameworks (SCAMPER, First Principles, 6 Hats)
|
|
112
113
|
- `sequential-thinking` (L3): evaluating approaches with many variables
|
|
114
|
+
- `council` (L3): Step 3.75 — decorrelated judgment on which Design-It-Twice candidate is strongest, narrow trigger only (Design-It-Twice Mode)
|
|
113
115
|
|
|
114
116
|
## Called By (inbound)
|
|
115
117
|
|
|
@@ -126,6 +128,7 @@ Direct API call ≠ Wrapper/middleware layer ≠ Reverse engineering ≠ Browser
|
|
|
126
128
|
|
|
127
129
|
- `brainstorm` ↔ `plan` — bidirectional: brainstorm generates options → plan structures the chosen one, plan needs exploration → brainstorm ideates
|
|
128
130
|
- `brainstorm` → `ba` — a standalone brainstorm that picks an approach for a NEW feature with no requirements spec routes to `ba` first (WHAT before HOW). Suppressed when `ba` is the caller — that direction is `ba` → `brainstorm` and re-invoking would loop.
|
|
131
|
+
- `brainstorm` → `council` — Design-It-Twice candidates ready + high-stakes trigger fires (Step 3.75) → decorrelated judgment on the strongest candidate before Step 4 Recommend
|
|
129
132
|
|
|
130
133
|
## Reasoning Frameworks
|
|
131
134
|
|
|
@@ -300,6 +303,21 @@ diversity = 1 - mean(pairwise_jaccard(feature_vectors))
|
|
|
300
303
|
|
|
301
304
|
Emit `diversity_score` in chain_metadata.
|
|
302
305
|
|
|
306
|
+
### Step 3.75 — Decorrelated Judgment (council, Design-It-Twice Mode only)
|
|
307
|
+
|
|
308
|
+
The diversity score (Step 3.5) measures how DIFFERENT the candidate designs are — it says nothing about which one is BEST. For high-stakes interface decisions, that judgment call benefits from a second architecture's opinion, the same discipline `adversary` Step 0.6 and `review` Step 1.6 already apply.
|
|
309
|
+
|
|
310
|
+
**Trigger — call council (mode=judge) when ANY of:**
|
|
311
|
+
- N=4 was spawned (dependency category `remote-owned` or `true-external`, per Step 2.5 — the same tier that already signals higher stakes)
|
|
312
|
+
- Diversity landed in the 0.4–0.59 marginal band (Step 3.5) and a re-spawn still didn't clearly separate the candidates
|
|
313
|
+
- User explicitly asks for a second opinion on which design to pick
|
|
314
|
+
|
|
315
|
+
**Do NOT call council for**: routine Design-It-Twice runs where diversity ≥ 0.6 on an in-process/local-substitutable dependency (N=3) — this is opt-in overhead on top of the existing subagent fan-out, not a default tax on every design-it-twice run.
|
|
316
|
+
|
|
317
|
+
**Request**: `{ question: <the candidate designs' interface/usage/tradeoffs YAML + "which design is strongest given constraints X">, mode: "judge", n: 3, diversity: { prefer_model_families: true }, evidence_required: [reasoning] }`. Self-contained — council's voices never saw the subagent spawns.
|
|
318
|
+
|
|
319
|
+
**Consume**: fold `agreement.consensus_claims` into Step 4's recommendation as a `[council-verified]` signal alongside (never instead of) the diversity score. Fold `agreement.dissent` into the hedge condition, tagged `[council-dissent]`. If `decorrelation: NO_DECORRELATION`, say so plainly — do NOT describe the judgment as independent confirmation from same-family subagents; the diversity-score mechanism remains the primary signal in that case.
|
|
320
|
+
|
|
303
321
|
### Step 4 — Recommend
|
|
304
322
|
|
|
305
323
|
Select ONE approach as the recommendation. State:
|
|
@@ -419,6 +437,7 @@ If the user rejects the recommendation, return to Step 2 with adjusted constrain
|
|
|
419
437
|
9. [Design-It-Twice Mode] MUST spawn parallel subagents with one constraint pinned per agent — fake diversity (one agent producing N options) is BLOCKED
|
|
420
438
|
10. [Design-It-Twice Mode] MUST emit `diversity_score` and re-spawn (once) if below 0.4 floor
|
|
421
439
|
11. [Design-It-Twice Mode] MUST NOT produce "it depends" recommendations — pick one design with a concrete hedge condition
|
|
440
|
+
12. [Design-It-Twice Mode] MUST NOT call council on every run — narrow trigger only (N=4 remote/external dependency, marginal diversity band, or explicit user request); when invoked, council output supplements (never replaces) the diversity-score mechanism
|
|
422
441
|
|
|
423
442
|
## Output Format
|
|
424
443
|
|
|
@@ -486,6 +505,7 @@ Known failure modes for this skill. Check these before declaring done.
|
|
|
486
505
|
| [Design-It-Twice] Diversity score below 0.4 ignored | HIGH | Step 3.5 gate — re-spawn once; if still low, present with explicit "low-diversity" warning |
|
|
487
506
|
| [Design-It-Twice] "It depends" recommendation | HIGH | Step 4 — must pick one with a hedge; if genuinely tied, propose hybrid (Step 4.5) and recommend that |
|
|
488
507
|
| [Design-It-Twice] Forgetting to include CONTEXT.md domain terms in subagent prompt | MEDIUM | Step 2.5 spawn template requires domain glossary be passed through |
|
|
508
|
+
| [Design-It-Twice] Reporting council output as consensus when decorrelation is NO_DECORRELATION | CRITICAL | Step 3.75 consume rule: report the decorrelation stamp plainly, never imply independent confirmation from same-family subagents |
|
|
489
509
|
|
|
490
510
|
## Done When
|
|
491
511
|
|
|
@@ -496,6 +516,7 @@ Known failure modes for this skill. Check these before declaring done.
|
|
|
496
516
|
- Constraints for plan phase listed explicitly
|
|
497
517
|
- Step 5 spec-presence gate evaluated — routed to `ba` (new feature, no spec, standalone) or `plan` (spec exists, or ba/cook was the caller, or no new behavior)
|
|
498
518
|
- Next skill (`ba` or `plan`) called with the approved approach and constraints
|
|
519
|
+
- (Design-It-Twice) If council's high-stakes trigger matched (Step 3.75): council invoked before Step 4, decorrelation stamp reported plainly, consensus/dissent folded into the recommendation alongside the diversity score
|
|
499
520
|
|
|
500
521
|
## Cost Profile
|
|
501
522
|
|
|
@@ -107,8 +107,9 @@ diversity = 1 - mean(similarity(d_i, d_j) for all i < j)
|
|
|
107
107
|
- **Locality** — where change concentrates
|
|
108
108
|
- **Seam placement** — internal vs external; ports yes/no
|
|
109
109
|
- **Common-case trivial-ness** — how much work for the default path
|
|
110
|
-
3. **
|
|
111
|
-
4. **
|
|
110
|
+
3. **Council check (SKILL.md Step 3.75)** — if the narrow high-stakes trigger fired, note `[council-verified]`/`[council-dissent]` tags inline in the comparison table or as a short addendum. If `decorrelation: NO_DECORRELATION`, say so plainly — never present it as a second opinion.
|
|
111
|
+
4. **Opinionated recommendation** — strongest design + concrete hedge condition for when to pick a different one
|
|
112
|
+
5. **Hybrid synthesis (optional Step 4.5)** — if 2 designs have complementary strengths, propose a 4th synthesized option that combines them
|
|
112
113
|
|
|
113
114
|
Skip the comparison table if N=2 (just 1 contrast, prose handles it).
|
|
114
115
|
|
|
@@ -152,4 +153,6 @@ chain_metadata:
|
|
|
152
153
|
constraints_used: [C1, C2, C4]
|
|
153
154
|
recommendation: <design-id>
|
|
154
155
|
hybrid_proposed: <true|false>
|
|
156
|
+
council_invoked: <true|false>
|
|
157
|
+
council_decorrelation: <MULTI_FAMILY|NO_DECORRELATION|null>
|
|
155
158
|
```
|
package/skills/cook/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ context: fork
|
|
|
5
5
|
agent: general-purpose
|
|
6
6
|
metadata:
|
|
7
7
|
author: runedev
|
|
8
|
-
version: "2.
|
|
8
|
+
version: "2.7.0"
|
|
9
9
|
layer: L1
|
|
10
10
|
model: sonnet
|
|
11
11
|
group: orchestrator
|
|
@@ -379,6 +379,24 @@ If the coder model needs info from other phases, it's in the Cross-Phase Context
|
|
|
379
379
|
|
|
380
380
|
**REQUIRED SUB-SKILL**: Use `rune:fix`
|
|
381
381
|
|
|
382
|
+
### Reuse Ladder (climb before you write)
|
|
383
|
+
|
|
384
|
+
Before writing the code for each task, climb this ladder and stop at the first rung that holds. Advisory, not a gate — it shapes *what* you write, never blocks the phase. Runs AFTER you understand the change (scout done, plan approved), never as a substitute for tracing the real flow.
|
|
385
|
+
|
|
386
|
+
1. **Needs to exist at all?** Speculative need → skip it, say so in one line (YAGNI).
|
|
387
|
+
2. **Already in this codebase?** A helper, util, type, or pattern that already lives here → reuse it. Re-implementing what sits a few files over is the most common slop — `Grep` before you write.
|
|
388
|
+
3. **Stdlib does it?** Use it.
|
|
389
|
+
4. **Native platform feature covers it?** DB constraint over app code, CSS over JS, `<input type="date">` over a picker lib.
|
|
390
|
+
5. **Already-installed dependency solves it?** Use it. Never add a new dep for what a few lines cover.
|
|
391
|
+
6. **One line?** Make it one line.
|
|
392
|
+
7. **Only then** — the minimum code that makes the test pass.
|
|
393
|
+
|
|
394
|
+
Two rungs work → take the higher one and move on. Mark a deliberate shortcut with a `// yagni:` comment naming its ceiling + upgrade path (`// yagni: global lock — per-account locks if throughput matters`) so the De-Sloppify Pass and later readers see intent, not ignorance.
|
|
395
|
+
|
|
396
|
+
**Bug-fix corollary** — the lazy fix IS the root-cause fix: `Grep` every caller of the function you're about to touch, then fix the shared function once. One guard where all callers route through is a smaller diff than one guard per caller — and patching only the path the ticket names leaves every sibling caller still broken.
|
|
397
|
+
|
|
398
|
+
**Never lazy about**: understanding the problem, input validation at trust boundaries, error handling that prevents data loss, security, accessibility, anything explicitly requested. The ladder shortens the solution, never the reading — a small diff you don't understand is a confident wrong fix, not laziness.
|
|
399
|
+
|
|
382
400
|
1. Mark Phase 4 as `in_progress`
|
|
383
401
|
2. **Phase-file execution** — if working from a master plan + phase file:
|
|
384
402
|
- Execute tasks from `## Tasks` section wave-by-wave
|