@automagik/genie 0.260202.1833 → 0.260203.43
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/README.md +81 -0
- package/.beads/config.yaml +67 -0
- package/.beads/interactions.jsonl +0 -0
- package/.beads/issues.jsonl +9 -0
- package/.beads/metadata.json +4 -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 +3 -0
- package/AGENTS.md +75 -0
- package/bun.lock +55 -0
- package/dist/claudio.js +1 -1
- package/dist/genie.js +1 -1
- package/dist/term.js +123 -99
- package/docs/CO-ORCHESTRATION-GUIDE.md +368 -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/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 +229 -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 +292 -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 +110 -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 +595 -0
- package/src/lib/orchestrator/event-monitor.ts +2 -0
- package/src/lib/skill-loader.ts +215 -0
- package/src/lib/tmux.ts +30 -11
- 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 +48 -3
- package/src/term-commands/create.ts +95 -0
- package/src/term-commands/daemon.ts +176 -0
- package/src/term-commands/kill.ts +56 -2
- 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 +20 -8
- package/src/term-commands/work.ts +279 -37
- package/src/term-commands/workers.ts +36 -2
- package/src/term.ts +120 -7
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 2026-01-31
|
|
2
|
+
|
|
3
|
+
- Repaired OpenClaw memory_search by adding OpenAI API key + openai:default auth profile; reindexed memory successfully.
|
|
4
|
+
- Standardized collaboration around tmux + genie-cli: shared session migrated from `khal` to `genie` (khal killed after migration). Windows restored in `genie`: chief-of-khal, genie-cli, ClaudeResearch, AgentBuilder.
|
|
5
|
+
- Updated genie-cli toolchain symlinks (term/claudio) after path breakage; adopted rule: "open Claude" == run `claudio`.
|
|
6
|
+
- Created `claudio` profile `antigravity-opus` (100% gemini-claude-opus-4-5-thinking) and set as default during AgentBuilder work.
|
|
7
|
+
- Investigated Claude Code closing: observed `killed claude` likely from low memory/no swap; later confirmed memory increased to 8GB but swap still 0 in-container.
|
|
8
|
+
- Implemented tmux session restore on reboot: snapshot saved to `~/.config/tmux-genie/state.json`; restore script `~/.local/bin/tmux-genie-restore`; systemd user service `tmux-genie.service` enabled (uses TMUX_BIN=/home/linuxbrew/.linuxbrew/bin/tmux). Configured to restore windows + cwd only (does not auto-open claudio).
|
|
9
|
+
|
|
10
|
+
- Felipe set a rule: always work on the Khal project inside the shared tmux session named `genie` (use a window named `khal`).
|
|
11
|
+
- Added a `khal` zsh function in ~/.zshrc to create/attach/switch to the correct session/window and start in /home/genie/workspace/khal.
|
|
12
|
+
- Felipe: Genie is getting a new body (OpenClaw); prior "body" left in a context folder to be slowly absorbed/cleaned up as we assess what’s still useful.
|
|
13
|
+
- Process: Felipe runs a brainstorm phase before using the Wish framework; uses two Claude Code sessions side-by-side (left: Opus 4.5, right: Gemini 3 Pro) as team members.
|
|
14
|
+
- Workflow: Felipe uses the "council" (parallel personas/LLMs) by prompting them with the same prompt and collecting votes; Felipe + Genie act as reviewers/improvers.
|
|
15
|
+
- Council implementation lives in khal repo under `.claude/agents/council.md` with 10 member agents in `.claude/agents/council/*.md` and smart routing by topic.
|
|
16
|
+
- Rule: Genie can inspect/understand the codebase, but should delegate planning + coding execution to the Claude Code panes in tmux (khal-demo).
|
package/.claude/skills/genie-base/assets/workspace/memory/882c22be-9710-41c1-91f8-ed82947ef6ce.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Então, como você pode ver, a tentativa de startar um cloud numa aba falhou, tem um problema aí que tá impedindo ele de startar, então eu gostaria que você divulgasse isso e descobrisse o motivo que isso aconteceu.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
cat <<'EOF'
|
|
6
|
+
Usage:
|
|
7
|
+
install-workspace.sh --dest <workspace-path> [--force]
|
|
8
|
+
|
|
9
|
+
Copies the Genie base workspace template from this skill into the destination.
|
|
10
|
+
|
|
11
|
+
- If a file already exists and --force is not set, it will be left untouched.
|
|
12
|
+
- If --force is set, existing files will be backed up then overwritten.
|
|
13
|
+
|
|
14
|
+
EOF
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
DEST=""
|
|
18
|
+
FORCE=0
|
|
19
|
+
|
|
20
|
+
while [[ $# -gt 0 ]]; do
|
|
21
|
+
case "$1" in
|
|
22
|
+
--dest)
|
|
23
|
+
DEST="$2"; shift 2 ;;
|
|
24
|
+
--force)
|
|
25
|
+
FORCE=1; shift ;;
|
|
26
|
+
-h|--help)
|
|
27
|
+
usage; exit 0 ;;
|
|
28
|
+
*)
|
|
29
|
+
echo "Unknown arg: $1" >&2
|
|
30
|
+
usage
|
|
31
|
+
exit 2
|
|
32
|
+
;;
|
|
33
|
+
esac
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
if [[ -z "$DEST" ]]; then
|
|
37
|
+
echo "--dest is required" >&2
|
|
38
|
+
usage
|
|
39
|
+
exit 2
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/assets/workspace"
|
|
43
|
+
|
|
44
|
+
if [[ ! -d "$SRC_DIR" ]]; then
|
|
45
|
+
echo "Missing template dir: $SRC_DIR" >&2
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
mkdir -p "$DEST"
|
|
50
|
+
|
|
51
|
+
TS="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
52
|
+
BACKUP_DIR="$DEST/.genie-base-backup/$TS"
|
|
53
|
+
|
|
54
|
+
backup_and_copy() {
|
|
55
|
+
local rel="$1"
|
|
56
|
+
local src="$SRC_DIR/$rel"
|
|
57
|
+
local dst="$DEST/$rel"
|
|
58
|
+
|
|
59
|
+
if [[ -d "$src" ]]; then
|
|
60
|
+
# directory copy
|
|
61
|
+
if [[ -e "$dst" && $FORCE -eq 0 ]]; then
|
|
62
|
+
return 0
|
|
63
|
+
fi
|
|
64
|
+
if [[ -e "$dst" && $FORCE -eq 1 ]]; then
|
|
65
|
+
mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
|
|
66
|
+
mv "$dst" "$BACKUP_DIR/$rel"
|
|
67
|
+
fi
|
|
68
|
+
mkdir -p "$(dirname "$dst")"
|
|
69
|
+
cp -a "$src" "$dst"
|
|
70
|
+
return 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# file copy
|
|
74
|
+
if [[ -e "$dst" && $FORCE -eq 0 ]]; then
|
|
75
|
+
return 0
|
|
76
|
+
fi
|
|
77
|
+
if [[ -e "$dst" && $FORCE -eq 1 ]]; then
|
|
78
|
+
mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
|
|
79
|
+
cp -a "$dst" "$BACKUP_DIR/$rel"
|
|
80
|
+
fi
|
|
81
|
+
mkdir -p "$(dirname "$dst")"
|
|
82
|
+
cp -a "$src" "$dst"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# Core workspace files
|
|
86
|
+
FILES=(
|
|
87
|
+
"AGENTS.md"
|
|
88
|
+
"SOUL.md"
|
|
89
|
+
"USER.md"
|
|
90
|
+
"TOOLS.md"
|
|
91
|
+
"MEMORY.md"
|
|
92
|
+
"HEARTBEAT.md"
|
|
93
|
+
"IDENTITY.md"
|
|
94
|
+
"ROLE.md"
|
|
95
|
+
"ENVIRONMENT.md"
|
|
96
|
+
"memory"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
for f in "${FILES[@]}"; do
|
|
100
|
+
backup_and_copy "$f"
|
|
101
|
+
done
|
|
102
|
+
|
|
103
|
+
if [[ -d "$BACKUP_DIR" ]]; then
|
|
104
|
+
echo "Backup (if any overwrites): $BACKUP_DIR"
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
echo "Installed Genie base workspace template into: $DEST"
|
|
@@ -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)
|