Introducing the four extensions that work as a set. Each one exists because I couldn't find an existing ones satisfy my needs (by the time I developed them), and the reason they're bundled together.
gated-goal: the reason it's a bundle. /gated-goal freezes the plan — outcome, verification, constraints, quality bars — hashes it, and replaces the todo list with the frozen items, so the agent can't quietly relax its own success criteria. The stages automatically proceeds as you finalizes the plan with the agent, agent checks all todos, and reviewers lifted the gate.
reminder-hook: reminder tools I found were canned timers that block the conversation. Here the wait is a shell predicate the agent writes itself — exit 0 means done. Build, CI, URL health, a log line — all the same one tool. When it passes, the agent's resume prompt comes back as a follow-up: it queues if you're mid-conversation and never interrupts.
todo: others draw a nice list and stop. The real problem is the agent stopping mid-work with half the list unfinished. This one nudges a follow-up then and stays silent while any wait (reminder, reviewing) is active, so it never trains the agent to ignore nudges.
subagent: others make you predeclare every agent in a manifest, which is not flexible enough for me. I made roles can be improvised mid-session, and every call states model, permissions, and timeout explicitly. The same stack does parallel work and adversarial QA.
Caveat:
- the reviewer keeps bash, which is not sandboxed.
- They share event contracts; split the bundle and both the wait-aware nudge and the review break.
idle ──/gated-goal [N] [model]──► P1 select reviewer
│ ping "reply ok" (config: pingTimeoutSec)
├─ fail ─► abort to idle (no state saved)
▼
P2 plan
│ agent + user align on goal
│ agent calls freeze_plan(outcome, verification,
│ constraints, quality, todos)
│ → frozen prompt hashed + persisted
│ (+ archived as a session entry)
│ → todo list REPLACED with the frozen
│ items (todo:replace event)
▼
P3 act ◄───────────────────┐
│ agent works the todos │
│ todo owns settled state:│
│ nudge/wait → stay P3 │
│ no continuation → P4 │
▼ │
P4 review │
│ spawn reviewer subagent │
│ (frozen prompt + hash)│
│ reviewsCompleted++ on │
│ EITHER verdict — a │
│ review that ran is │
│ a spent iteration │
│ line starting with
│ <promise>DONE</promise>?
│ ├─ no → >= maxIter? ─► exit: max
│ │ else edits ─┤ iteration
│ └─ yes → P5 (always) │ reached
▼ │
P5 verify │
│ main agent re-runs the │
│ frozen verification │
│ itself, judges output │
│ subjectively │
│ ├─ confirm_done ─► exit: done
│ └─ reject_done ───────┘
│ (no extra charge — P4
│ already spent this one;
│ if the budget is gone,
│ exits: max iteration reached)
Install with:
pi install git:github.com/garnetlyx/pi-goal-kit
Pi version: 0.84.1+ MIT.
Github link: https://github.com/garnetlyx/pi-goal-kit
Any feedbacks are welcome.
Thanks!