/execute
Do the actual work. Execute is the bridge from Solution Space to shipped code. Pre-flight checks, build, detect drift, salvage if needed.
Execute sits within the larger Intent -> Execution -> Review loop. This skill handles the Execution phase, which itself contains an inner loop: build, check alignment, course-correct or salvage.
When to Use
Invoke /execute when:
- •Aim is clear - you know the outcome you're trying to achieve
- •Solution is chosen - you've explored options and picked an approach
- •Context is loaded - you understand the constraints and guardrails
- •Ready to build - not still exploring or discovering
Do not use when:
- •Aim is unclear - use
/aimfirst - •Still exploring options - use
/solution-spacefirst - •Problem is ambiguous - use
/problem-spaceor/problem-statementfirst
The Execute Process
Step 1: Pre-flight Check
Before writing code, verify alignment:
Pre-flight Checklist: [ ] Aim is clear - what outcome am I producing? [ ] Constraints known - what must I NOT break? [ ] Context loaded - do I have the codebase understanding I need? [ ] Scope bounded - what am I specifically doing (and NOT doing)? [ ] Success criteria - how will I know when I'm done?
If any box can't be checked, stop and address it before proceeding. Ask clarifying questions if requirements are ambiguous.
"The task is [task]. The aim is [aim]. I'm specifically doing [scope]. I will NOT be touching [out of scope]. Success looks like [criteria]."
Step 2: Build
Do the work. Keep it focused.
Build principles:
- •Work in small, testable increments
- •Commit logical units of change
- •Stay within the declared scope
- •If scope expands, pause and reassess (see Drift Detection)
During build:
- •Make the change
- •Verify it works (tests, manual check, whatever's appropriate)
- •Stage changes
- •Run review if available (
sg reviewor equivalent) - •Handle review findings (fix trivial, create tasks for non-trivial)
- •Commit with clear message
Step 3: Detect Drift
Periodically check alignment during execution:
Drift signals:
- •Scope is expanding beyond original task
- •You're touching files not mentioned in the plan
- •"While I'm here" thoughts keep appearing
- •Original estimate is significantly exceeded
- •Approach has changed direction multiple times
- •You're protecting code you've invested in
When you notice drift:
Drift Check: - Original aim: [aim] - What I'm actually doing now: [current work] - Gap: [describe the divergence] - Verdict: [aligned | minor drift | significant drift | lost]
Aligned: Continue building.
Minor drift: Note it, continue if still valuable, or refocus.
Significant drift: Pause. Either:
- •Refocus on original aim and defer the tangent
- •Acknowledge scope change and get confirmation
- •Salvage and restart
Lost: Invoke /salvage immediately.
Step 4: Salvage if Needed
When to stop and salvage:
- •Approach has reversed 3+ times
- •Scope keeps expanding while "done" keeps fuzzing
- •You're oscillating, not converging
- •The finish line keeps moving
- •Starting over feels right
Don't fight lost work. Extract the learning and restart clean.
"Code is cheap now. Learning is the asset."
Invoke /salvage to extract what you learned before restarting.
Output Format
When execution completes successfully:
## Execution Complete **Task:** [what was done] **Aim achieved:** [how it maps to the original aim] ### Changes - [file/component]: [what changed and why] - [file/component]: [what changed and why] ### Verification - [how it was tested/verified] ### Notes - [anything relevant for future work]
When drift triggers a pause:
## Execution Paused - Drift Detected **Original aim:** [aim] **Current state:** [where things stand] **Drift:** [what diverged and why] ### Options 1. [option 1] 2. [option 2] 3. Salvage and restart Recommendation: [your assessment]
Examples
Example 1: Clean Execution
/execute Task: Add validation for empty strings in user input
Pre-flight:
Pre-flight Checklist: [x] Aim is clear - prevent empty strings from causing silent failures [x] Constraints known - don't break existing validation, maintain API compatibility [x] Context loaded - reviewed input processing flow, found 3 entry points [x] Scope bounded - only the 3 input handlers, not the downstream processors [x] Success criteria - empty strings rejected with clear error message
Output:
## Execution Complete **Task:** Add empty string validation to user input **Aim achieved:** Empty strings now rejected at entry points with clear error message ### Changes - handlers/user.go: Added empty string check before processing - handlers/profile.go: Added empty string check before processing - handlers/settings.go: Added empty string check before processing - lib/validation.go: New isEmpty() helper for consistency ### Verification - Added unit tests for each handler (empty, whitespace-only, valid) - Manual test: confirmed error message appears in UI ### Notes - Downstream processors still accept empty strings (out of scope) - Consider adding validation to API gateway layer in future
Example 2: Drift Detection Mid-Execution
/execute Task: Fix the timezone bug in calendar display
Mid-execution drift check:
Drift Check: - Original aim: Fix timezone display bug - What I'm actually doing now: Refactoring the entire date handling library - Gap: Went from fixing display to rewriting infrastructure - Verdict: Significant drift
Output:
## Execution Paused - Drift Detected **Original aim:** Fix timezone bug in calendar display **Current state:** Found the bug, but discovered date handling is inconsistent across 12 files **Drift:** Started fixing the display bug, realized the root cause is a design issue. Fixing it properly requires touching the date library, which affects everything. ### Options 1. Band-aid fix in display layer only (solves symptom, not cause) 2. Refactor date handling (right fix, but 10x scope) 3. Salvage learning, create proper task for date system redesign Recommendation: Option 3 - the date system needs intentional redesign, not accidental refactoring during a bug fix. Salvage what we learned, create a proper design task, apply band-aid for now.
Example 3: Triggering Salvage
/execute Building the new auth flow
After multiple iterations:
## Execution Paused - Salvaging **Original aim:** Simplify authentication flow **Current state:** 4th approach attempted, complexity has increased The approach has reversed multiple times: 1. Started with unified flow -> broke provider-specific handling 2. Switched to provider adapters -> too much duplication 3. Tried abstract base class -> inheritance nightmare 4. Back to unified flow with exceptions -> where we started, but worse Invoking /salvage to extract learning before restart.
Session Persistence
This skill can persist context to .oh/<session>.md for use by subsequent skills.
If session name provided (/execute auth-refactor):
- •Reads/writes
.oh/auth-refactor.mddirectly
If no session name provided (/execute):
- •After pre-flight, offer to save execution context:
"Save to session? [suggested-name] [custom] [skip]"
- •Suggest a name based on git branch or the task description
Reading: Check for existing session file. Read Aim, Problem Statement, Solution Space to understand what we're building and why. This is essential for drift detection.
Writing: After pre-flight and during execution, write status to the session file:
## Execute **Updated:** <timestamp> **Status:** [pre-flight | in-progress | drift-detected | complete] [execution notes, drift observations, etc.]
Adaptive Enhancement
Base Skill (prompt only)
Works anywhere. Manual pre-flight checklist, drift detection by reasoning. No persistence.
With .oh/ session file
- •Reads
.oh/<session>.mdfor aim, constraints, selected solution - •Writes execution status and notes to the session file
- •Drift detection compares current work against session aim
With Open Horizons MCP
- •Queries related past decisions and learnings
- •Logs execution decisions to graph database
- •Session file serves as local cache
With task management (ba, GitHub issues)
- •Creates subtasks for non-trivial findings
- •Updates task status as work progresses
- •Links commits to tasks
With code review (sg, CodeRabbit)
- •Runs automated review on staged changes
- •Triages findings by severity
- •Iterates until review passes
Position in Framework
Comes after: /solution-space (you need a chosen approach to execute).
Leads to: /ship to deliver, /review to verify, /salvage if drifting.
Can loop back to: /aim or /problem-space via /salvage when the approach isn't working.
Leads To
After execute, typically:
- •
/review- Verify the work before committing - •
/ship- Deploy the change to users - •
/salvage- If drift was detected and restart needed
Remember: Execute is the inner loop. Stay focused on the aim. Code is cheap; thrashing is expensive. Detect drift early. Salvage without shame.