Execute an implementation plan with rigorous validation loops. Use when the user wants to implement or execute a plan file, build a planned feature, or invokes $prp-implement.
61
72%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.agents/skills/prp-implement/SKILL.mdArguments:
$ARGUMENTS(and$1,$2, ...) refer to the arguments given when this skill was invoked. Take them from the user's request; if absent, infer them from the conversation.
Plan: $ARGUMENTS
Execute the plan end-to-end with rigorous self-validation. You are autonomous.
Core Philosophy: Validation loops catch mistakes early. Run checks after every change. Fix issues immediately. The goal is a working implementation, not just code that exists.
Golden Rule: If a validation fails, fix it before moving on. Never accumulate broken state.
Check for these files to determine the project's toolchain:
| File Found | Package Manager | Runner |
|---|---|---|
bun.lockb | bun | bun / bun run |
pnpm-lock.yaml | pnpm | pnpm / pnpm run |
yarn.lock | yarn | yarn / yarn run |
package-lock.json | npm | npm run |
pyproject.toml | uv/pip | uv run / python |
Cargo.toml | cargo | cargo |
go.mod | go | go |
Store the detected runner - use it for all subsequent commands.
Determine the base branch for branching and syncing:
$ARGUMENTS contains --base <branch>, extract that value and remove the flag from the plan path argumentgit symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'git remote show origin 2>/dev/null | grep 'HEAD branch' | awk '{print $NF}'mainStore as {base-branch} — use this value for ALL branch comparisons, rebasing, and syncing. Never hardcode main or master.
Check package.json (or equivalent) for available scripts:
type-check, typecheck, tsclint, lint:fixtest, test:unit, test:integrationbuild, compileUse the plan's "Validation Commands" section - it should specify exact commands for this project.
cat $ARGUMENTSLocate and understand:
If plan not found:
Error: Plan not found at $ARGUMENTS
Create a plan first: $prp-plan "feature description"PHASE_1_CHECKPOINT:
git branch --show-current
git status --porcelain
git worktree list| Current State | Action |
|---|---|
| In worktree | Use it (log: "Using worktree") |
| On {base-branch}, clean | Create branch: git checkout -b feature/{plan-slug} |
| On {base-branch}, dirty | STOP: "Stash or commit changes first" |
| On feature branch | Use it (log: "Using existing branch") |
git fetch origin
git pull --rebase origin {base-branch} 2>/dev/null || truePHASE_2_CHECKPOINT:
For each task in the plan's Step-by-Step Tasks section:
After EVERY file change, run the type-check command from the plan's Validation Commands section.
Common patterns:
{runner} run type-check (JS/TS projects)mypy . (Python)cargo check (Rust)go build ./... (Go)If types fail:
Log each task as you complete it:
Task 1: CREATE src/features/x/models.ts ✅
Task 2: CREATE src/features/x/service.ts ✅
Task 3: UPDATE src/routes/index.ts ✅Update the plan's status markers as you go (newer templates use [ ] / [wip] / [x] / [f]): set a task to [wip] when you start it and [x] when its validation passes — or [f] if it cannot be made to pass (record why in the plan's Agent Notes and continue). Save the plan file after each change so progress survives an interruption. Plans without markers: skip this.
Deviation Handling: If you must deviate from the plan:
PHASE_3_CHECKPOINT:
Run the type-check and lint commands from the plan's Validation Commands section.
Common patterns:
{runner} run type-check && {runner} run lintruff check . && mypy .cargo check && cargo clippygo vet ./...Must pass with zero errors.
If lint errors:
{runner} run lint:fix, ruff check --fix .)You MUST write or update tests for new code. This is not optional.
Test requirements:
Write tests, then run the test command from the plan.
Common patterns:
{runner} test or {runner} run testpytest or uv run pytestcargo testgo test ./...If tests fail:
Run the build command from the plan's Validation Commands section.
Common patterns:
{runner} run builduv buildcargo build --releasego build ./...Must complete without errors.
If the plan involves API/server changes, use the integration test commands from the plan.
Example pattern:
# Start server in background (command varies by project)
{runner} run dev &
SERVER_PID=$!
sleep 3
# Test endpoints (adjust URL/port per project config)
curl -s http://localhost:{port}/health | jq
# Stop server
kill $SERVER_PIDRun any edge case tests specified in the plan.
PHASE_4_CHECKPOINT:
# --- PRP store resolver (canonical; keep byte-identical across skills) ---
_gd="$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null)"
case "$_gd" in */.git) _root="${_gd%/.git}" ;; "") _root="$PWD" ;; *) _root="$_gd" ;; esac
_root="$(cd "$_root" && pwd -P)"
_name="$(basename "$_root" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '-' | sed 's/^-*//;s/-*$//')"
PRP_DIR="${PRP_HOME:-$HOME/.prp}/${_name:-project}-$(printf %s "$_root" | git hash-object --stdin | cut -c1-8)"
mkdir -p "$PRP_DIR"; [ -f "$PRP_DIR/project.json" ] || printf '{"path": "%s", "name": "%s"}\n' "$_root" "${_name:-project}" > "$PRP_DIR/project.json"
mkdir -p "$PRP_DIR/reports"Path: $PRP_DIR/reports/{plan-name}-report.md
# Implementation Report
**Plan**: `$ARGUMENTS`
**Source Issue**: #{number} (if applicable)
**Branch**: `{branch-name}`
**Date**: {YYYY-MM-DD}
**Status**: {COMPLETE | PARTIAL}
---
## Summary
{Brief description of what was implemented}
---
## Assessment vs Reality
Compare the original investigation's assessment with what actually happened:
| Metric | Predicted | Actual | Reasoning |
| ---------- | ----------- | -------- | ------------------------------------------------------------------------------ |
| Complexity | {from plan} | {actual} | {Why it matched or differed - e.g., "discovered additional integration point"} |
| Confidence | {from plan} | {actual} | {e.g., "root cause was correct" or "had to pivot because X"} |
**If implementation deviated from the plan, explain why:**
- {What changed and why - based on what you discovered during implementation}
---
## Tasks Completed
| # | Task | File | Status |
| --- | ------------------ | ---------- | ------ |
| 1 | {task description} | `src/x.ts` | ✅ |
| 2 | {task description} | `src/y.ts` | ✅ |
---
## Validation Results
| Check | Result | Details |
| ----------- | ------ | --------------------- |
| Type check | ✅ | No errors |
| Lint | ✅ | 0 errors, N warnings |
| Unit tests | ✅ | X passed, 0 failed |
| Build | ✅ | Compiled successfully |
| Integration | ✅/⏭️ | {result or "N/A"} |
---
## Files Changed
| File | Action | Lines |
| ---------- | ------ | --------- |
| `src/x.ts` | CREATE | +{N} |
| `src/y.ts` | UPDATE | +{N}/-{M} |
---
## Deviations from Plan
{List any deviations with rationale, or "None"}
---
## Issues Encountered
{List any issues and how they were resolved, or "None"}
---
## Tests Written
| Test File | Test Cases |
| --------------- | ------------------------ |
| `src/x.test.ts` | {list of test functions} |
---
## Next Steps
- [ ] Review implementation
- [ ] Create PR: `gh pr create` (if applicable)
- [ ] Merge when approvedCheck if plan was generated from a PRD:
Source PRD: referenceIf PRD source exists:
in-progress to completeIf the plan has a ## Lifecycle (append-only) / ## Amendments section (newer template), update it before archiving — append-only, never overwrite existing entries:
Older plans without these sections: skip this step.
Only archive a plan that already lives in the project's store; leave a plan supplied from any other path in place.
PLAN_PATH="$(cd "$(dirname "$ARGUMENTS")" && pwd -P)/$(basename "$ARGUMENTS")"
case "$PLAN_PATH" in
"$PRP_DIR"/plans/*)
mkdir -p "$PRP_DIR/plans/completed"
mv "$PLAN_PATH" "$PRP_DIR/plans/completed/"
;;
*) echo "Plan is outside the PRP store; leaving it in place: $PLAN_PATH" ;;
esacPHASE_5_CHECKPOINT:
$PRP_DIR/reports/## Implementation Complete
**Plan**: `$ARGUMENTS`
**Source Issue**: #{number} (if applicable)
**Branch**: `{branch-name}`
**Status**: ✅ Complete
### Validation Summary
| Check | Result |
| ---------- | --------------- |
| Type check | ✅ |
| Lint | ✅ |
| Tests | ✅ ({N} passed) |
| Build | ✅ |
### Files Changed
- {N} files created
- {M} files updated
- {K} tests written
### Deviations
{If none: "Implementation matched the plan."}
{If any: Brief summary of what changed and why}
### Artifacts
- Report: `{expanded absolute path to $PRP_DIR/reports/{name}-report.md}`
- Plan archived to: `{expanded absolute path to $PRP_DIR/plans/completed/}` (only when the input plan already lives in the store)
{If from PRD:}
### PRD Progress
**PRD**: `{prd-file-path}`
**Phase Completed**: #{number} - {phase name}
| # | Phase | Status |
|---|-------|--------|
{Updated phases table showing progress}
**Next Phase**: {next pending phase, or "All phases complete!"}
{If next phase can parallel: "Note: Phase {X} can also start now (parallel)"}
To continue: `$prp-plan {prd-path}`
### Next Steps
1. Review the report (especially if deviations noted)
2. Create PR: `gh pr create` or `$prp-pr`
3. Merge when approved
{If more phases: "4. Continue with next phase: `$prp-plan {prd-path}`"}1142738
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.