| name | shepherd-approve-design |
| description | HUMAN-ONLY shepherd design approval. Run after reviewing .shepherd/2-design.md, .shepherd/3-success-criteria.md, and .shepherd/_panel.json. Records the approved panel in _state.json, writes .shepherd/_design.approved, and hands control back to /shepherd. The agent cannot invoke this. |
| disable-model-invocation | true |
| allowed-tools | Read, Bash, Skill |
| argument-hint | |
Approve design
Record human approval of the design, success criteria, and review panel so implementation can begin.
- Read
.shepherd/2-design.md, .shepherd/3-success-criteria.md, and .shepherd/_panel.json;
stop if any is missing. Approval covers all three.
- Summarize the approach, success criteria, reviewers, final reviewers, limits, and panel
reason in 3-5 lines.
- Copy the approved panel into
_state.json:
python3 - <<'PY'
import json
from pathlib import Path
state_path = Path(".shepherd/_state.json")
panel = json.loads(Path(".shepherd/_panel.json").read_text())
for key in ("reviewers", "final_reviewers", "inner_iterations", "final_review_rounds"):
if key not in panel:
raise SystemExit(f"_panel.json missing required key: {key}")
state = json.loads(state_path.read_text()) if state_path.exists() else {}
state["panel"] = panel
state["phase"] = "inner-loop"
state["iteration"] = 1
state_path.write_text(json.dumps(state, indent=2, sort_keys=True) + "\n")
PY
- Write the marker:
mkdir -p .shepherd
printf 'approved_at=%s\nbase_commit=%s\nnote=design approved by human via /shepherd-approve-design\n' \
"$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$(git rev-parse HEAD 2>/dev/null || echo none)" \
> .shepherd/_design.approved
- Confirm briefly, then invoke
/shepherd so it resumes into implementation.
Do not edit source here.