| name | work |
| description | Execute plan — implement tasks, test, commit on done. Works in worktree or on main branch. Resumable. |
Executing Plans
Load plan, review critically, execute tasks, commit when complete.
Boundaries
This skill MAY: read/write code, read/write .unipi/docs/, run tests, commit, create worktree.
This skill MAY NOT: merge branches, deploy.
Worktree vs Main:
- If
workbranch in plan → work within worktree directory
- If
workbranch empty → work directly on main branch (current directory)
Command Format
/unipi:work worktree:<branch>(optional) specs:<path>(multiple,optional) <string(greedy)>(optional)
worktree:<branch> — branch to work on (auto-suggested, agent asks if not provided)
specs:<path> — plan(s) to execute (auto-suggested, agent asks if not provided)
string(greedy) — scope guidance (e.g., "only task 1 and 2")
- Recommended: new session — this command switches pi's internal worktree
Sandbox
- Read/Write: full access within worktree (or project root if on main)
- Write:
.unipi/docs/ for progress tracking
Phase 1: Resolve Args
-
Specs:
- If
specs: arg provided, read those plan files
- If not, list available plans in
.unipi/docs/plans/ and ask user
- Can select multiple
-
Read workbranch from plan frontmatter:
- If
workbranch: is non-empty → use that branch/worktree
- If worktree arg also provided → use worktree arg (override)
- Create worktree if not exists:
git worktree add .unipi/worktrees/{branch} -b {branch}
- Work within worktree directory
- If
workbranch: is empty or missing → work on current branch (main)
- No worktree creation needed
- Edit files directly in project root
- If neither plan nor args specify branch → ask user:
"Where should this work happen?"
- Current branch (main)
- New worktree (provide branch name)
-
Scope:
- If
string(greedy) provided, use to scope tasks
- Otherwise execute all incomplete tasks
Exit: Branch/worktree resolved. Plan(s) loaded. Scope defined.
Phase 2: Review Plan
- Read plan file(s)
- Review critically — identify questions or concerns
- If concerns: raise with user before starting
- Identify task status:
unstarted: (pending), in-progress: (started), completed: (done), failed: (needs investigation), awaiting_user: (needs user action), blocked: (waiting on dependency), skipped: (deferred)
Exit: Plan reviewed, ready to execute.
Ralph Loop Decision
Count the non-completed tasks (unstarted:, in-progress:, failed:). If you have the ralph_start tool available and 3+ non-trivial tasks remain, consider a ralph loop for resilience:
ralph_start({
name: "{plan-topic}",
taskContent: "# {Plan Title}\n\n{overview}\n\n## Goals\n- {goal1}\n- {goal2}\n\n## Checklist\n- [ ] {task1}\n- [ ] {task2}\n- [ ] {task3}",
maxIterations: 50,
itemsPerIteration: 2,
reflectEvery: 5
})
To skip: Just proceed to Phase 3 and execute tasks directly. Ralph is a helper, not a requirement.
Phase 3: Execute Tasks
For each task in order, skip completed:, skipped:, and awaiting_user: tasks:
If unstarted:
- Change
unstarted: to in-progress: in plan
- Follow each step exactly (plan has bite-sized steps)
- Run verifications as specified in acceptance criteria
- Change
in-progress: to completed: when complete
- Update plan file with progress
If in-progress:
- Continue from where it left off
- Follow remaining steps
- Change to
completed: when done
If failed:
- Read failure notes
- Investigate root cause
- Fix and re-verify
- Change to
completed: when fixed, or keep failed: if still broken
If awaiting_user:
- Remind user what's needed
- Wait for user response
- Resume when user provides input
If blocked:
- Check if blocker is resolved
- If resolved → change to
unstarted: and continue
- If still blocked → skip and move to next task
When to Stop and Ask
STOP immediately when:
- Hit blocker (missing dependency, test fails, instruction unclear)
- Plan has critical gaps
- You don't understand an instruction
- Verification fails repeatedly
Ask for clarification rather than guessing.
When to Revisit Earlier Steps
Return to review when:
- Partner updates plan based on feedback
- Fundamental approach needs rethinking
Don't force through blockers — stop and ask.
Phase 4: Commit Progress
After each task or group of tasks:
- Stage changes
- Commit with descriptive message referencing task name
- Continue to next task
Don't wait until end to commit — incremental commits are safer.
Phase 5: Complete
When all tasks are completed::
- Run final verification (tests, lint, build)
- Commit all remaining changes
- If using a ralph loop, emit
COMPLETE and call ralph_done to cleanly exit
- Inform user based on branch strategy:
If working in worktree:
"All tasks complete. Worktree: {branch}. Recommend reviewing before merge."
If ask_user is available, offer an automatic handoff:
ask_user({
question: "Review this work now?",
options: [
{
label: "Proceed to /unipi:review-work",
description: "Review before merge",
value: "review",
action: "new_session",
prefill: "/unipi:review-work plan:<plan-path>",
},
{ label: "Done for now", value: "done", action: "end_turn" },
],
allowFreeform: false,
})
Copyable fallback:
/unipi:review-work plan:<plan-path>
Recommend starting a new session for review; the ask_user launcher can compact/direct queue the command.
If working on main branch:
"All tasks complete. All changes committed directly on main."
If ask_user is available, offer the same review handoff with prefill: "/unipi:review-work plan:<plan-path>". Copyable fallback:
/unipi:review-work plan:<plan-path>
No merge needed — changes already on main.
Resumability
If user runs /unipi:work and plan has completed: or in-progress: tasks:
- Read plan
- Identify first
unstarted: task
- Ask user: "Resume from Task N: {name}?"
- Continue from there
If user provides scope string, only execute matching tasks.
Notes
- Agent reads plan on start — finds what's incomplete
- Worktree: changes don't affect main branch until merge (skip for small tasks)
- Main branch: changes committed directly, no merge needed
- Each worktree session is independent — no coordination with other worktrees