3. The binary must be on `PATH` (the launcher checks it). The agent must be an **interactive
TUI/REPL** that accepts typed input — wake-ups arrive as a typed message + Enter.
Tip: for many backends, a per-harness launch script (like `terminal-adapters/`) is cleaner than
adding `case` arms — the fork is happy to host one per agent.
## Changes & improvements vs upstream
| # | Change | Why |
|---|---|---|
| 1 | **pi as agent backend** | `parse-config` accepts `pi`; launch arm `pi -a --name 'SwarmForge <Role>' [extra] "$(cat prompt)"`. pi starts interactive, sends the initial prompt, stays in the TUI. |
| 2 | **Bash-native, zero zsh dependency** | All shell scripts migrated: shebangs `zsh` → `bash`, `${1:l}` → `tr`, `<->` glob → regex, `&!` → `& disown` (tmux pane shell is bash), `zsh -c` → `bash -c` in `swarmforge.bb`/`swarm-window-watchdog.bb`. Bash is the default on Linux and exists on every platform. |
| 3 | **Universal wake-up (pi + others)** | Upstream typed the wake-up text then a separate Enter; pi-tui drops a standalone CR, so messages sat in the editor. The fork embeds the CR in the same write (`text\r`) and keeps the trailing LF for other TUIs — validated in pi, compatible with claude/codex/grok. |
| 4 | **Self-contained branch** | `swarmforge/scripts/` vendored (upstream ignores it and downloads from `main`); `.gitignore` adjusted; empty `scripts/shared-articles/` stops the wrapper download. No surprise overwrites from upstream. |
| 5 | **Shared constitution articles included** | `engineering.prompt`, `handoffs.prompt`, `workflow.prompt` copied into `constitution/articles/` (upstream `four-pack` only carries `project.prompt`, so agents had no handoff/workflow rules). |
| 6 | **Git identity and worktree failure detection** | Upstream fails *silently* when `git commit` cannot run (no `user.name`/`user.email`) → unborn HEAD → empty worktrees. Now: clear error with instructions before `git init`, and `fail!` if `git worktree add` fails. |
| 7 | **Written review reports** | The architect commits `docs/reviews/<task>-summary.md` at the end of every task/batch (what was reviewed, fixes, verification results, suite status, handoffs sent) — the review record is durable and versioned instead of living only in the agent's session. |
### Where review reports are documented, and when
The architect writes the summary to **`docs/reviews/<task>-summary.md`** (one per task, created
under `docs/reviews/` in the repo) **at the end of each task or batch**, committed with its byline
in the same commit as the review changes. Because it is a git commit, the report:
- travels with the branch and arrives on `master` when the specifier merges the architect's work,
- is versioned — you can diff `docs/reviews/` across runs to see every review checkpoint
(the pipeline "cuts"),
- replaces the informal closing message the architect used to leave only in its own TUI.
Example layout after a run:
```text
docs/reviews/
user-login-summary.md
login-form-summary.md
```
## Scope (verified)
Verified on Linux (Arch) with the real pi CLI and real provider credentials: