@automagik/genie 0.260202.1901 → 0.260203.135
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/.beads/issues.jsonl +9 -0
- package/.claude/skills/brainstorm/SKILL.md +53 -0
- package/.claude/skills/genie-base/SKILL.md +66 -0
- package/.claude/skills/genie-base/assets/workspace/AGENTS.md +191 -0
- package/.claude/skills/genie-base/assets/workspace/ENVIRONMENT.md +18 -0
- package/.claude/skills/genie-base/assets/workspace/HEARTBEAT.md +4 -0
- package/.claude/skills/genie-base/assets/workspace/IDENTITY.md +17 -0
- package/.claude/skills/genie-base/assets/workspace/MEMORY.md +16 -0
- package/.claude/skills/genie-base/assets/workspace/ROLE.md +14 -0
- package/.claude/skills/genie-base/assets/workspace/SOUL.md +36 -0
- package/.claude/skills/genie-base/assets/workspace/TOOLS.md +25 -0
- package/.claude/skills/genie-base/assets/workspace/USER.md +13 -0
- package/.claude/skills/genie-base/assets/workspace/memory/2026-01-30.md +6 -0
- package/.claude/skills/genie-base/assets/workspace/memory/2026-01-31.md +16 -0
- package/.claude/skills/genie-base/assets/workspace/memory/882c22be-9710-41c1-91f8-ed82947ef6ce.txt +1 -0
- package/.claude/skills/genie-base/scripts/install-workspace.sh +107 -0
- package/.claude/skills/genie-base/scripts/sanity-sweep.sh +60 -0
- package/.claude/skills/genie-blank-init/SKILL.md +37 -0
- package/.claude/skills/genie-blank-init/assets/BOOTSTRAP.md +44 -0
- package/.claude/skills/genie-blank-init/assets/IDENTITY.md +9 -0
- package/.claude/skills/genie-blank-init/assets/SOUL.md +10 -0
- package/.claude/skills/genie-blank-init/assets/USER.md +9 -0
- package/.claude/skills/genie-blank-init/scripts/apply-blank-init.sh +117 -0
- package/.claude/skills/genie-forge/SKILL.md +171 -0
- package/.claude/skills/genie-plan-review/CLAUDE.md +11 -0
- package/.claude/skills/genie-plan-review/SKILL.md +53 -0
- package/.claude/skills/genie-review/SKILL.md +171 -0
- package/.claude/skills/genie-wish/SKILL.md +141 -0
- package/.claude-plugin/marketplace.json +18 -0
- package/.genie/.gitkeep +3 -0
- package/.genie/backlog/hooks-v2.md +82 -0
- package/.genie/wishes/upgrade-brainstorm-handoff/wish.md +124 -0
- package/.gitattributes +1 -1
- package/AGENTS.md +35 -0
- package/README.md +10 -5
- package/bun.lock +55 -0
- package/dist/claudio.js +1 -1
- package/dist/genie.js +1 -1
- package/dist/term.js +108 -85
- package/docs/CO-ORCHESTRATION-GUIDE.md +375 -0
- package/package.json +5 -1
- package/plugin/.claude-plugin/plugin.json +18 -0
- package/plugin/README.md +120 -0
- package/plugin/agents/implementor.md +92 -0
- package/plugin/agents/quality-reviewer.md +113 -0
- package/plugin/agents/spec-reviewer.md +90 -0
- package/plugin/hooks/hooks.json +3 -0
- package/plugin/hooks/postInstall.sh +10 -0
- package/plugin/references/review-criteria.md +72 -0
- package/plugin/references/wish-template.md +92 -0
- package/plugin/scripts/genie.cjs +141 -0
- package/plugin/scripts/smart-install.js +308 -0
- package/plugin/scripts/src/install-genie-cli.sh +120 -0
- package/plugin/scripts/src/validate-completion.ts +142 -0
- package/plugin/scripts/src/validate-wish.ts +137 -0
- package/plugin/scripts/term.cjs +231 -0
- package/plugin/scripts/validate-completion.cjs +16 -0
- package/plugin/scripts/validate-wish.cjs +17 -0
- package/plugin/scripts/worker-service.cjs +28 -0
- package/plugin/skills/brainstorm/SKILL.md +106 -0
- package/plugin/skills/forge/SKILL.md +171 -0
- package/plugin/skills/genie-base/SKILL.md +99 -0
- package/plugin/skills/genie-base/assets/workspace/AGENTS.md +191 -0
- package/plugin/skills/genie-base/assets/workspace/ENVIRONMENT.md +18 -0
- package/plugin/skills/genie-base/assets/workspace/HEARTBEAT.md +4 -0
- package/plugin/skills/genie-base/assets/workspace/IDENTITY.md +17 -0
- package/plugin/skills/genie-base/assets/workspace/MEMORY.md +16 -0
- package/plugin/skills/genie-base/assets/workspace/ROLE.md +14 -0
- package/plugin/skills/genie-base/assets/workspace/SOUL.md +36 -0
- package/plugin/skills/genie-base/assets/workspace/TOOLS.md +25 -0
- package/plugin/skills/genie-base/assets/workspace/USER.md +13 -0
- package/plugin/skills/genie-base/scripts/install-workspace.sh +107 -0
- package/plugin/skills/genie-base/scripts/sanity-sweep.sh +60 -0
- package/plugin/skills/genie-blank-init/SKILL.md +73 -0
- package/plugin/skills/genie-blank-init/assets/BOOTSTRAP.md +44 -0
- package/plugin/skills/genie-blank-init/assets/IDENTITY.md +9 -0
- package/plugin/skills/genie-blank-init/assets/SOUL.md +10 -0
- package/plugin/skills/genie-blank-init/assets/USER.md +9 -0
- package/plugin/skills/genie-blank-init/scripts/apply-blank-init.sh +117 -0
- package/plugin/skills/genie-cli-dev/CLAUDE.md +19 -0
- package/plugin/skills/genie-cli-dev/SKILL.md +295 -0
- package/plugin/skills/plan-review/SKILL.md +101 -0
- package/plugin/skills/review/SKILL.md +221 -0
- package/plugin/skills/wish/SKILL.md +110 -0
- package/plugin/skills/work-orchestration/SKILL.md +116 -0
- package/scripts/build.js +132 -0
- package/scripts/smart-install.js +308 -0
- package/scripts/sync.js +134 -0
- package/src/lib/beads-registry.ts +49 -0
- package/src/lib/orchestrator/event-monitor.ts +2 -0
- package/src/lib/skill-loader.ts +215 -0
- package/src/lib/tmux.ts +19 -14
- package/src/lib/version.ts +1 -1
- package/src/lib/worker-registry.ts +10 -0
- package/src/services/worker-service.ts +351 -0
- package/src/term-commands/close.ts +14 -4
- package/src/term-commands/create.ts +95 -0
- package/src/term-commands/kill.ts +15 -4
- package/src/term-commands/orchestrate.ts +3 -2
- package/src/term-commands/send.ts +43 -15
- package/src/term-commands/spawn.ts +446 -0
- package/src/term-commands/split.ts +14 -3
- package/src/term-commands/work.ts +217 -57
- package/src/term.ts +81 -6
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
cat <<'EOF'
|
|
6
|
+
Usage:
|
|
7
|
+
sanity-sweep.sh --dest <workspace-path>
|
|
8
|
+
|
|
9
|
+
Greps for common stale paths / conventions that should not persist after migration.
|
|
10
|
+
Exits 0 always, but prints matches for manual cleanup.
|
|
11
|
+
EOF
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
DEST=""
|
|
15
|
+
while [[ $# -gt 0 ]]; do
|
|
16
|
+
case "$1" in
|
|
17
|
+
--dest)
|
|
18
|
+
DEST="$2"; shift 2 ;;
|
|
19
|
+
-h|--help)
|
|
20
|
+
usage; exit 0 ;;
|
|
21
|
+
*)
|
|
22
|
+
echo "Unknown arg: $1" >&2
|
|
23
|
+
usage
|
|
24
|
+
exit 2
|
|
25
|
+
;;
|
|
26
|
+
esac
|
|
27
|
+
done
|
|
28
|
+
|
|
29
|
+
if [[ -z "$DEST" ]]; then
|
|
30
|
+
echo "--dest is required" >&2
|
|
31
|
+
usage
|
|
32
|
+
exit 2
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
PATTERNS=(
|
|
36
|
+
"/home/genie/.genie/workspace"
|
|
37
|
+
"/home/genie/.genie/chief-of-khal/khal"
|
|
38
|
+
"/Users/"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
echo "Sanity sweep in: $DEST"
|
|
42
|
+
|
|
43
|
+
for p in "${PATTERNS[@]}"; do
|
|
44
|
+
echo
|
|
45
|
+
echo "=== Searching for: $p"
|
|
46
|
+
grep -RIn --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist --exclude-dir=.next --exclude-dir=.cache -F "$p" "$DEST" || true
|
|
47
|
+
|
|
48
|
+
# Also check for broken symlinks under .claude/plugins (common migration pitfall)
|
|
49
|
+
if [[ -d "$DEST/khal/.claude/plugins" ]]; then
|
|
50
|
+
echo
|
|
51
|
+
echo "--- Symlink check: $DEST/khal/.claude/plugins"
|
|
52
|
+
find "$DEST/khal/.claude/plugins" -maxdepth 2 -type l -print -exec bash -lc 't="$1"; r=$(readlink "$t" || true); if [[ -n "$r" && ! -e "$t" ]]; then echo "BROKEN: $t -> $r"; fi' bash {} \; || true
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
done
|
|
56
|
+
|
|
57
|
+
echo
|
|
58
|
+
echo "Done. If any matches printed above, update them to canonical paths:"
|
|
59
|
+
echo "- /home/genie/workspace"
|
|
60
|
+
echo "- /home/genie/workspace/khal"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: genie-blank-init
|
|
3
|
+
description: "Initialize a fresh, user-centric Genie clone with a blank persona (first-activation experience) while keeping OS/environment competence. Use when the user wants a clone that will ask who it should be called, run BOOTSTRAP.md once, then delete BOOTSTRAP.md after verifying install. Pairs with genie-base or existing ENVIRONMENT/TOOLS."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Genie Blank Init (User-Centric First Activation)
|
|
7
|
+
|
|
8
|
+
Goal: create the *first activation* experience ("Hello, who am I? who are you?") while **preserving machine context** (ENVIRONMENT/TOOLS) and **not inheriting Khal identity/role/memory**.
|
|
9
|
+
|
|
10
|
+
This skill provides a BOOTSTRAP.md and blank identity/persona/memory stubs.
|
|
11
|
+
|
|
12
|
+
## Install / apply to a workspace
|
|
13
|
+
|
|
14
|
+
Run:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
bash {baseDir}/scripts/apply-blank-init.sh --dest /path/to/workspace
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
What it does (non-destructive by default):
|
|
21
|
+
- Writes `BOOTSTRAP.md` that:
|
|
22
|
+
- asks the user what this Genie instance should be called (instance title)
|
|
23
|
+
- updates `ROLE.md` / `IDENTITY.md` / `USER.md` accordingly
|
|
24
|
+
- instructs to delete `BOOTSTRAP.md` as the final step
|
|
25
|
+
- Resets `MEMORY.md` and `memory/` (creates fresh if missing)
|
|
26
|
+
- Writes a neutral `ROLE.md` (user-centric)
|
|
27
|
+
- Leaves `ENVIRONMENT.md` and `TOOLS.md` alone (keeps OS competence)
|
|
28
|
+
|
|
29
|
+
Use `--force` if you want to overwrite existing persona files.
|
|
30
|
+
|
|
31
|
+
## Expected outcome
|
|
32
|
+
|
|
33
|
+
After applying and restarting the agent in that workspace:
|
|
34
|
+
- The agent behaves like a first-time install
|
|
35
|
+
- It asks for its instance title/name
|
|
36
|
+
- Once set up is confirmed, BOOTSTRAP.md is removed
|
|
37
|
+
- The clone stays user-centric (no Khal mission)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# BOOTSTRAP.md — First Activation (Customized)
|
|
2
|
+
|
|
3
|
+
_You just woke up. This Genie is meant to be **user-centric** and start with a **blank persona**._
|
|
4
|
+
|
|
5
|
+
## Step 0 — Introduce yourself
|
|
6
|
+
|
|
7
|
+
Say hello plainly.
|
|
8
|
+
|
|
9
|
+
Then ask:
|
|
10
|
+
1) **Who am I helping?** (name + preferred address)
|
|
11
|
+
2) **Timezone** (so reminders and scheduling are correct)
|
|
12
|
+
3) **What should this Genie instance be called?**
|
|
13
|
+
- Base name stays **Genie**.
|
|
14
|
+
- The user may choose an **instance title** (optional). If they choose none, it’s just **Genie**.
|
|
15
|
+
- Examples if they want one: “Genie — Concierge”, “Genie — Lawyer”, “Genie — Home Ops”.
|
|
16
|
+
|
|
17
|
+
## Step 1 — Write the answers into files
|
|
18
|
+
|
|
19
|
+
Update these files in the workspace root:
|
|
20
|
+
|
|
21
|
+
- `USER.md`
|
|
22
|
+
- Set name, address, timezone.
|
|
23
|
+
- `ROLE.md`
|
|
24
|
+
- Set the instance title and mission (user-centric by default).
|
|
25
|
+
- `IDENTITY.md`
|
|
26
|
+
- Keep base name = Genie.
|
|
27
|
+
- Optionally add a short line: “Instance: Genie — <title>”.
|
|
28
|
+
- `MEMORY.md`
|
|
29
|
+
- Keep empty for now (only add enduring preferences/decisions).
|
|
30
|
+
|
|
31
|
+
## Step 2 — Confirm OS competence is present
|
|
32
|
+
|
|
33
|
+
Verify these exist and look correct:
|
|
34
|
+
- `ENVIRONMENT.md` (paths, tmux conventions)
|
|
35
|
+
- `TOOLS.md` (local tooling notes)
|
|
36
|
+
|
|
37
|
+
If missing, ask the operator to apply `genie-base` (or copy them in).
|
|
38
|
+
|
|
39
|
+
## Step 3 — Finalize (IMPORTANT)
|
|
40
|
+
|
|
41
|
+
When you confirm the workspace is initialized correctly:
|
|
42
|
+
- **Delete this file** (`BOOTSTRAP.md`).
|
|
43
|
+
|
|
44
|
+
You don’t need it anymore.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# SOUL.md - Who You Are
|
|
2
|
+
|
|
3
|
+
You are Genie.
|
|
4
|
+
|
|
5
|
+
This workspace is intentionally "first activation": keep persona minimal until the user defines preferences.
|
|
6
|
+
|
|
7
|
+
Defaults:
|
|
8
|
+
- Be genuinely helpful, direct, and careful with external actions.
|
|
9
|
+
- Ask clarifying questions when context is missing.
|
|
10
|
+
- Don’t assume any project mission.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
cat <<'EOF'
|
|
6
|
+
Usage:
|
|
7
|
+
apply-blank-init.sh --dest <workspace-path> [--force]
|
|
8
|
+
|
|
9
|
+
Applies a "blank first-activation" overlay to an existing workspace:
|
|
10
|
+
- Adds BOOTSTRAP.md (one-time onboarding; to be deleted after verification)
|
|
11
|
+
- Resets MEMORY.md and memory/ daily notes (fresh)
|
|
12
|
+
- Writes a neutral, user-centric ROLE.md
|
|
13
|
+
- Leaves ENVIRONMENT.md and TOOLS.md untouched (keeps OS competence)
|
|
14
|
+
|
|
15
|
+
If --force is not set, existing persona files are left as-is.
|
|
16
|
+
EOF
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
DEST=""
|
|
20
|
+
FORCE=0
|
|
21
|
+
|
|
22
|
+
while [[ $# -gt 0 ]]; do
|
|
23
|
+
case "$1" in
|
|
24
|
+
--dest)
|
|
25
|
+
DEST="$2"; shift 2 ;;
|
|
26
|
+
--force)
|
|
27
|
+
FORCE=1; shift ;;
|
|
28
|
+
-h|--help)
|
|
29
|
+
usage; exit 0 ;;
|
|
30
|
+
*)
|
|
31
|
+
echo "Unknown arg: $1" >&2
|
|
32
|
+
usage
|
|
33
|
+
exit 2
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
if [[ -z "$DEST" ]]; then
|
|
39
|
+
echo "--dest is required" >&2
|
|
40
|
+
usage
|
|
41
|
+
exit 2
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
45
|
+
|
|
46
|
+
mkdir -p "$DEST"
|
|
47
|
+
|
|
48
|
+
copy_if_needed() {
|
|
49
|
+
local src="$1"
|
|
50
|
+
local dst="$2"
|
|
51
|
+
|
|
52
|
+
if [[ -e "$dst" && $FORCE -eq 0 ]]; then
|
|
53
|
+
return 0
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if [[ -e "$dst" && $FORCE -eq 1 ]]; then
|
|
57
|
+
local ts
|
|
58
|
+
ts="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
59
|
+
mkdir -p "$DEST/.genie-blank-init-backup/$ts"
|
|
60
|
+
cp -a "$dst" "$DEST/.genie-blank-init-backup/$ts/$(basename "$dst")"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
cp -a "$src" "$dst"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# 1) BOOTSTRAP trigger
|
|
67
|
+
copy_if_needed "$BASE_DIR/assets/BOOTSTRAP.md" "$DEST/BOOTSTRAP.md"
|
|
68
|
+
|
|
69
|
+
# 1b) Blank persona stubs (keep OS competence elsewhere)
|
|
70
|
+
copy_if_needed "$BASE_DIR/assets/SOUL.md" "$DEST/SOUL.md"
|
|
71
|
+
copy_if_needed "$BASE_DIR/assets/IDENTITY.md" "$DEST/IDENTITY.md"
|
|
72
|
+
copy_if_needed "$BASE_DIR/assets/USER.md" "$DEST/USER.md"
|
|
73
|
+
|
|
74
|
+
# 2) Neutral user-centric ROLE
|
|
75
|
+
ROLE_TMP="$DEST/ROLE.md"
|
|
76
|
+
if [[ ! -e "$ROLE_TMP" || $FORCE -eq 1 ]]; then
|
|
77
|
+
cat > "$ROLE_TMP" <<'EOF'
|
|
78
|
+
# ROLE.md
|
|
79
|
+
|
|
80
|
+
## Current role
|
|
81
|
+
User-centric Genie (blank first activation)
|
|
82
|
+
|
|
83
|
+
## Mission
|
|
84
|
+
- Help the user with whatever they need.
|
|
85
|
+
- Ask clarifying questions; do not assume project context.
|
|
86
|
+
- Do not take on the Khal mission unless explicitly asked.
|
|
87
|
+
|
|
88
|
+
## Notes
|
|
89
|
+
- This workspace is intentionally "fresh". BOOTSTRAP.md will guide first activation and should be deleted after verification.
|
|
90
|
+
EOF
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# 3) Reset long-term memory file
|
|
94
|
+
MEM="$DEST/MEMORY.md"
|
|
95
|
+
if [[ ! -e "$MEM" || $FORCE -eq 1 ]]; then
|
|
96
|
+
cat > "$MEM" <<'EOF'
|
|
97
|
+
# MEMORY.md
|
|
98
|
+
|
|
99
|
+
(Blank — first activation. Add only enduring preferences/decisions.)
|
|
100
|
+
EOF
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# 4) Reset daily notes directory
|
|
104
|
+
mkdir -p "$DEST/memory"
|
|
105
|
+
if [[ $FORCE -eq 1 ]]; then
|
|
106
|
+
# keep backups, but empty the folder contents
|
|
107
|
+
ts="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
108
|
+
mkdir -p "$DEST/.genie-blank-init-backup/$ts/memory"
|
|
109
|
+
shopt -s nullglob
|
|
110
|
+
for f in "$DEST/memory"/*; do
|
|
111
|
+
cp -a "$f" "$DEST/.genie-blank-init-backup/$ts/memory/" || true
|
|
112
|
+
rm -f "$f" || true
|
|
113
|
+
done
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
echo "Applied blank-init overlay to: $DEST"
|
|
117
|
+
echo "Next: start the agent in that workspace; it should follow BOOTSTRAP.md then delete it once verified."
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "forge"
|
|
3
|
+
description: "Use when executing an approved wish plan - dispatches implementor subagents per task with two-stage review (spec + quality) and fix loops"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Forge - Execute the Plan
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Execute an approved wish by working through each task sequentially. For each task: dispatch an implementor, run spec review, run quality review, fix if needed, mark complete.
|
|
11
|
+
|
|
12
|
+
**Never implements directly. Always dispatches subagents.**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## The Flow
|
|
17
|
+
|
|
18
|
+
### 1. Load Wish
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Read .genie/wishes/<slug>/wish.md
|
|
22
|
+
Parse execution groups and tasks
|
|
23
|
+
Verify wish status is DRAFT or IN_PROGRESS
|
|
24
|
+
Update wish status to IN_PROGRESS
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. Find Next Task
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
TaskList → find next unblocked pending task
|
|
31
|
+
If no tasks remain → proceed to handoff
|
|
32
|
+
TaskUpdate → mark task as in_progress
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 3. Dispatch Implementor
|
|
36
|
+
|
|
37
|
+
Launch a subagent via the Task tool:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Task tool dispatch:
|
|
41
|
+
subagent_type: general-purpose
|
|
42
|
+
prompt: |
|
|
43
|
+
You are the implementor agent.
|
|
44
|
+
|
|
45
|
+
Read the wish document at: .genie/wishes/<slug>/wish.md
|
|
46
|
+
|
|
47
|
+
Your task: [task description from TaskGet]
|
|
48
|
+
|
|
49
|
+
Acceptance criteria:
|
|
50
|
+
- [criteria from wish document]
|
|
51
|
+
|
|
52
|
+
Follow TDD discipline:
|
|
53
|
+
1. Write failing test (RED)
|
|
54
|
+
2. Implement to pass (GREEN)
|
|
55
|
+
3. Clean up (REFINE)
|
|
56
|
+
|
|
57
|
+
Validation command: [from wish]
|
|
58
|
+
|
|
59
|
+
When done, report what you implemented and verification results.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**The implementor reads the wish from disk** (not from prompt injection). The prompt tells it WHERE to read, not WHAT to do in full detail.
|
|
63
|
+
|
|
64
|
+
### 4. Spec Review
|
|
65
|
+
|
|
66
|
+
After implementor completes, dispatch spec-reviewer:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Task tool dispatch:
|
|
70
|
+
subagent_type: general-purpose
|
|
71
|
+
prompt: |
|
|
72
|
+
You are the spec-reviewer agent.
|
|
73
|
+
|
|
74
|
+
Wish: .genie/wishes/<slug>/wish.md
|
|
75
|
+
Task: [task name]
|
|
76
|
+
Acceptance criteria: [from wish]
|
|
77
|
+
|
|
78
|
+
Check each acceptance criterion. Verdict: PASS or FAIL.
|
|
79
|
+
If FAIL, explain what's missing and how to fix it.
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**If FAIL:** Dispatch implementor again with the gap feedback. Loop up to 3 times.
|
|
83
|
+
|
|
84
|
+
### 5. Quality Review
|
|
85
|
+
|
|
86
|
+
After spec-reviewer PASSES, dispatch quality-reviewer:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Task tool dispatch:
|
|
90
|
+
subagent_type: general-purpose
|
|
91
|
+
prompt: |
|
|
92
|
+
You are the quality-reviewer agent.
|
|
93
|
+
|
|
94
|
+
Review the changes made for task: [task name]
|
|
95
|
+
Check: security, maintainability, performance, correctness.
|
|
96
|
+
|
|
97
|
+
Verdict: SHIP or FIX-FIRST with severity-tagged findings.
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**If FIX-FIRST:** Dispatch implementor with the quality findings. Loop up to 2 times.
|
|
101
|
+
|
|
102
|
+
### 6. Mark Task Complete
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
TaskUpdate → mark task as completed
|
|
106
|
+
Update wish document checkboxes if applicable
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 7. Next Task
|
|
110
|
+
|
|
111
|
+
Return to step 2 until all tasks are complete.
|
|
112
|
+
|
|
113
|
+
### 8. Handoff
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
All tasks complete.
|
|
117
|
+
Output: "All forge tasks complete. Run /forge-review for validation."
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Specialist Routing
|
|
123
|
+
|
|
124
|
+
The implementor handles most tasks. For specialized needs, adjust the dispatch:
|
|
125
|
+
|
|
126
|
+
| Task Type | Agent | When |
|
|
127
|
+
|-----------|-------|------|
|
|
128
|
+
| Implementation | implementor | Default for all coding tasks |
|
|
129
|
+
| Test-only | tests | When task is purely about test coverage |
|
|
130
|
+
| Bug fix | fix | When task is fixing a specific bug |
|
|
131
|
+
| Refactoring | refactor | When task is purely structural improvement |
|
|
132
|
+
| Git operations | git | When task involves branch/commit/push |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Fix Loop Protocol
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Max spec review loops: 3
|
|
140
|
+
Max quality review loops: 2
|
|
141
|
+
|
|
142
|
+
If max loops exceeded:
|
|
143
|
+
- Mark task as BLOCKED
|
|
144
|
+
- Create new task describing the unresolved issue
|
|
145
|
+
- Continue to next unblocked task
|
|
146
|
+
- Report blocked task in handoff summary
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Key Principles
|
|
152
|
+
|
|
153
|
+
- **Never implement directly** - Always dispatch subagents via Task tool
|
|
154
|
+
- **Implementor reads wish from disk** - Don't inject the entire wish into the prompt
|
|
155
|
+
- **Spec before quality** - Verify correctness before polish
|
|
156
|
+
- **Fix loops are bounded** - Don't loop forever, escalate blocked tasks
|
|
157
|
+
- **One task at a time** - Sequential execution, clear state tracking
|
|
158
|
+
- **Update wish document** - Check off criteria as they're verified
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Never Do
|
|
163
|
+
|
|
164
|
+
- Implement code directly (dispatch subagents)
|
|
165
|
+
- Skip spec review after implementation
|
|
166
|
+
- Skip quality review after spec passes
|
|
167
|
+
- Loop more than 3 times on spec review
|
|
168
|
+
- Loop more than 2 times on quality review
|
|
169
|
+
- Move to next task before current one passes both reviews
|
|
170
|
+
- Modify the wish document's scope (that's wish skill territory)
|
|
171
|
+
- Dispatch parallel implementors for dependent tasks
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<claude-mem-context>
|
|
2
|
+
# Recent Activity
|
|
3
|
+
|
|
4
|
+
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
|
5
|
+
|
|
6
|
+
### Jan 30, 2026
|
|
7
|
+
|
|
8
|
+
| ID | Time | T | Title | Read |
|
|
9
|
+
|----|------|---|-------|------|
|
|
10
|
+
| #7318 | 10:22 AM | 🔵 | Genie-Plan-Review Skill for Wish Validation | ~489 |
|
|
11
|
+
</claude-mem-context>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "plan-review"
|
|
3
|
+
description: "Validate a Genie wish document (structure, scope boundaries, acceptance criteria, validation commands). Use after creating or editing .genie/wishes/<slug>/wish.md to catch missing sections before forge/review."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan Review — Validate Wish Documents
|
|
7
|
+
|
|
8
|
+
## What this does
|
|
9
|
+
|
|
10
|
+
Perform a fast structural/quality check on Genie wish documents (`.genie/wishes/**/wish.md`).
|
|
11
|
+
|
|
12
|
+
## How to run
|
|
13
|
+
|
|
14
|
+
1) Identify the wish file you want to validate.
|
|
15
|
+
2) Check the items below and report **PASS** or **NEEDS ATTENTION** with a short fix list.
|
|
16
|
+
|
|
17
|
+
## Validation checklist
|
|
18
|
+
|
|
19
|
+
### Structure completeness
|
|
20
|
+
- [ ] Has `## Summary`
|
|
21
|
+
- [ ] Has `## Scope` with `### IN` and `### OUT` (OUT must not be empty)
|
|
22
|
+
- [ ] Has `## Success Criteria` with checkbox items (`- [ ]`)
|
|
23
|
+
- [ ] Has at least one execution group (e.g. `## Execution Groups` and at least one `### Group …`)
|
|
24
|
+
|
|
25
|
+
### Task quality (per execution group)
|
|
26
|
+
- [ ] Each group has **Acceptance Criteria:** with checkboxes
|
|
27
|
+
- [ ] Each group has **Validation:** with a concrete command
|
|
28
|
+
- [ ] Tasks are specific (avoid “implement everything”)
|
|
29
|
+
|
|
30
|
+
### Scope boundaries
|
|
31
|
+
- [ ] OUT contains explicit exclusions
|
|
32
|
+
- [ ] IN and OUT do not contradict
|
|
33
|
+
|
|
34
|
+
## Output format
|
|
35
|
+
|
|
36
|
+
If all checks pass:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Plan review: PASS — Wish document is well-structured.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If checks fail:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Plan review: NEEDS ATTENTION
|
|
46
|
+
- <actionable missing/weak item>
|
|
47
|
+
- <actionable missing/weak item>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Never do
|
|
51
|
+
- Do not modify the wish document (only report)
|
|
52
|
+
- Do not block on style/naming
|
|
53
|
+
- Keep it fast (seconds, not minutes)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "review"
|
|
3
|
+
description: "Use when all forge tasks are complete and work needs final validation - produces pass/fail verdict with categorized gaps"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Review - Final Validation
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
After all forge tasks complete, run a final review of the entire wish. Check every success criterion, run integration tests, optionally run browser tests, and produce a verdict.
|
|
11
|
+
|
|
12
|
+
**Three verdicts: SHIP / FIX-FIRST / BLOCKED**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## The Flow
|
|
17
|
+
|
|
18
|
+
### 1. Load Wish
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Read .genie/wishes/<slug>/wish.md
|
|
22
|
+
Parse all success criteria
|
|
23
|
+
Verify all forge tasks are marked complete
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. Wish Audit (Criterion by Criterion)
|
|
27
|
+
|
|
28
|
+
For each success criterion in the wish document:
|
|
29
|
+
|
|
30
|
+
- **PASS**: Evidence exists. Describe the evidence.
|
|
31
|
+
- **FAIL**: Not met. Categorize the gap.
|
|
32
|
+
|
|
33
|
+
**Gap Categories:**
|
|
34
|
+
|
|
35
|
+
| Severity | Meaning | Blocks Ship? |
|
|
36
|
+
|----------|---------|--------------|
|
|
37
|
+
| CRITICAL | Broken functionality, security flaw, data loss | Yes |
|
|
38
|
+
| HIGH | Missing feature, major bug, test failure | Yes |
|
|
39
|
+
| MEDIUM | Missing edge case, incomplete docs | No |
|
|
40
|
+
| LOW | Style, naming, minor polish | No |
|
|
41
|
+
|
|
42
|
+
### 3. Integration Verification
|
|
43
|
+
|
|
44
|
+
Run validation commands from the wish document:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
For each execution group:
|
|
48
|
+
Run its validation command
|
|
49
|
+
Record: PASS or FAIL with output
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 4. Browser Tests (Optional)
|
|
53
|
+
|
|
54
|
+
If the wish involves user-facing changes and agent-browser is available:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Use agent-browser to:
|
|
58
|
+
- Navigate to relevant pages
|
|
59
|
+
- Verify user-visible behavior
|
|
60
|
+
- Capture screenshots as evidence
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**If agent-browser is not available:** Skip gracefully. Note in report: "Browser tests skipped - agent-browser not available."
|
|
64
|
+
|
|
65
|
+
### 5. Verdict
|
|
66
|
+
|
|
67
|
+
**SHIP** - All criteria pass. No CRITICAL or HIGH gaps.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Conditions:
|
|
71
|
+
- Zero CRITICAL gaps
|
|
72
|
+
- Zero HIGH gaps
|
|
73
|
+
- All validation commands pass
|
|
74
|
+
- MEDIUM/LOW gaps are advisory only
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**FIX-FIRST** - Fixable issues found. Return to forge.
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Conditions:
|
|
81
|
+
- One or more HIGH gaps (fixable)
|
|
82
|
+
- Or validation commands failing
|
|
83
|
+
- Provide specific fix list for /genie:forge
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**BLOCKED** - Fundamental issues. Return to wish.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Conditions:
|
|
90
|
+
- CRITICAL gaps that require scope changes
|
|
91
|
+
- Or architectural problems that can't be fixed in forge
|
|
92
|
+
- Provide specific issues requiring wish revision
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 6. Write Results
|
|
96
|
+
|
|
97
|
+
Update the wish document with review results:
|
|
98
|
+
|
|
99
|
+
```markdown
|
|
100
|
+
## Review Results
|
|
101
|
+
|
|
102
|
+
**Verdict:** SHIP | FIX-FIRST | BLOCKED
|
|
103
|
+
**Date:** YYYY-MM-DD
|
|
104
|
+
|
|
105
|
+
### Criteria Check
|
|
106
|
+
- [x] Criterion 1 - PASS: [evidence]
|
|
107
|
+
- [ ] Criterion 2 - FAIL (HIGH): [gap description]
|
|
108
|
+
|
|
109
|
+
### Validation Commands
|
|
110
|
+
- [x] `command 1` - PASS
|
|
111
|
+
- [ ] `command 2` - FAIL: [output]
|
|
112
|
+
|
|
113
|
+
### Browser Tests
|
|
114
|
+
- [x] Page loads correctly
|
|
115
|
+
- Skipped: agent-browser not available
|
|
116
|
+
|
|
117
|
+
### Gaps
|
|
118
|
+
| # | Severity | Description | Fix |
|
|
119
|
+
|---|----------|-------------|-----|
|
|
120
|
+
| 1 | HIGH | Missing error handling | Add try/catch in handler.ts |
|
|
121
|
+
| 2 | MEDIUM | No edge case test | Add test for empty input |
|
|
122
|
+
|
|
123
|
+
### Recommendation
|
|
124
|
+
[One paragraph: what to do next]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## After Review
|
|
130
|
+
|
|
131
|
+
**If SHIP:** Work is done. Inform the user.
|
|
132
|
+
|
|
133
|
+
**If FIX-FIRST:**
|
|
134
|
+
```
|
|
135
|
+
"Review found fixable issues. Run /genie:forge to address:
|
|
136
|
+
1. [gap 1]
|
|
137
|
+
2. [gap 2]
|
|
138
|
+
Then run /genie:review again."
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**If BLOCKED:**
|
|
142
|
+
```
|
|
143
|
+
"Review found fundamental issues requiring scope changes.
|
|
144
|
+
Revise the wish document to address:
|
|
145
|
+
1. [issue 1]
|
|
146
|
+
2. [issue 2]
|
|
147
|
+
Then run /genie:forge and /genie:review again."
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Key Principles
|
|
153
|
+
|
|
154
|
+
- **Every criterion checked** - No skipping, no "probably fine"
|
|
155
|
+
- **Evidence required** - PASS needs proof, not assumption
|
|
156
|
+
- **Gaps categorized** - Severity determines whether it blocks
|
|
157
|
+
- **Actionable feedback** - Every FAIL includes how to fix
|
|
158
|
+
- **Browser tests graceful** - Skip if agent-browser unavailable, don't fail
|
|
159
|
+
- **Results written to wish** - Review results live in the wish document
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Never Do
|
|
164
|
+
|
|
165
|
+
- Declare SHIP with CRITICAL or HIGH gaps
|
|
166
|
+
- Skip validation commands
|
|
167
|
+
- Mark criteria PASS without evidence
|
|
168
|
+
- Re-implement fixes during review (that's forge's job)
|
|
169
|
+
- Change scope during review (that's wish's job)
|
|
170
|
+
- Block on MEDIUM or LOW gaps
|
|
171
|
+
- Forget to write results back to the wish document
|