with one click
simstim
Simstim - HITL Accelerated Development Workflow
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Simstim - HITL Accelerated Development Workflow
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Security and quality audit of application codebase
Bridgebuilder — Autonomous PR Review
Create comprehensive Software Design Document based on PRD
Execute sprint tasks with production-quality code and tests
Loa onboarding wizard: environment detection, profile questionnaire, config generation, and post-config explanation in ≤10 turns
Create comprehensive sprint plan based on PRD and SDD
| name | simstim |
| description | Simstim - HITL Accelerated Development Workflow |
| capabilities | {"schema_version":1,"read_files":true,"search_code":true,"write_files":true,"execute_commands":true,"web_access":true,"user_interaction":true,"agent_spawn":true,"task_management":true} |
| cost-profile | unbounded |
"Experience the AI's work while maintaining your own consciousness." — Gibson, Neuromancer
Estimated per invocation: $25–$65/full cycle (see Cost Matrix)
External providers called: Claude Opus 4.7 (primary), GPT-5.3-codex (cross-review), Gemini 2.5 Pro (tertiary)
To cap spend: Set hounfour.metering.budget.daily_micro_usd in .loa.config.yaml. Budget enforcement is active when hounfour.metering.enabled: true.
If cost is a concern: Run /loa setup — the wizard will guide you to a budget-appropriate configuration.
Pricing verified: 2026-04-15. Prices change — recheck before large commitments.
<input_guardrails>
This skill manages its own 8-phase workflow. DO NOT use Claude Code's native Plan Mode.
Why this matters:
Correct behavior:
/simstim I want to build authentication[1/8] DISCOVERY - Let me ask you some questions...If you feel the urge to plan: You're already IN a planning workflow. Follow the phases.
EnterPlanMode — simstim phases ARE the plan/run sprint-plan — NEVER implement code directly/run sprint-plan fails or is unavailable, HALT and inform the user — do NOT fall back to direct implementationbr commands for task lifecycle, NOT TaskCreate/TaskUpdateWhy this matters:
This is NOT /autonomous - you interact with the human throughout planning phases.
State is tracked in .run/simstim-state.json for resume capability.
Display: [0/8] PREFLIGHT - Validating configuration...
Check configuration:
result=$(.claude/scripts/simstim-orchestrator.sh --preflight ${DRY_RUN:+--dry-run} ${FROM:+--from "$FROM"} ${RESUME:+--resume} ${ABORT:+--abort})
Flatline Readiness Validation (FR-3, cycle-048):
Run fresh-per-cycle validation to verify Flatline Protocol can operate:
flatline_result=$(.claude/scripts/flatline-readiness.sh --json)
flatline_exit=$?
Handle exit codes:
flatline_protocol.enabled is false in .loa.config.yaml.
Flatline phases (2, 4, 6) will be skipped. Display warning:
"Flatline Protocol is disabled — review phases will be skipped.""No API keys found for Flatline providers. Set the required env vars.""Flatline running in degraded mode — some providers unavailable."
Include the recommendations array from JSON output so the user knows
which env vars to set.Fresh-per-cycle requirement: This check MUST run at the start of each
new simstim cycle, not be cached from a previous session. Provider keys
can change between sessions (expired, rotated, newly set). The
flatline-readiness.sh script is stateless and fast (~100ms) — it reads
config and checks env vars without making API calls.
Handle preflight result:
If --dry-run: Display planned phases and exit
If --abort: Confirm cleanup and exit
If --resume: Jump to <resume_support> section
Otherwise: Continue to Phase 1 or specified --from phase
Compute total phases for progress display (cycle-045): Base phases: 8. Check config gates to count enabled sub-phases:
simstim.bridgebuilder_design_review: true → +1 (Phase 3.5)red_team.enabled: true AND red_team.simstim.auto_trigger: true → +1 (Phase 4.5)simstim.flatline.beads_loop: true → +1 (Phase 6.5)Store computed total_phases in simstim state:
.claude/scripts/simstim-state.sh update total_phases "$total_phases"
Use [N/$total_phases] in all subsequent phase progress displays instead of hardcoded [N/8].
Example: [0/11] PREFLIGHT when all 3 sub-phases enabled, [0/8] PREFLIGHT when none.
<phase_1_discovery>
Display: [1/8] DISCOVERY - Creating Product Requirements Document...
Update state: simstim-orchestrator.sh --update-phase discovery in_progress
Guide the user through PRD creation:
Create PRD at grimoires/loa/prd.md following standard PRD structure.
Artifact completion detection:
test -f grimoires/loa/prd.mdOnce complete:
.claude/scripts/simstim-orchestrator.sh --update-phase discovery completed
.claude/scripts/simstim-state.sh add-artifact prd grimoires/loa/prd.md
Proceed to Phase 2. </phase_1_discovery>
<phase_2_flatline_prd>
Display: [2/8] FLATLINE PRD - Multi-model adversarial review...
Update state: simstim-orchestrator.sh --update-phase flatline_prd in_progress
Run Flatline Protocol:
result=$(.claude/scripts/flatline-orchestrator.sh --doc grimoires/loa/prd.md --phase prd --json)
Process results in HITL mode:
For each DISPUTED item, ask user:
DISPUTED: [suggestion]
GPT scored [X], Opus scored [Y]
[A]ccept / [R]eject / [S]kip?
For each BLOCKER item, ask user:
BLOCKER: [concern]
Severity: [score]
[O]verride (requires rationale) / [R]eject / [D]efer?
BLOCKER Override Handling:
.claude/scripts/simstim-orchestrator.sh --log-blocker-override \
--blocker-id "[id]" \
--decision "override" \
--rationale "[user rationale]"
Update state with metrics:
.claude/scripts/simstim-orchestrator.sh --update-flatline-metrics prd [integrated] [disputed] [blockers]
.claude/scripts/simstim-orchestrator.sh --update-phase flatline_prd completed
Skip if Flatline unavailable: Log warning, continue to Phase 3.
Proceed to Phase 3. </phase_2_flatline_prd>
<phase_3_architecture>
Display: [3/8] ARCHITECTURE - Creating Software Design Document...
Update state: simstim-orchestrator.sh --update-phase architecture in_progress
Guide the user through SDD creation:
Create SDD at grimoires/loa/sdd.md following standard SDD structure.
Artifact completion detection:
test -f grimoires/loa/sdd.mdOnce complete:
.claude/scripts/simstim-orchestrator.sh --update-phase architecture completed
.claude/scripts/simstim-state.sh add-artifact sdd grimoires/loa/sdd.md
Proceed to Phase 3.5 (if enabled) or Phase 4. </phase_3_architecture>
<phase_3_5_bridgebuilder_sdd>
Display: [3.5/8] BRIDGEBUILDER SDD - Architectural design review...
Trigger conditions (ALL must be true):
bridgebuilder_design_review.enabled: true in .loa.config.yamlsimstim.bridgebuilder_design_review: true in .loa.config.yamltest -f grimoires/loa/sdd.md)If only one config flag is set, skip with warning: "bridgebuilder_design_review.enabled and simstim.bridgebuilder_design_review disagree — design review will not run. Set both to true to enable."
Skip conditions (any triggers skip):
When triggered:
Update state: simstim-orchestrator.sh --update-phase bridgebuilder_sdd in_progress
Load persona: Read persona from path configured in
bridgebuilder_design_review.persona_path (default: .claude/data/bridgebuilder-persona.md)
Load lore (if bridgebuilder_design_review.lore_enabled: true):
Load lore entries using the same mechanism as Run Bridge Phase 3.1 step 3:
read categories from yq '.run_bridge.lore.categories[]' .loa.config.yaml,
then load matching entries from grimoires/loa/lore/patterns.yaml and
grimoires/loa/lore/visions.yaml. Falls back gracefully to empty string
if lore files do not exist.
Trajectory log (after lore load): Log categories loaded, number of lore entries found, and whether fallback was used (e.g., "Lore loaded: 2 categories, 5 entries" or "Lore: no files found, proceeding without lore context").
Read artifacts:
grimoires/loa/sdd.md (full document; if >5K tokens, summarize per Run Bridge truncation strategy)grimoires/loa/prd.md (for requirement traceability)grimoires/loa/a2a/flatline/prd-review.json (structured, predictable size)
and the most recently modified file from grimoires/loa/context/. If total
discovery notes exceed 3K tokens, truncate context/ content first (preserve
flatline results). Skip silently if neither exists. These enable tracing the
full problem → requirements → design reasoning chain.Generate review: Using the Bridgebuilder persona and
.claude/data/design-review-prompt.md template, evaluate the SDD against 6 dimensions:
Produce dual-stream output:
<!-- bridge-findings-start/end --> markersTarget completion within 120 seconds. If taking significantly longer, truncate insights prose and preserve findings JSON.
Save review:
mkdir -p .run/bridge-reviews
Write to .run/bridge-reviews/design-review-{cycle}.md with 0600 permissions.
Parse findings:
.claude/scripts/bridge-findings-parser.sh \
--input .run/bridge-reviews/design-review-{cycle}.md \
--output .run/bridge-reviews/design-review-{cycle}.json
HITL interaction for each finding by severity:
REFRAME findings (always presented):
REFRAME: [title]
[description]
This questions the design framing, not the implementation.
[A]ccept minor (modify SDD section)
[A]ccept major (return to Architecture phase)
[R]eject (log rationale)
[D]efer (capture as vision)
needs_rework, set
simstim-orchestrator.sh --update-phase architecture in_progress,
preserve REFRAME context to .run/bridge-reviews/reframe-context.md,
return to Phase 3. Circuit breaker: Track rework count in
bridgebuilder_sdd.rework_count (max 2). After 2 cycles,
REFRAME findings are presented as accept-minor-only or auto-defer.original_severity: "REFRAME"
in metadata) and capture as vision entry in Step 9. This semantic transition
reflects the state change: an active design question becomes a preserved
insight for later exploration.CRITICAL findings (mandatory acknowledgment):
CRITICAL: [title]
[description]
Design cannot satisfy a P0 requirement as specified.
[A]ccept (modify SDD) / [R]eturn to Architecture / [R]eject (with rationale)
No Defer option — CRITICAL findings demand a decision, not deferral.
HIGH/MEDIUM findings:
[severity]: [title]
[description]
Suggested change: [suggestion]
[A]ccept (modify SDD) / [R]eject / [D]efer
SPECULATION findings:
SPECULATION: [title]
[description]
Architectural alternative to consider.
[A]ccept (incorporate into SDD) / [D]efer (capture as vision)
LOW findings (informational, no action required):
LOW: [title]
[description]
Minor suggestion — displayed for awareness.
PRAISE findings: Display to user (no action needed)
VISION findings: Auto-capture to vision registry (no user interaction)
Vision capture (if any VISION/SPECULATION findings — including
deferred REFRAMEs reclassified as VISION in Step 8 — and
bridgebuilder_design_review.vision_capture: true):
.claude/scripts/bridge-vision-capture.sh \
--findings .run/bridge-reviews/design-review-{cycle}.json \
--bridge-id "design-review-{simstim_id}" \
--iteration 1 \
--output-dir grimoires/loa/visions
Note: --pr is omitted (optional argument). --bridge-id uses a
design-review-prefixed identifier for provenance tracking.
Trajectory log (after vision capture):
Log event name (design_review_vision_capture), number of vision entries
created, bridge-id, and findings count by severity.
Update artifact checksum (if SDD was modified):
.claude/scripts/simstim-state.sh add-artifact sdd grimoires/loa/sdd.md
Complete phase:
.claude/scripts/simstim-orchestrator.sh --update-phase bridgebuilder_sdd completed
If skipped (config disabled or mismatch):
If Phase 3.5 fails (review generation error, parse failure, etc.):
skipped (not failed) to avoid blockingProceed to Phase 4. </phase_3_5_bridgebuilder_sdd>
<phase_4_flatline_sdd>
Display: [4/8] FLATLINE SDD - Multi-model adversarial review...
Update state: simstim-orchestrator.sh --update-phase flatline_sdd in_progress
Follow same HITL process as Phase 2, but for SDD:
result=$(.claude/scripts/flatline-orchestrator.sh --doc grimoires/loa/sdd.md --phase sdd --json)
Process HIGH_CONSENSUS, DISPUTED, BLOCKER items as in Phase 2.
Update state:
.claude/scripts/simstim-orchestrator.sh --update-flatline-metrics sdd [integrated] [disputed] [blockers]
.claude/scripts/simstim-orchestrator.sh --update-phase flatline_sdd completed
Proceed to Phase 4.5 (if enabled) or Phase 5. </phase_4_flatline_sdd>
<phase_4_5_red_team_sdd>
Display: [4.5/8] RED TEAM SDD - Generative adversarial security design...
Trigger conditions (ALL must be true):
red_team.simstim.auto_trigger: true in .loa.config.yamlred_team.enabled: true in .loa.config.yamlSkip conditions (any triggers skip):
red_team.simstim.auto_trigger: false (default)When triggered:
.claude/scripts/flatline-orchestrator.sh \
--doc grimoires/loa/sdd.md \
--phase sdd \
--mode red-team \
--execution-mode standard \
--json
simstim-orchestrator.sh --update-phase red_team_sdd completedIf skipped:
Proceed to Phase 5. </phase_4_5_red_team_sdd>
Phase 4.5 is off by default (red_team.simstim.auto_trigger: false). This is a
deliberate progressive rollout — the Red Team gate was introduced in cycle-044 and
runs as a standalone skill (/red-team). Integration into simstim is opt-in until the
gate has proven stable across multiple cycles.
To enable Red Team in simstim:
# .loa.config.yaml
red_team:
enabled: true
simstim:
auto_trigger: true # Enable Phase 4.5
What Phase 4.5 reviews:
Evidence of execution: When active, Phase 4.5 logs to .run/simstim-state.json
under phases.red_team_sdd and produces attack findings in the Flatline output
directory (grimoires/loa/a2a/flatline/).
<phase_5_planning>
Display: [5/8] PLANNING - Creating Sprint Plan...
Update state: simstim-orchestrator.sh --update-phase planning in_progress
Guide the user through sprint planning:
Create sprint plan at grimoires/loa/sprint.md following standard format.
Artifact completion detection:
test -f grimoires/loa/sprint.mdOnce complete:
.claude/scripts/simstim-orchestrator.sh --update-phase planning completed
.claude/scripts/simstim-state.sh add-artifact sprint grimoires/loa/sprint.md
Proceed to Phase 6. </phase_5_planning>
<phase_6_flatline_sprint>
Display: [6/8] FLATLINE SPRINT - Multi-model adversarial review...
Update state: simstim-orchestrator.sh --update-phase flatline_sprint in_progress
Follow same HITL process as Phase 2, but for sprint plan:
result=$(.claude/scripts/flatline-orchestrator.sh --doc grimoires/loa/sprint.md --phase sprint --json)
Process HIGH_CONSENSUS, DISPUTED, BLOCKER items as in Phase 2.
Update state:
.claude/scripts/simstim-orchestrator.sh --update-flatline-metrics sprint [integrated] [disputed] [blockers]
.claude/scripts/simstim-orchestrator.sh --update-phase flatline_sprint completed
Proceed to Phase 7. </phase_6_flatline_sprint>
<phase_7_implementation>
Display: [7/8] IMPLEMENTATION - Handing off to autonomous execution...
Update state: simstim-orchestrator.sh --update-phase implementation in_progress
Before invoking /run sprint-plan, verify:
grimoires/loa/sprint.md is present and was generated this cyclebr list shows tasks)auditor-sprint-feedback.md and engineer-feedback.md — address any findings firstmain or other protected branchIf any check fails, report the issue to the user instead of proceeding.
CRITICAL: Do NOT implement directly. Do NOT use /implement without /run. The /run command wraps /implement with the review→audit cycle and circuit breaker.
Handoff to /run sprint-plan:
This phase delegates to the run-mode skill for autonomous implementation.
Inform user:
Ready to begin autonomous implementation.
This will execute all sprints and create a draft PR.
Continue? [Y/n]
Set plan_id reference (v1.28.0):
.claude/scripts/simstim-orchestrator.sh --set-expected-plan-id
This stores the expected plan_id for state correlation after run-mode completes.
Invoke /run sprint-plan:
.run/sprint-plan-state.jsonSync run-mode state (v1.28.0):
sync_result=$(.claude/scripts/simstim-orchestrator.sh --sync-run-mode)
This synchronizes run-mode completion state back to simstim state atomically.
Check sync result:
synced: true: State successfully synchronizedsynced: false, reason: plan_id_mismatch: Stale run-mode state detected, do NOT proceedsynced: false, reason: stale_timestamp: Run-mode state too old, do NOT proceedsynced: false, reason: no_run_mode_state: Run-mode didn't complete, check manuallyCheck synchronized state:
/run-resume--force-phase to bypassUpdate simstim state (if sync didn't already):
.claude/scripts/simstim-orchestrator.sh --update-phase implementation [completed|incomplete]
Recovery: Force Phase (v1.28.0):
If sync fails repeatedly (after 3 attempts), use the escape hatch:
.claude/scripts/simstim-orchestrator.sh --force-phase complete --yes
⚠️ WARNING: This bypasses validation. Only use as last resort when you've verified implementation is actually complete.
Proceed to Phase 7.5 (if post-PR validation ran) or Phase 8. </phase_7_implementation>
<phase_7_5_post_pr_validation>
Display: [7.5/8] POST-PR VALIDATION - Fresh-eyes review...
This phase runs automatically via post-pr-orchestrator.sh when post_pr_validation.enabled: true.
The post-PR validation loop includes:
POST_PR_AUDIT: Consolidated audit on PR changes
.PR-AUDITED markerCONTEXT_CLEAR: Checkpoint and fresh context
To continue with fresh-eyes E2E testing:
1. Run: /clear
2. Run: /simstim --resume
E2E_TESTING: Fresh-eyes testing
.PR-E2E-PASSED markerFLATLINE_PR (optional): Multi-model PR review
flatline_review.enabled: true.PR-VALIDATED markerBRIDGEBUILDER_REVIEW (optional, Amendment 1 — cycle-053): Post-PR Bridgebuilder closed-loop
post_pr_validation.phases.bridgebuilder_review.enabled: truebridge-orchestrator.sh (depth 5 by default) to post multi-model review to PRpost-pr-triage.sh classifies findings and logs reasoning per finding.run/bridge-pending-bugs.jsonl for auto-dispatchgrimoires/loa/a2a/trajectory/bridge-triage-*.jsonl.run/bridge-lore-candidates.jsonl for lore mininggrimoires/loa/proposals/close-bridgebuilder-loop.md for full design rationaleFull phase sequence: POST_PR_AUDIT → CONTEXT_CLEAR → E2E_TESTING → FLATLINE_PR → BRIDGEBUILDER_REVIEW → READY_FOR_HITL
Resume from context clear:
When user runs /simstim --resume after context clear:
# Check post-PR state
current_phase=$(post-pr-state.sh get state)
if [[ "$current_phase" == "CONTEXT_CLEAR" ]]; then
# Continue from E2E_TESTING
post-pr-orchestrator.sh --resume --pr-url "$PR_URL"
fi
Final states:
READY_FOR_HITL: All validations passed, PR ready for human reviewHALTED: Validation failed, check halt_reason field</phase_7_5_post_pr_validation>
<phase_complete>
Display: [8/8] COMPLETE - Workflow finished!
Generate Flatline summary:
Flatline Summary:
- PRD: [N] integrated, [M] disputed, [K] blockers
- SDD: [N] integrated, [M] disputed, [K] blockers
- Sprint: [N] integrated, [M] disputed, [K] blockers
Total: [X] integrated, [Y] disputed, [Z] blockers
Display PR URL from run-mode (if available)
Update final state:
.claude/scripts/simstim-orchestrator.sh --complete
Display completion message:
Simstim workflow complete!
Artifacts created:
- grimoires/loa/prd.md
- grimoires/loa/sdd.md
- grimoires/loa/sprint.md
PR: [URL]
Use /simstim --abort to clean up state file.
</phase_complete>
<error_handling>
If any phase fails unexpectedly:
Log error to trajectory
Present options to user:
Phase [X] encountered an error: [message]
[R]etry - Attempt phase again
[S]kip - Mark as skipped, continue (may cause issues)
[A]bort - Save state and exit
Handle choice:
If Flatline API times out (>120s):
The orchestrator script traps SIGINT:
<resume_support>
When --resume flag is provided:
Step 1: Validate State File Exists
if [[ ! -f .run/simstim-state.json ]]; then
error "No state file found. Cannot resume."
error "Use /simstim to start a new workflow."
exit 1
fi
Step 2: Check Schema Version
.claude/scripts/simstim-state.sh check-version
If version mismatch, migration is attempted automatically.
Step 3: Load State and Determine Resume Point
# Get current state
state=$(.claude/scripts/simstim-state.sh get state)
phase=$(.claude/scripts/simstim-state.sh get phase)
# Find first incomplete phase
incomplete_phase=$(jq -r '.phases | to_entries | map(select(.value == "in_progress" or .value == "pending")) | .[0].key // "complete"' .run/simstim-state.json)
Step 4: Validate Artifact Checksums
drift=$(.claude/scripts/simstim-state.sh validate-artifacts)
valid=$(echo "$drift" | jq -r '.valid')
Step 5: Handle Artifact Drift
If drift detected (valid == false), present options to user:
For each modified artifact:
⚠️ Artifact drift detected:
[artifact_name] (path/to/file.md)
Expected: sha256:abc123...
Actual: sha256:def456...
This file was modified since the last session.
[R]e-review with Flatline - Run Flatline Protocol again on this artifact
[C]ontinue - Keep changes, skip re-review (may miss quality issues)
[A]bort - Stop workflow, keep current state
User choices:
Step 6: Display Resume Summary
════════════════════════════════════════════════════════════
Resuming Simstim Workflow
════════════════════════════════════════════════════════════
Simstim ID: simstim-20260203-abc123
Started: 2026-02-03T10:00:00Z
Last Activity: 2026-02-03T11:30:00Z
Completed Phases:
✓ PREFLIGHT
✓ DISCOVERY (PRD created)
✓ FLATLINE PRD (3 integrated, 1 disputed)
✓ ARCHITECTURE (SDD created)
Resuming from: FLATLINE SDD
════════════════════════════════════════════════════════════
Step 7: Jump to Resume Phase
Based on incomplete_phase, jump to the appropriate phase section:
discovery → Phase 1flatline_prd → Phase 2architecture → Phase 3bridgebuilder_sdd → Phase 3.5flatline_sdd → Phase 4planning → Phase 5flatline_sprint → Phase 6implementation → Phase 7complete → Phase 8 (already done)If Claude session times out and user returns to a new session:
State file is the source of truth
.run/simstim-state.json persists across sessionsSKILL.md is loaded fresh
User invokes /simstim --resume
Artifacts contain all work
grimoires/loa/prd.md - PRD contentgrimoires/loa/sdd.md - SDD contentgrimoires/loa/sprint.md - Sprint planFlatline metrics preserved
When run-mode encounters a circuit breaker scenario (max cycles, timeout, etc.):
.claude/scripts/simstim-state.sh update-phase implementation incomplete
On resume:
incomplete/run-resume instead of fresh /run sprint-planWhen state sync fails (plan_id mismatch, stale timestamp, etc.):
Automatic Detection on Resume: The preflight phase automatically detects when implementation completed but simstim state wasn't updated (e.g., due to context compaction). It validates:
SYNC_FAILED State: After 3 failed sync attempts, simstim enters SYNC_FAILED state. Recovery options:
.run/sprint-plan-state.json manually.claude/scripts/simstim-orchestrator.sh --force-phase complete --yes
⚠️ WARNING: Only use after manually verifying implementation is completeAWAITING_HITL State: When run-mode returns READY_FOR_HITL (post-PR validation requested human review):
| Flag | Description | Mutual Exclusivity |
|---|---|---|
--from <phase> | Start from specific phase (plan-and-analyze, architect, sprint-plan, run) | Cannot use with --resume |
--resume | Continue from interruption | Cannot use with --from |
--abort | Clean up state and exit | Takes precedence over others |
--dry-run | Show planned phases without executing | Can combine with any |
Requires in .loa.config.yaml:
simstim:
enabled: true
Full configuration reference: See SDD Section 8.3