Execute implementation tasks from the current plan. Works through tasks sequentially, marks completion, and preserves progress for continuation across sessions. Use when user says "implement", "start coding", "execute plan", or "continue implementation".
Execute tasks from the plan, track progress, and enable session continuation.
Determine Handoff mode. If the caller passed HANDOFF_MODE and HANDOFF_SKIP_REVIEW as explicit text in the prompt, use those values. Otherwise, use the Bash tool:
Bash: printenv HANDOFF_MODE || true
Bash: printenv HANDOFF_SKIP_REVIEW || true
Then check HANDOFF_MODE:
HANDOFF_MODE is 1 (autonomous Handoff agent)The Handoff coordinator already manages status transitions and DB writes directly. Do NOT call MCP tools. Instead:
AskUserQuestionHANDOFF_MODE is NOT 1 (manual Claude Code session)Handoff sync is handled inline — see Step 0.2 (after reading the plan file) for the task ID extraction and MCP sync trigger. The sync points are:
handoff_sync_status → "implementing" (with paused: true)handoff_push_plan with updated plan contenthandoff_push_plan with final plan, then handoff_sync_status → "review" (with paused: true) or "done" (with paused: false when HANDOFF_SKIP_REVIEW=1)CRITICAL: Always pass paused: true with every handoff_sync_status call except done. This prevents the autonomous Handoff agent from picking up the task while you work manually. Only done passes paused: false.
FIRST: Determine what state we're in:
1. Read `.ai-factory/config.yaml` if it exists to resolve:
- `paths.description`, `paths.architecture`, `paths.rules_file`, `paths.roadmap`, `paths.research`
- `paths.plan`, `paths.plans`, `paths.fix_plan`, `paths.patches`
- `paths.rules`
- `language.ui`, `language.artifacts`
- `git.enabled`, `git.base_branch`, `git.create_branches`
- `rules.base` plus any named `rules.<area>` entries
2. Parse arguments:
- --list → list available plans only (no implementation; STOP)
- @<path> → explicit plan file override (highest priority)
- <number> → start from specific task
- status → status-only mode
3. If `git.enabled = true`, check for uncommitted changes (`git status`)
4. If `git.enabled = true`, check current branch
--list)If $ARGUMENTS contains --list, run read-only plan discovery and stop.
1. Get current branch:
git branch --show-current (git mode only)
2. Convert branch to filename: replace "/" with "-", add ".md" (git mode only)
3. Check existence of:
- <configured plans dir>/<branch-name>.md (git mode only)
- if git mode is off or branch creation is disabled: any `*.md` full-mode plan in `<configured plans dir>/`
- <resolved fast plan path>
- <resolved fix plan path>
4. Print plan availability summary and usage hints
5. STOP.
Important: In --list mode:
For detailed output format and examples, see:
skills/aif-implement/references/IMPLEMENTATION-GUIDE.md → "List Available Plans (--list)"If the user is resuming the next day, says the session was abandoned, or you suspect context was lost (e.g. after /clear), rebuild local context from the repo before continuing tasks:
If git.enabled = true:
1. git status
2. git branch --show-current
3. git log --oneline --decorate -20
4. (optional) git diff --stat
5. (optional) git stash list
If git.enabled = false, skip git recovery commands and reconcile only from the resolved plan/fix-plan paths plus the working tree state.
Then reconcile plan/task state:
@plan-file override wins; otherwise branch-named plan takes priority over the resolved fast plan).git.enabled = false or full plans were created without a branch, prefer:
@plan-file,*.md file in the configured plans dir,TaskList statuses vs plan checkboxes.
TaskUpdate(..., status: "completed") and update the plan checkbox.If uncommitted changes exist:
AskUserQuestion: You have uncommitted changes. Commit them first?
Options:
1. Yes, commit now (/aif-commit)
2. No, stash and continue
3. Cancel
Based on choice:
/aif-commit, then continue to plan discoverygit stash push -m "aif-implement: stash before plan execution", then continueIf NO plan file exists but the resolved fix plan exists:
A fix plan was created by /aif-fix in plan mode. Redirect to fix workflow:
Found a fix plan at the resolved fix plan path.
This plan was created by /aif-fix and should be executed through the fix workflow
(it creates a patch and handles cleanup automatically).
Running /aif-fix to execute the plan...
→ Invoke /aif-fix (without arguments – it will detect the resolved fix plan and execute it).
→ STOP — do not continue with implement workflow.
If NO plan file exists AND no resolved fix plan (all tasks completed or fresh start):
AskUserQuestion: No active plan found. Current branch: <current-branch>.
What would you like to do?
Options:
1. Start new feature from current branch
2. Return to configured base branch and start new feature
3. Create quick task plan (no branch)
4. Nothing, just checking status
Based on choice:
/aif-plan full <description>git checkout <configured-base-branch>, then git pull origin <configured-base-branch> → /aif-plan full <description> (git mode only)/aif-plan fast <description>If git.enabled = false, replace option 2 with:
2. Create rich full plan without branch creation/aif-plan full <description> without any git commandsIf plan file exists → continue to Step 0.1
Use the resolved config from Step 0:
language.ui for prompts, language.artifacts for generated contentrules.base + named rules.<area> entriesRead .ai-factory/DESCRIPTION.md (use path from config) if it exists to understand:
Read the resolved architecture artifact if it exists (paths.architecture, default: .ai-factory/ARCHITECTURE.md) to understand:
Read the resolved RULES.md path if it exists:
Read rules hierarchy (paths from config):
rules.api, rules.frontend)Load all available rule files and merge them. More specific rules override general ones.
Read .ai-factory/skill-context/aif-implement/SKILL.md — MANDATORY if the file exists.
This file contains project-specific rules accumulated by /aif-evolve from patches,
codebase conventions, and tech-stack analysis. These rules are tailored to the current project.
How to apply skill-context rules:
Enforcement: After generating any output artifact, verify it against all skill-context rules. If any rule is violated — fix the output before presenting it to the user.
Patch fallback (limited, only when skill-context is missing):
.ai-factory/skill-context/aif-implement/SKILL.md does not exist and the resolved patches dir exists:
Glob to find *.md files in the resolved patches dirUse this context when implementing:
If $ARGUMENTS contains @<path>:
Use this explicit plan file and skip automatic plan discovery.
1. Extract path after "@"
2. Resolve relative to project root (absolute paths are also valid)
3. If file does not exist:
"Plan file not found: <path>
Provide an existing markdown plan file, for example:
- /aif-implement @<resolved fast plan path>
- /aif-implement @.ai-factory/plans/feature-user-auth.md"
→ STOP
4. If file is the resolved fix plan path:
→ invoke /aif-fix (ownership + cleanup workflow) and STOP
5. Otherwise use this file as the active plan
Then continue with normal execution using the selected plan file.
If no @<path> override is provided, check plan files in this order:
Check for plan files in this order:
1. Check current git branch:
git branch --show-current
→ Convert branch name to filename: replace "/" with "-", add ".md"
→ Look for <configured plans dir>/<branch-name>.md
2. If git mode is off or branch-based plan is missing:
- Check whether the configured plans dir contains exactly one `*.md` plan file created by `/aif-plan full` without a branch
- If exactly one exists → use it
- If multiple exist → ask the user to choose or use `@<path>`
3. No full-mode plan → Check the resolved fast plan path
4. No full-mode plan and no resolved fast plan → Check the resolved fix plan path
→ If exists: invoke /aif-fix (handles its own workflow with patches) and STOP
Priority:
@<path> argument - explicit user-selected plan file/aif-plan full) - if it matches current branchpaths.plans (from /aif-plan full without branch creation)paths.plan (from /aif-plan fast) - fallback when no full plan existspaths.fix_plan - redirect to /aif-fix (from /aif-fix plan mode)Read the plan file to understand:
- [ ] / - [x]) to keep progress syncedImmediately after reading the plan file, check the first line for <!-- handoff:task:<uuid> -->:
HANDOFF_MODE is NOT 1 (manual session): extract the task ID. This is the Handoff task ID for MCP sync throughout this session. Call handoff_sync_status with { taskId: <extracted-id>, newStatus: "implementing", sourceTimestamp: "<current UTC time in ISO 8601 format, e.g. 2026-04-02T18:30:45.000Z>", direction: "aif_to_handoff", paused: true }. The timestamp must reflect the actual current time, not midnight or an approximation.HANDOFF_MODE is 1: the Handoff coordinator handles sync — do nothing.TaskList → Get all tasks with status
Find:
## Implementation Progress
✅ Completed: 3/8 tasks
🔄 In Progress: Task #4 - Implement search service
⏳ Pending: 4 tasks
Current task: #4 - Implement search service
For each task:
3.1: Fetch full details
TaskGet(taskId) → Get description, files, context
3.2: Mark as in_progress
TaskUpdate(taskId, status: "in_progress")
3.3: Implement the task
3.4: Verify implementation
3.5: Mark as completed
TaskUpdate(taskId, status: "completed")
3.6: Update checkbox in plan file
IMMEDIATELY after completing a task, update the checkbox in the plan file:
# Before
- [ ] Task 1: Create user model
# After
- [x] Task 1: Create user model
This is MANDATORY — checkboxes must reflect actual progress:
Edit tool to change - [ ] to - [x]Handoff sync (manual mode ONLY — skip when HANDOFF_MODE is 1): If a Handoff task ID was extracted in Step 0.2, call handoff_push_plan with { taskId: <id>, planContent: <full updated plan text> } to sync the checklist progress.
3.7: Update the resolved description artifact if needed
If during implementation:
→ Update the resolved description artifact (paths.description, default: .ai-factory/DESCRIPTION.md) to reflect the change:
## Tech Stack
- **Cache:** Redis (added for session storage)
This keeps the resolved description artifact as the source of truth.
3.7.1: Update AGENTS.md and ARCHITECTURE.md if project structure changed
If during implementation:
src/modules/, new API routes directory, etc.)→ Update AGENTS.md — refresh the "Project Structure" tree and "Key Entry Points" table to reflect new directories/files.
→ Update the resolved architecture artifact — if new modules or layers were added that should be documented in the folder structure section.
Only update if structure actually changed — don't rewrite on every task. Check if new directories were created that aren't in the current structure map.
3.8: Check for commit checkpoint
If the plan has commit checkpoints and current task is at a checkpoint:
AskUserQuestion: ✅ Tasks <first>-<last> completed. This is a commit checkpoint. Ready to commit? Suggested message: "<conventional commit message>"
Options:
1. Yes, commit now (/aif-commit)
2. No, continue to next task
3. Skip all commit checkpoints
Based on choice:
/aif-commit with the suggested message, then continue to next task/aif-implement run, skip the prompt automatically and proceed directly to the next task (as if user selected "No, continue to next task" each time). This is in-context memory — resets on /clear or new session3.9: Move to next task or pause
Progress is automatically saved via TaskUpdate.
To pause:
Current progress saved.
Completed: 4/8 tasks
Next task: #5 - Add pagination support
To resume later, run:
/aif-implement
To resume (next session):
/aif-implement
→ Automatically finds next incomplete task
Handoff sync (manual mode ONLY — skip entirely when HANDOFF_MODE is 1): If a Handoff task ID was extracted from the plan annotation AND HANDOFF_MODE is NOT 1:
handoff_push_plan with { taskId: <id>, planContent: <final updated plan text> }.HANDOFF_SKIP_REVIEW is 1: call handoff_sync_status with { taskId: <id>, newStatus: "done", sourceTimestamp: "<current UTC time in ISO 8601 format>", direction: "aif_to_handoff", paused: false }.handoff_sync_status with { taskId: <id>, newStatus: "review", sourceTimestamp: "<current UTC time in ISO 8601 format>", direction: "aif_to_handoff", paused: true }.When all tasks are done:
## Implementation Complete
All 8 tasks completed.
Branch: feature/product-search
Plan file: .ai-factory/plans/feature-product-search.md
Files modified:
- src/services/search.ts (created)
- src/api/products/search.ts (created)
- src/types/search.ts (created)
Documentation: updated existing docs | created docs/<feature-slug>.md | skipped by user | warn-only (Docs: no/unset)
What's next?
1. 🔍 /aif-verify — Verify nothing was missed (recommended)
2. 💾 /aif-commit — Commit the changes directly
Check ROADMAP.md progress:
If the resolved roadmap artifact exists:
## Roadmap Linkage with a non-none milestone, prefer that milestone for completion marking[x] and add entry to the Completed table with today's dateOnly do this step when there is something concrete to capture.
DESCRIPTION.md (allowed in this command):
ARCHITECTURE.md + AGENTS.md (allowed in this command):
AGENTS.md structure maps or entry points, refresh them only when they are now incorrect.ROADMAP.md (allowed, limited):
WARN [roadmap] ... and suggest the owner command:
/aif-roadmap check/aif-roadmap <short update request>RULES.md (NOT allowed in this command):
paths.rules_file artifact from /aif-implement./aif-rules./aif-rules automatically (it is user-invoked).If candidate rules exist:
AskUserQuestion: Capture new project rules in the resolved RULES.md artifact?
Options:
1. Yes — output `/aif-rules ...` commands (recommended)
2. No — skip
Documentation policy checkpoint (after completion, before plan cleanup):
Read the plan file setting Docs: yes/no.
If plan setting is Docs: yes:
AskUserQuestion: Documentation checkpoint — how should we document this feature?
Options:
1. Update existing docs (recommended) — invoke /aif-docs
2. Create a new feature doc page — invoke /aif-docs with feature-page context
3. Skip documentation
Handling:
/aif-docs to update README/docs based on completed work/aif-docs with context to create docs/<feature-slug>.md, include sections (Summary, Usage/user-facing behavior, Configuration, API/CLI changes, Examples, Troubleshooting, See Also), and add a README docs-table link/aif-docs; emit WARN [docs] Documentation skipped by userIf plan setting is Docs: no or setting is unset:
/aif-docs automaticallyWARN [docs] Docs policy is no/unset; skipping documentation checkpointAlways include documentation outcome in the final completion output:
Documentation: updated existing docsDocumentation: created docs/<feature-slug>.mdDocumentation: skipped by userDocumentation: warn-only (Docs: no/unset)Handle plan file after completion:
If the resolved fast plan path (from /aif-plan fast):
AskUserQuestion: Would you like to delete the resolved fast plan file? (It's no longer needed)
Options:
1. Yes, delete it
2. No, keep it
Based on choice:
rm <resolved fast plan path>
If branch-named file (e.g., <configured plans dir>/feature-user-auth.md):
Check if running in a git worktree:
Detect worktree context:
# If .git is a file (not a directory), we're in a worktree
[ -f .git ]
If we ARE in a worktree, offer to merge back and clean up:
You're working in a parallel worktree.
Branch: <current-branch>
Worktree: <current-directory>
Main repo: <main-repo-path>
AskUserQuestion: Would you like to merge this branch into the configured base branch and clean up?
Options:
1. Yes, merge and clean up (recommended)
2. No, I'll handle it manually
Based on choice:
To merge and clean up later:
cd <main-repo-path>
git merge <branch>
/aif-plan --cleanup <branch>
Ensure everything is committed — check git status. If uncommitted changes exist, suggest /aif-commit first and wait.
Get repository root path:
MAIN_REPO=$(git rev-parse --git-common-dir | sed 's|/\.git$||')
BRANCH=$(git branch --show-current)
Switch to the repository root:
cd "${MAIN_REPO}"
Merge the branch:
git checkout <configured-base-branch>
git pull origin <configured-base-branch>
git merge "${BRANCH}"
If merge conflict occurs:
⚠️ Merge conflict detected. Resolve manually:
cd <main-repo-path>
git merge --abort # to cancel
# or resolve conflicts and git commit
→ STOP here, do not proceed with cleanup.
Remove worktree and branch (only if merge succeeded):
git worktree remove <worktree-path>
git branch -d "${BRANCH}"
Confirm:
✅ Merged and cleaned up!
Branch <branch> merged into <configured-base-branch>.
Worktree removed.
You're now in: <main-repo-path> (<configured-base-branch>)
→ STOP — worktree merged and removed, no further steps needed.
AskUserQuestion: All tasks complete. What's next?
Options:
1. Verify first — Run /aif-verify to check completeness (recommended)
2. Skip to commit — Go straight to /aif-commit
Based on choice:
/aif-verify → after it completes, continue to context cleanup below/aif-commit → after it completes, continue to context cleanup belowContext cleanup (after verify or commit):
Suggest the user to free up context space if needed: /clear (full reset) or /compact (compress history).
IMPORTANT: NO summary reports, NO analysis documents, NO wrap-up tasks.
/aif-implement
Continues from next incomplete task.
/aif-implement --list
Lists the resolved fast plan path, resolved fix plan path, and current-branch <configured plans dir>/<branch>.md (if present), then exits without implementation.
/aif-implement @my-custom-plan.md
/aif-implement @.ai-factory/plans/feature-user-auth.md status
Uses the provided plan file instead of auto-detecting by branch/default files.
/aif-implement 5
Starts from task #5 (useful for skipping or re-doing).
/aif-implement status
Shows progress without executing.
/aif-best-practices guidelines (naming, structure, error handling)paths.rules_file and paths.research artifacts.WARN/ERROR outputs only; this does not replace the required verbose implementation logging rules below.For progress display format, blocker handling, session continuity examples, and full flow examples → see references/IMPLEMENTATION-GUIDE.md
- [ ] → - [x] immediately after task completionALWAYS add verbose logging when implementing code. For logging guidelines, patterns, and management requirements → read references/LOGGING-GUIDE.md
Key rules: log function entry/exit, state changes, external calls, error context. Use structured logging, configurable log levels (LOG_LEVEL env var).
DO NOT skip logging to "keep code clean" - verbose logging is REQUIRED during implementation, but MUST be configurable.