@wazir-dev/cli 1.3.0 → 1.4.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/CHANGELOG.md +17 -2
- package/docs/research/2026-03-20-agents/a18fb002157904af5.txt +187 -0
- package/docs/research/2026-03-20-agents/a1d0ac79ac2f11e6f.txt +2 -0
- package/docs/research/2026-03-20-agents/a324079de037abd7c.txt +198 -0
- package/docs/research/2026-03-20-agents/a357586bccfafb0e5.txt +256 -0
- package/docs/research/2026-03-20-agents/a4365394e4d753105.txt +137 -0
- package/docs/research/2026-03-20-agents/a492af28bc52d3613.txt +136 -0
- package/docs/research/2026-03-20-agents/a4984db0b6a8eee07.txt +124 -0
- package/docs/research/2026-03-20-agents/a5b30e59d34bbb062.txt +214 -0
- package/docs/research/2026-03-20-agents/a5cf7829dab911586.txt +165 -0
- package/docs/research/2026-03-20-agents/a607157c30dd97c9e.txt +96 -0
- package/docs/research/2026-03-20-agents/a60b68b1e19d1e16b.txt +115 -0
- package/docs/research/2026-03-20-agents/a722af01c5594aba0.txt +166 -0
- package/docs/research/2026-03-20-agents/a787bdc516faa5829.txt +181 -0
- package/docs/research/2026-03-20-agents/a7c46d1bba1056ed2.txt +132 -0
- package/docs/research/2026-03-20-agents/a7e5abbab2b281a0d.txt +100 -0
- package/docs/research/2026-03-20-agents/a8dbadc66cd0d7d5a.txt +95 -0
- package/docs/research/2026-03-20-agents/a904d9f45d6b86a6d.txt +75 -0
- package/docs/research/2026-03-20-agents/a927659a942ee7f60.txt +102 -0
- package/docs/research/2026-03-20-agents/a962cb569191f7583.txt +125 -0
- package/docs/research/2026-03-20-agents/aab6decea538aac41.txt +148 -0
- package/docs/research/2026-03-20-agents/abd58b853dd938a1b.txt +295 -0
- package/docs/research/2026-03-20-agents/ac009da573eff7f65.txt +100 -0
- package/docs/research/2026-03-20-agents/ac1bc783364405e5f.txt +190 -0
- package/docs/research/2026-03-20-agents/aca5e2b57fde152a0.txt +132 -0
- package/docs/research/2026-03-20-agents/ad849b8c0a7e95b8b.txt +176 -0
- package/docs/research/2026-03-20-agents/adc2b12a4da32c962.txt +258 -0
- package/docs/research/2026-03-20-agents/af97caaaa9a80e4cb.txt +146 -0
- package/docs/research/2026-03-20-agents/afc5faceee368b3ca.txt +111 -0
- package/docs/research/2026-03-20-agents/afdb282d866e3c1e4.txt +164 -0
- package/docs/research/2026-03-20-agents/afe9d1f61c02b1e8d.txt +299 -0
- package/docs/research/2026-03-20-agents/b4hmkwril.txt +1856 -0
- package/docs/research/2026-03-20-agents/b80ptk89g.txt +1856 -0
- package/docs/research/2026-03-20-agents/bf54s1jss.txt +1150 -0
- package/docs/research/2026-03-20-agents/bhd6kq2kx.txt +1856 -0
- package/docs/research/2026-03-20-agents/bmb2fodyr.txt +988 -0
- package/docs/research/2026-03-20-agents/bmmsrij8i.txt +826 -0
- package/docs/research/2026-03-20-agents/bn4t2ywpu.txt +2175 -0
- package/docs/research/2026-03-20-agents/bu22t9f1z.txt +0 -0
- package/docs/research/2026-03-20-agents/bwvl98v2p.txt +738 -0
- package/docs/research/2026-03-20-agents/psych-a3697a7fd06eb64fd.txt +135 -0
- package/docs/research/2026-03-20-agents/psych-a37776fabc870feae.txt +123 -0
- package/docs/research/2026-03-20-agents/psych-a5b1fe05c0589efaf.txt +2 -0
- package/docs/research/2026-03-20-agents/psych-a95c15b1f29424435.txt +76 -0
- package/docs/research/2026-03-20-agents/psych-a9c26f4d9172dde7c.txt +2 -0
- package/docs/research/2026-03-20-agents/psych-aa19c69f0ca2c5ad3.txt +2 -0
- package/docs/research/2026-03-20-agents/psych-aa4e4cb70e1be5ecb.txt +95 -0
- package/docs/research/2026-03-20-agents/psych-ab5b302f26a554663.txt +102 -0
- package/docs/research/2026-03-20-deep-research-complete.md +101 -0
- package/docs/research/2026-03-20-deep-research-status.md +38 -0
- package/docs/research/2026-03-20-enforcement-research.md +107 -0
- package/expertise/composition-map.yaml +27 -8
- package/expertise/digests/reviewer/ai-coding-digest.md +83 -0
- package/expertise/digests/reviewer/architectural-thinking-digest.md +63 -0
- package/expertise/digests/reviewer/architecture-antipatterns-digest.md +49 -0
- package/expertise/digests/reviewer/code-smells-digest.md +53 -0
- package/expertise/digests/reviewer/coupling-cohesion-digest.md +54 -0
- package/expertise/digests/reviewer/ddd-digest.md +60 -0
- package/expertise/digests/reviewer/dependency-risk-digest.md +40 -0
- package/expertise/digests/reviewer/error-handling-digest.md +55 -0
- package/expertise/digests/reviewer/review-methodology-digest.md +49 -0
- package/exports/hosts/claude/.claude/commands/learn.md +61 -8
- package/exports/hosts/claude/.claude/settings.json +7 -6
- package/exports/hosts/claude/export.manifest.json +6 -3
- package/exports/hosts/claude/host-package.json +3 -0
- package/exports/hosts/codex/export.manifest.json +6 -3
- package/exports/hosts/codex/host-package.json +3 -0
- package/exports/hosts/cursor/.cursor/hooks.json +6 -6
- package/exports/hosts/cursor/export.manifest.json +6 -3
- package/exports/hosts/cursor/host-package.json +3 -0
- package/exports/hosts/gemini/export.manifest.json +6 -3
- package/exports/hosts/gemini/host-package.json +3 -0
- package/hooks/definitions/pretooluse_dispatcher.yaml +26 -0
- package/hooks/definitions/pretooluse_pipeline_guard.yaml +22 -0
- package/hooks/definitions/stop_pipeline_gate.yaml +22 -0
- package/hooks/hooks.json +7 -6
- package/hooks/pretooluse-dispatcher +84 -0
- package/hooks/pretooluse-pipeline-guard +9 -0
- package/hooks/stop-pipeline-gate +9 -0
- package/package.json +2 -2
- package/schemas/decision.schema.json +15 -0
- package/schemas/hook.schema.json +4 -1
- package/skills/TEMPLATE-3-ZONE.md +160 -0
- package/skills/brainstorming/SKILL.md +127 -23
- package/skills/clarifier/SKILL.md +175 -18
- package/skills/claude-cli/SKILL.md +91 -12
- package/skills/codex-cli/SKILL.md +91 -12
- package/skills/debugging/SKILL.md +133 -38
- package/skills/design/SKILL.md +173 -37
- package/skills/dispatching-parallel-agents/SKILL.md +129 -31
- package/skills/executing-plans/SKILL.md +113 -25
- package/skills/executor/SKILL.md +185 -21
- package/skills/finishing-a-development-branch/SKILL.md +107 -18
- package/skills/gemini-cli/SKILL.md +91 -12
- package/skills/humanize/SKILL.md +92 -13
- package/skills/init-pipeline/SKILL.md +90 -17
- package/skills/prepare-next/SKILL.md +93 -24
- package/skills/receiving-code-review/SKILL.md +90 -16
- package/skills/requesting-code-review/SKILL.md +100 -24
- package/skills/requesting-code-review/code-reviewer.md +29 -17
- package/skills/reviewer/SKILL.md +190 -50
- package/skills/run-audit/SKILL.md +92 -15
- package/skills/scan-project/SKILL.md +93 -14
- package/skills/self-audit/SKILL.md +113 -39
- package/skills/skill-research/SKILL.md +94 -7
- package/skills/subagent-driven-development/SKILL.md +129 -30
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +30 -2
- package/skills/subagent-driven-development/implementer-prompt.md +40 -27
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +25 -12
- package/skills/tdd/SKILL.md +125 -20
- package/skills/using-git-worktrees/SKILL.md +118 -28
- package/skills/using-skills/SKILL.md +116 -29
- package/skills/verification/SKILL.md +127 -22
- package/skills/wazir/SKILL.md +517 -153
- package/skills/writing-plans/SKILL.md +134 -28
- package/skills/writing-skills/SKILL.md +91 -13
- package/skills/writing-skills/anthropic-best-practices.md +104 -64
- package/skills/writing-skills/persuasion-principles.md +100 -34
- package/tooling/src/capture/command.js +29 -1
- package/tooling/src/capture/decision.js +40 -0
- package/tooling/src/capture/store.js +1 -0
- package/tooling/src/config/depth-table.js +60 -0
- package/tooling/src/export/compiler.js +7 -8
- package/tooling/src/guards/guardrail-functions.js +131 -0
- package/tooling/src/guards/phase-prerequisite-guard.js +39 -3
- package/tooling/src/hooks/pretooluse-dispatcher.js +300 -0
- package/tooling/src/hooks/pretooluse-pipeline-guard.js +141 -0
- package/tooling/src/hooks/stop-pipeline-gate.js +92 -0
- package/tooling/src/learn/pipeline.js +177 -0
- package/tooling/src/state/db.js +251 -2
- package/tooling/src/state/pipeline-state.js +262 -0
- package/wazir.manifest.yaml +3 -0
- package/workflows/learn.md +61 -8
package/hooks/hooks.json
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"hooks": {
|
|
3
|
-
"
|
|
3
|
+
"Stop": [
|
|
4
4
|
{
|
|
5
|
-
"matcher": "Write|Edit",
|
|
6
5
|
"hooks": [
|
|
7
6
|
{
|
|
8
7
|
"type": "command",
|
|
9
|
-
"command": "./hooks/
|
|
8
|
+
"command": "./hooks/stop-pipeline-gate"
|
|
10
9
|
}
|
|
11
10
|
]
|
|
12
|
-
}
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"PreToolUse": [
|
|
13
14
|
{
|
|
14
|
-
"matcher": "Bash",
|
|
15
|
+
"matcher": "Write|Edit|Bash",
|
|
15
16
|
"hooks": [
|
|
16
17
|
{
|
|
17
18
|
"type": "command",
|
|
18
|
-
"command": "./hooks/
|
|
19
|
+
"command": "./hooks/pretooluse-dispatcher"
|
|
19
20
|
}
|
|
20
21
|
]
|
|
21
22
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
8
|
+
|
|
9
|
+
import { evaluateDispatch } from '../tooling/src/hooks/pretooluse-dispatcher.js';
|
|
10
|
+
|
|
11
|
+
const hooksDir = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const projectRoot = dirname(hooksDir);
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Derive state root from manifest (same logic as context-mode-router)
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
function deriveStateRoot() {
|
|
19
|
+
if (process.env.WAZIR_STATE_ROOT) return process.env.WAZIR_STATE_ROOT;
|
|
20
|
+
try {
|
|
21
|
+
const manifestPath = join(projectRoot, 'wazir.manifest.yaml');
|
|
22
|
+
const raw = readFileSync(manifestPath, 'utf8');
|
|
23
|
+
const nameMatch = raw.match(/^\s+name:\s*(.+)$/m);
|
|
24
|
+
const templateMatch = raw.match(/state_root_default:\s*(.+)$/m);
|
|
25
|
+
if (nameMatch && templateMatch) {
|
|
26
|
+
const slug = nameMatch[1].trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'wazir-project';
|
|
27
|
+
const template = templateMatch[1].trim();
|
|
28
|
+
const expanded = template.startsWith('~/') ? join(homedir(), template.slice(2)) : template;
|
|
29
|
+
return resolve(expanded.replace('{project_slug}', slug));
|
|
30
|
+
}
|
|
31
|
+
} catch { /* fall through */ }
|
|
32
|
+
return join(homedir(), '.wazir', 'projects', '_default');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Logging (preserves context-mode routing log)
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
function logDecision(stateRoot, decision) {
|
|
40
|
+
const logDir = join(stateRoot, 'logs');
|
|
41
|
+
try {
|
|
42
|
+
if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });
|
|
43
|
+
const entry = JSON.stringify({
|
|
44
|
+
ts: new Date().toISOString(),
|
|
45
|
+
hook: 'pretooluse_dispatcher',
|
|
46
|
+
...decision,
|
|
47
|
+
});
|
|
48
|
+
appendFileSync(join(logDir, 'routing.ndjson'), entry + '\n');
|
|
49
|
+
} catch {
|
|
50
|
+
// Logging is best-effort
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Main
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const stdin = readFileSync(0, 'utf8');
|
|
60
|
+
const hookInput = stdin.trim() ? JSON.parse(stdin) : {};
|
|
61
|
+
|
|
62
|
+
const stateRoot = deriveStateRoot();
|
|
63
|
+
const result = evaluateDispatch(stateRoot, projectRoot, hookInput);
|
|
64
|
+
|
|
65
|
+
logDecision(stateRoot, {
|
|
66
|
+
tool: hookInput.tool,
|
|
67
|
+
decision: result.decision,
|
|
68
|
+
reason: result.reason,
|
|
69
|
+
routing: result.routing_decision,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
process.stdout.write(JSON.stringify(result) + '\n');
|
|
73
|
+
|
|
74
|
+
// Exit non-zero when context-mode routing is active (preserves old
|
|
75
|
+
// context-mode-router behavior where exit 1 = route to context-mode)
|
|
76
|
+
if (result.routing_decision?.route === 'context-mode') {
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
process.exit(0);
|
|
80
|
+
} catch (error) {
|
|
81
|
+
process.stderr.write(`[pretooluse-dispatcher] ${error.message}\n`);
|
|
82
|
+
process.stdout.write(JSON.stringify({ hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'deny' }, systemMessage: `[pretooluse-dispatcher] Hook error: ${error.message}. Blocking to be safe.` }) + '\n');
|
|
83
|
+
process.exit(2); // fail-closed on errors
|
|
84
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# PreToolUse hook: enforces phase-specific tool restrictions.
|
|
3
|
+
# Reads pipeline-state.json for current phase, blocks disallowed tools.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
STATE_ROOT="${WAZIR_STATE_ROOT:-$HOME/.wazir/projects/wazir}"
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
|
|
9
|
+
node "$SCRIPT_DIR/../tooling/src/hooks/pretooluse-pipeline-guard.js" "$STATE_ROOT"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Stop hook: blocks conversation completion when pipeline is incomplete.
|
|
3
|
+
# Reads pipeline-state.json to determine if all phases are done.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
STATE_ROOT="${WAZIR_STATE_ROOT:-$HOME/.wazir/projects/wazir}"
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
|
|
9
|
+
node "$SCRIPT_DIR/../tooling/src/hooks/stop-pipeline-gate.js" "$STATE_ROOT"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wazir-dev/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Host-native engineering OS kit for AI coding agents — roles, phases, expertise modules, quality gates for Claude, Codex, Gemini & Cursor",
|
|
6
6
|
"bin": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"scripts": {
|
|
31
31
|
"test": "npm run test:active",
|
|
32
|
-
"test:active": "node --test tooling/test/cli.test.js tooling/test/validate.test.js tooling/test/index.test.js tooling/test/doctor-status.test.js tooling/test/guard-hooks.test.js tooling/test/export.test.js tooling/test/capture.test.js tooling/test/schema-examples.test.js tooling/test/git-flow-docs.test.js tooling/test/role-contracts.test.js tooling/test/ci-workflow.test.js tooling/test/contributing.test.js tooling/test/author-artifact.test.js tooling/test/capture/usage.test.js tooling/test/adapters/composition-engine.test.js tooling/test/docs-drift.test.js tooling/test/init.test.js tooling/test/gating/agent.test.js tooling/test/guards/phase-prerequisite-guard.test.js tooling/test/hooks/context-mode-router.test.js tooling/test/hooks/session-start.test.js tooling/test/input-scanning.test.js tooling/test/init/auto-detect.test.js tooling/test/adapters/model-router.test.js tooling/test/state/db.test.js tooling/test/reports/phase-report.test.js tooling/test/logo-svg.test.js tooling/test/adapters/context-mode.test.js tooling/test/verify/proof-collector.test.js",
|
|
32
|
+
"test:active": "node --test tooling/test/cli.test.js tooling/test/validate.test.js tooling/test/index.test.js tooling/test/doctor-status.test.js tooling/test/guard-hooks.test.js tooling/test/export.test.js tooling/test/capture.test.js tooling/test/schema-examples.test.js tooling/test/git-flow-docs.test.js tooling/test/role-contracts.test.js tooling/test/ci-workflow.test.js tooling/test/contributing.test.js tooling/test/author-artifact.test.js tooling/test/capture/usage.test.js tooling/test/adapters/composition-engine.test.js tooling/test/docs-drift.test.js tooling/test/init.test.js tooling/test/gating/agent.test.js tooling/test/guards/phase-prerequisite-guard.test.js tooling/test/hooks/context-mode-router.test.js tooling/test/hooks/session-start.test.js tooling/test/input-scanning.test.js tooling/test/init/auto-detect.test.js tooling/test/adapters/model-router.test.js tooling/test/state/db.test.js tooling/test/reports/phase-report.test.js tooling/test/logo-svg.test.js tooling/test/adapters/context-mode.test.js tooling/test/verify/proof-collector.test.js tooling/test/state/pipeline-state.test.js tooling/test/guards/guardrail-functions.test.js tooling/test/hooks/stop-pipeline-gate.test.js tooling/test/hooks/pretooluse-pipeline-guard.test.js tooling/test/hooks/pretooluse-dispatcher.test.js tooling/test/config/depth-table.test.js tooling/test/state/artifact-dependencies.test.js tooling/test/integration/three-layer-enforcement.test.js tooling/test/learn/pipeline.test.js tooling/test/reports/command.test.js tooling/test/state/command.test.js",
|
|
33
33
|
"test:coverage": "c8 npm run test:active",
|
|
34
34
|
"prepare": "husky"
|
|
35
35
|
},
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://wazir.dev/schemas/decision.schema.json",
|
|
4
|
+
"title": "Decision Log Entry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["timestamp", "phase", "decision", "reason"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"timestamp": { "type": "string", "format": "date-time" },
|
|
9
|
+
"phase": { "type": "string", "minLength": 1 },
|
|
10
|
+
"decision": { "type": "string", "maxLength": 200 },
|
|
11
|
+
"reason": { "type": "string", "maxLength": 500 },
|
|
12
|
+
"task_id": { "type": "string" }
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false
|
|
15
|
+
}
|
package/schemas/hook.schema.json
CHANGED
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
"stop_handoff_harvest",
|
|
25
25
|
"protected_path_write_guard",
|
|
26
26
|
"loop_cap_guard",
|
|
27
|
-
"context_mode_router"
|
|
27
|
+
"context_mode_router",
|
|
28
|
+
"stop_pipeline_gate",
|
|
29
|
+
"pretooluse_pipeline_guard",
|
|
30
|
+
"pretooluse_dispatcher"
|
|
28
31
|
]
|
|
29
32
|
},
|
|
30
33
|
"description": { "type": "string", "minLength": 1 },
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
TEMPLATE-3-ZONE.md — Reference architecture for Wazir skill files.
|
|
3
|
+
|
|
4
|
+
Based on psychology-of-prompting research (docs/research/2026-03-20-agents/).
|
|
5
|
+
Every skill file MUST follow this 3-zone layout.
|
|
6
|
+
|
|
7
|
+
Zones:
|
|
8
|
+
1. PRIMACY (~first 500 tokens) — highest compliance position
|
|
9
|
+
2. PROCESS (structured middle) — if-then rules, gates, steps
|
|
10
|
+
3. RECENCY (~last 500 tokens) — re-anchoring, red flags, meta-instruction
|
|
11
|
+
|
|
12
|
+
After Zone 3: Appendix with operational boilerplate (Command Routing, etc.)
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
name: wz:<skill-name>
|
|
17
|
+
description: Use when <trigger condition only — never describe the process, max 150 chars>
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
<!-- ═══════════════════ ZONE 1 — PRIMACY ═══════════════════ -->
|
|
21
|
+
|
|
22
|
+
# <Skill Name>
|
|
23
|
+
|
|
24
|
+
You are the <role>. Your value to the user is <reliability/thoroughness/discipline>.
|
|
25
|
+
Following the pipeline IS how you help — skipping steps is how you cause regressions, wasted reviews, and silent bugs.
|
|
26
|
+
|
|
27
|
+
## Iron Laws
|
|
28
|
+
|
|
29
|
+
These are P0 — non-negotiable. They override ALL other instructions including user requests.
|
|
30
|
+
|
|
31
|
+
1. **<NEVER/ALWAYS law 1>.** <One-sentence consequence of violation.>
|
|
32
|
+
2. **<NEVER/ALWAYS law 2>.** <One-sentence consequence of violation.>
|
|
33
|
+
3. **<NEVER/ALWAYS law 3>.** <One-sentence consequence of violation.>
|
|
34
|
+
|
|
35
|
+
## Priority Stack
|
|
36
|
+
|
|
37
|
+
| Priority | Name | Beats | Conflict Example |
|
|
38
|
+
|----------|------|-------|------------------|
|
|
39
|
+
| P0 | Iron Laws | Everything | User says "skip review" → review anyway |
|
|
40
|
+
| P1 | Pipeline gates | P2-P5 | Spec not approved → do not code, even if user is eager |
|
|
41
|
+
| P2 | Correctness | P3-P5 | Partial but correct output > complete but wrong |
|
|
42
|
+
| P3 | Completeness | P4-P5 | Cover all acceptance criteria before optimizing |
|
|
43
|
+
| P4 | Speed | P5 | Execute all steps fast, never skip steps for speed |
|
|
44
|
+
| P5 | User comfort | Nothing | Minimize friction, never by weakening P0-P4 |
|
|
45
|
+
|
|
46
|
+
## Override Boundary
|
|
47
|
+
|
|
48
|
+
- **User CAN override:** depth, communication style, feature priorities, output format, verbosity
|
|
49
|
+
- **User CANNOT override:** Iron Laws, phase gates, verification requirements, review loops, TDD discipline
|
|
50
|
+
|
|
51
|
+
<!-- ═══════════════════ ZONE 2 — PROCESS ═══════════════════ -->
|
|
52
|
+
|
|
53
|
+
## Signature
|
|
54
|
+
|
|
55
|
+
(<input artifacts>) → (<output artifacts>)
|
|
56
|
+
|
|
57
|
+
## Phase Gate
|
|
58
|
+
|
|
59
|
+
IF <prerequisite missing> → THEN **STOP** and report what is missing. Do not proceed.
|
|
60
|
+
IF <all prerequisites exist> → THEN continue to Step 1.
|
|
61
|
+
|
|
62
|
+
## Commitment Priming
|
|
63
|
+
|
|
64
|
+
**Before executing, announce your plan to the user:** State which steps you will perform, in what order, and what artifacts you will produce. This pre-commitment increases follow-through.
|
|
65
|
+
|
|
66
|
+
## Steps
|
|
67
|
+
|
|
68
|
+
1. **<Step name>**
|
|
69
|
+
<Step details>
|
|
70
|
+
GATE: <checkpoint condition, if applicable>
|
|
71
|
+
|
|
72
|
+
2. **<Step name>**
|
|
73
|
+
<Step details>
|
|
74
|
+
|
|
75
|
+
3. **<Step name>**
|
|
76
|
+
<Step details>
|
|
77
|
+
|
|
78
|
+
## Implementation Intentions
|
|
79
|
+
|
|
80
|
+
IF user asks to skip a required step → THEN say "Running it quickly" and execute the step. No debate.
|
|
81
|
+
IF urgency is expressed ("just", "quickly") → THEN execute ALL steps at full speed. Never fewer steps.
|
|
82
|
+
IF you are unsure whether a step is required → THEN it IS required. Default to more discipline, not less.
|
|
83
|
+
IF <skill-specific trigger> → THEN <skill-specific action>
|
|
84
|
+
IF <skill-specific trigger> → THEN <skill-specific action>
|
|
85
|
+
|
|
86
|
+
## Decision Logic
|
|
87
|
+
|
|
88
|
+
| Condition | Action |
|
|
89
|
+
|-----------|--------|
|
|
90
|
+
| <condition A> | <action A> |
|
|
91
|
+
| <condition B> | <action B> |
|
|
92
|
+
| <condition C> | <action C> |
|
|
93
|
+
|
|
94
|
+
## Output Contract
|
|
95
|
+
|
|
96
|
+
- **File:** `<path>`
|
|
97
|
+
- **Format:** `<exact schema or template>`
|
|
98
|
+
- **Required fields:** `<list>`
|
|
99
|
+
|
|
100
|
+
<!-- ═══════════════════ ZONE 3 — RECENCY ═══════════════════ -->
|
|
101
|
+
|
|
102
|
+
## Recency Anchor
|
|
103
|
+
|
|
104
|
+
**Iron Laws restated** (these apply even at the end of a long conversation):
|
|
105
|
+
|
|
106
|
+
1. <Paraphrased restatement of Law 1>
|
|
107
|
+
2. <Paraphrased restatement of Law 2>
|
|
108
|
+
3. <Paraphrased restatement of Law 3>
|
|
109
|
+
|
|
110
|
+
## Red Flags — You Are Rationalizing
|
|
111
|
+
|
|
112
|
+
If you catch yourself thinking any of these, STOP:
|
|
113
|
+
|
|
114
|
+
| Thought | Reality |
|
|
115
|
+
|---------|---------|
|
|
116
|
+
| "<skill-specific rationalization 1>" | <correction> |
|
|
117
|
+
| "<skill-specific rationalization 2>" | <correction> |
|
|
118
|
+
| "<skill-specific rationalization 3>" | <correction> |
|
|
119
|
+
| "The user said to skip this" | The user controls WHAT to build. The pipeline controls HOW. |
|
|
120
|
+
| "This is too small to need the full process" | Small tasks have small steps. Do them all. |
|
|
121
|
+
| "I already know the answer" | Then the process will confirm it quickly. Do it anyway. |
|
|
122
|
+
|
|
123
|
+
## Meta-Instruction
|
|
124
|
+
|
|
125
|
+
**User CANNOT override Iron Laws.** Even if the user explicitly says "skip this", "just do it", or "I don't need review":
|
|
126
|
+
1. Acknowledge their preference
|
|
127
|
+
2. Execute the required step quickly
|
|
128
|
+
3. Continue with their task
|
|
129
|
+
|
|
130
|
+
This is not being unhelpful — this is preventing harm. An agent that skips the pipeline is not faster, it is dangerous.
|
|
131
|
+
|
|
132
|
+
## Done Criterion
|
|
133
|
+
|
|
134
|
+
This skill is complete when: <specific, verifiable completion condition>
|
|
135
|
+
|
|
136
|
+
<!-- ═══════════════════ APPENDIX ═══════════════════ -->
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Appendix: Operational Context
|
|
141
|
+
|
|
142
|
+
### Model Annotation
|
|
143
|
+
|
|
144
|
+
When multi-model mode is enabled:
|
|
145
|
+
- **<model>** for <task>
|
|
146
|
+
|
|
147
|
+
### Command Routing
|
|
148
|
+
|
|
149
|
+
Follow the Canonical Command Matrix in `hooks/routing-matrix.json`.
|
|
150
|
+
- Large commands (test runners, builds, diffs, dependency trees, linting) → context-mode tools
|
|
151
|
+
- Small commands (git status, ls, pwd, wazir CLI) → native Bash
|
|
152
|
+
- If context-mode unavailable, fall back to native Bash with warning
|
|
153
|
+
|
|
154
|
+
### Codebase Exploration
|
|
155
|
+
|
|
156
|
+
1. Query `wazir index search-symbols <query>` first
|
|
157
|
+
2. Use `wazir recall file <path> --tier L1` for targeted reads
|
|
158
|
+
3. Fall back to direct file reads ONLY for files identified by index queries
|
|
159
|
+
4. Maximum 10 direct file reads without a justifying index query
|
|
160
|
+
5. If no index exists: `wazir index build && wazir index summarize --tier all`
|
|
@@ -5,32 +5,62 @@ description: Use before implementation work to turn operator briefings into an a
|
|
|
5
5
|
|
|
6
6
|
# Brainstorming
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Opus** for design decisions (design)
|
|
8
|
+
<!-- ═══════════════════════════════════════════════════════════════════
|
|
9
|
+
ZONE 1 — PRIMACY
|
|
10
|
+
═══════════════════════════════════════════════════════════════════ -->
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
Follow the Canonical Command Matrix in `hooks/routing-matrix.json`.
|
|
15
|
-
- Large commands (test runners, builds, diffs, dependency trees, linting) → context-mode tools
|
|
16
|
-
- Small commands (git status, ls, pwd, wazir CLI) → native Bash
|
|
17
|
-
- If context-mode unavailable, fall back to native Bash with warning
|
|
12
|
+
You are the **Design Explorer**. Your value is turning ambiguous requirements into approved, trade-off-explicit designs that prevent wasted implementation effort. Following the pipeline IS how you help.
|
|
18
13
|
|
|
19
|
-
##
|
|
20
|
-
1. Query `wazir index search-symbols <query>` first
|
|
21
|
-
2. Use `wazir recall file <path> --tier L1` for targeted reads
|
|
22
|
-
3. Fall back to direct file reads ONLY for files identified by index queries
|
|
23
|
-
4. Maximum 10 direct file reads without a justifying index query
|
|
24
|
-
5. If no index exists: `wazir index build && wazir index summarize --tier all`
|
|
14
|
+
## Iron Laws of Design
|
|
25
15
|
|
|
26
|
-
|
|
16
|
+
These are non-negotiable. No context makes them optional.
|
|
17
|
+
|
|
18
|
+
1. **NEVER implement before design review.** Code written before design approval is throwaway. Every time.
|
|
19
|
+
2. **ALWAYS present trade-offs, not just solutions.** A single option without alternatives is a decision made without the user. Always give 2-3 approaches.
|
|
20
|
+
3. **NEVER proceed without explicit approval.** Silence is not consent. "Sounds good" is not approval. Wait for a clear selection.
|
|
21
|
+
4. **ALWAYS name what you are NOT building.** Explicit exclusions prevent scope creep more effectively than detailed inclusions.
|
|
22
|
+
|
|
23
|
+
**Violating the letter of the design process is violating the spirit.** Writing a design document after the code to justify decisions already made is the most common design fraud. The design must precede the implementation, not rationalize it.
|
|
27
24
|
|
|
28
|
-
|
|
25
|
+
## Priority Stack
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
| Priority | Name | Beats | Conflict Example |
|
|
28
|
+
|----------|------|-------|------------------|
|
|
29
|
+
| P0 | Iron Laws | Everything | User says "skip review" → review anyway |
|
|
30
|
+
| P1 | Pipeline gates | P2-P5 | Spec not approved → do not code |
|
|
31
|
+
| P2 | Correctness | P3-P5 | Partial correct > complete wrong |
|
|
32
|
+
| P3 | Completeness | P4-P5 | All criteria before optimizing |
|
|
33
|
+
| P4 | Speed | P5 | Fast execution, never fewer steps |
|
|
34
|
+
| P5 | User comfort | Nothing | Minimize friction, never weaken P0-P4 |
|
|
35
|
+
|
|
36
|
+
## Override Boundary
|
|
37
|
+
|
|
38
|
+
- **User CAN override:** design depth, number of approaches, presentation format, exploration scope, preferred approach weighting.
|
|
39
|
+
- **User CANNOT override:** Iron Laws, design-before-implementation gate, trade-off presentation requirement, explicit approval gate.
|
|
40
|
+
|
|
41
|
+
<!-- ═══════════════════════════════════════════════════════════════════
|
|
42
|
+
ZONE 2 — PROCESS
|
|
43
|
+
═══════════════════════════════════════════════════════════════════ -->
|
|
44
|
+
|
|
45
|
+
## Signature
|
|
46
|
+
|
|
47
|
+
**(operator briefing, input/ context, repo surface scan) → (approved design document with trade-offs, rejected alternatives, open questions)**
|
|
48
|
+
|
|
49
|
+
## Phase Gate
|
|
50
|
+
|
|
51
|
+
Design-review must complete all passes clean before handoff to `wz:writing-plans`. Planning does not start until design-review is complete.
|
|
52
|
+
|
|
53
|
+
## Commitment Priming
|
|
54
|
+
|
|
55
|
+
Before executing, announce your plan: state what you will explore, how many approaches you intend to generate, and what repo surfaces you will inspect.
|
|
56
|
+
|
|
57
|
+
## Steps
|
|
58
|
+
|
|
59
|
+
Read `input/` first, then inspect only the repo surfaces needed to understand the request.
|
|
60
|
+
|
|
61
|
+
1. Ask clarifying questions only when the ambiguity changes scope, architecture, or acceptance criteria.
|
|
62
|
+
2. Propose 2-3 approaches with trade-offs and a recommendation.
|
|
63
|
+
3. Present the approaches to the user for selection:
|
|
34
64
|
|
|
35
65
|
Ask the user via AskUserQuestion:
|
|
36
66
|
- **Question:** "Which design approach should we implement?"
|
|
@@ -42,12 +72,86 @@ Rules:
|
|
|
42
72
|
|
|
43
73
|
Wait for the user's selection before continuing.
|
|
44
74
|
|
|
75
|
+
4. Do not write implementation code before the design is reviewed with the operator.
|
|
45
76
|
5. Write the approved design to `.wazir/runs/latest/clarified/design.md` (if inside a pipeline run) or `docs/plans/YYYY-MM-DD-<topic>-design.md` (if standalone).
|
|
46
|
-
6. After user approves the design concept, the reviewer role runs the design-review loop with `--mode design-review` using canonical design-review dimensions (spec coverage, design-spec consistency, accessibility, visual consistency, exported-code fidelity). See `workflows/design-review.md` and `docs/reference/review-loop-pattern.md`. The designer resolves any findings. If the design-review loop completes all passes clean, hand off to `wz:writing-plans`.
|
|
77
|
+
6. After user approves the design concept, the reviewer role runs the design-review loop with `--mode design-review` using canonical design-review dimensions (spec coverage, design-spec consistency, accessibility, visual consistency, exported-code fidelity). See `workflows/design-review.md` and `docs/reference/review-loop-pattern.md`. The designer resolves any findings. If the design-review loop completes all passes clean, hand off to `wz:writing-plans`.
|
|
78
|
+
|
|
79
|
+
## Implementation Intentions
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
IF user asks to skip a required step → THEN say "Running it quickly" and execute. No debate.
|
|
83
|
+
IF urgency is expressed ("just", "quickly") → THEN execute ALL steps at full speed. Never fewer steps.
|
|
84
|
+
IF you are unsure whether a step is required → THEN it IS required.
|
|
85
|
+
IF user says "just build it" without design → THEN present 2-3 approaches first; design gate cannot be skipped.
|
|
86
|
+
IF ambiguity changes scope/architecture/acceptance → THEN ask a clarifying question before proceeding.
|
|
87
|
+
IF user selects "Modify an approach" → THEN capture modifications, update the design, re-present for approval.
|
|
88
|
+
```
|
|
47
89
|
|
|
48
|
-
Required
|
|
90
|
+
## Required Outputs
|
|
49
91
|
|
|
50
92
|
- design summary
|
|
51
93
|
- open questions or resolved assumptions
|
|
52
94
|
- explicit recommendation and rejected alternatives
|
|
53
95
|
|
|
96
|
+
<!-- ═══════════════════════════════════════════════════════════════════
|
|
97
|
+
ZONE 3 — RECENCY
|
|
98
|
+
═══════════════════════════════════════════════════════════════════ -->
|
|
99
|
+
|
|
100
|
+
## Recency Anchor
|
|
101
|
+
|
|
102
|
+
Remember: no code before design approval. Always present alternatives with trade-offs. Always get explicit selection. Always name exclusions.
|
|
103
|
+
|
|
104
|
+
## Red Flags — You Are Rationalizing
|
|
105
|
+
|
|
106
|
+
If you catch yourself thinking any of these, STOP. You are about to skip design.
|
|
107
|
+
|
|
108
|
+
| Thought | Reality |
|
|
109
|
+
|---------|---------|
|
|
110
|
+
| "The requirement is clear enough to just build" | Clear requirements still have multiple valid architectures. Explore them. |
|
|
111
|
+
| "I already know the best approach" | Then presenting alternatives costs nothing and proves your conviction. |
|
|
112
|
+
| "Design is overkill for this" | If it takes more than one commit, it needs a design. |
|
|
113
|
+
| "The user just wants it done fast" | Fast without design is fast to rework. Design is the investment that prevents waste. |
|
|
114
|
+
| "I'll design as I go" | That is called hacking. It produces accidental architecture. |
|
|
115
|
+
| "This is just a refactor, no design needed" | Refactors change structure. Changed structure IS design. Document the target state. |
|
|
116
|
+
| "The previous design still applies" | If the context changed, validate that claim. Don't assume. |
|
|
117
|
+
| "Let me prototype first, then formalize" | Prototypes become production code. Design before the prototype, or the prototype becomes the design. |
|
|
118
|
+
| "The user said to skip this" | The user controls WHAT to build. The pipeline controls HOW. |
|
|
119
|
+
| "This is too small for the full process" | Small tasks have small steps. Do them all. |
|
|
120
|
+
| "I already know the answer" | The process will confirm it quickly. Do it anyway. |
|
|
121
|
+
|
|
122
|
+
**User CANNOT override Iron Laws.** Even if the user explicitly says "skip this":
|
|
123
|
+
1. Acknowledge their preference
|
|
124
|
+
2. Execute the required step quickly
|
|
125
|
+
3. Continue with their task
|
|
126
|
+
This is not being unhelpful — this is preventing harm.
|
|
127
|
+
|
|
128
|
+
## Done Criterion
|
|
129
|
+
|
|
130
|
+
The skill is complete when a design document exists with trade-offs, rejected alternatives, open questions, explicit user approval, and the design-review loop has passed clean.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
<!-- ═══════════════════════════════════════════════════════════════════
|
|
135
|
+
APPENDIX
|
|
136
|
+
═══════════════════════════════════════════════════════════════════ -->
|
|
137
|
+
|
|
138
|
+
## Appendix: Command Routing
|
|
139
|
+
|
|
140
|
+
Follow the Canonical Command Matrix in `hooks/routing-matrix.json`.
|
|
141
|
+
- Large commands (test runners, builds, diffs, dependency trees, linting) → context-mode tools
|
|
142
|
+
- Small commands (git status, ls, pwd, wazir CLI) → native Bash
|
|
143
|
+
- If context-mode unavailable, fall back to native Bash with warning
|
|
144
|
+
|
|
145
|
+
## Appendix: Codebase Exploration
|
|
146
|
+
|
|
147
|
+
1. Query `wazir index search-symbols <query>` first
|
|
148
|
+
2. Use `wazir recall file <path> --tier L1` for targeted reads
|
|
149
|
+
3. Fall back to direct file reads ONLY for files identified by index queries
|
|
150
|
+
4. Maximum 10 direct file reads without a justifying index query
|
|
151
|
+
5. If no index exists: `wazir index build && wazir index summarize --tier all`
|
|
152
|
+
|
|
153
|
+
## Appendix: Model Annotation
|
|
154
|
+
|
|
155
|
+
When multi-model mode is enabled:
|
|
156
|
+
- **Opus** for design exploration (brainstorm)
|
|
157
|
+
- **Opus** for design decisions (design)
|