.claude/skills/run-mode/SKILL.md
<input_guardrails> ## Pre-Execution Validation Before main skill execution, perform guardrail checks. ### Step 1: Check Configuration Read `.loa.config.yaml`: ```yaml guardrails: input: enabled: true|false ``` **Exit Conditions**: - `guardrails.input.enabled: false` → Skip to skill execution - Environment `LOA_GUARDRAILS_ENABLED=false` → Skip to skill execution ### Step 2: Run Danger Level Check **Script**: `.claude/scripts/danger-level-enforcer.sh --skill run-mode --mode {mode}` **
npx skillsauth add adeitasuna/mibestats .claude/skills/run-modeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<input_guardrails>
Before main skill execution, perform guardrail checks.
Read .loa.config.yaml:
guardrails:
input:
enabled: true|false
Exit Conditions:
guardrails.input.enabled: false → Skip to skill executionLOA_GUARDRAILS_ENABLED=false → Skip to skill executionScript: .claude/scripts/danger-level-enforcer.sh --skill run-mode --mode {mode}
CRITICAL: This is a high danger level skill (autonomous execution).
| Mode | Behavior | |------|----------| | Interactive | Require explicit confirmation | | Autonomous | Not applicable (run-mode IS autonomous mode) |
Before each skill invocation in the run loop:
danger-level-enforcer.sh --skill $SKILL --mode autonomous
| Result | Behavior | |--------|----------| | PROCEED | Execute skill | | WARN | Execute with enhanced logging | | BLOCK | Skip skill, log to trajectory |
Override: Use --allow-high flag to allow high-risk skills:
/run sprint-1 --allow-high
Script: .claude/scripts/pii-filter.sh
Detect and redact sensitive data in run scope.
Script: .claude/scripts/injection-detect.sh --threshold 0.7
Prevent manipulation of autonomous execution.
Write to grimoires/loa/a2a/trajectory/guardrails-{date}.jsonl.
On error: Log to trajectory, fail-open (continue to skill). </input_guardrails>
You are an autonomous implementation agent. You execute sprint implementations in cycles until review and audit pass, with safety controls to prevent runaway execution.
State Machine:
READY → JACK_IN → RUNNING → COMPLETE/HALTED → JACKED_OUT
Execution Loop (Single Sprint):
while circuit_breaker.state == CLOSED:
1. /implement target
2. Commit changes, track deletions
3. /review-sprint target
4. If findings → continue loop
5. /audit-sprint target
6. If findings → continue loop
7. RED_TEAM_CODE gate (if enabled):
a. Check: red_team.code_vs_design.enabled == true in .loa.config.yaml
b. Check: SDD exists at grimoires/loa/sdd.md (or skip_if_no_sdd behavior)
c. Invoke: .claude/scripts/red-team-code-vs-design.sh \
--sdd grimoires/loa/sdd.md \
--diff - \ # pipe git diff main...HEAD
--output grimoires/loa/a2a/sprint-{N}/red-team-code-findings.json \
--sprint sprint-{N} \
--prior-findings grimoires/loa/a2a/sprint-{N}/engineer-feedback.md \
--prior-findings grimoires/loa/a2a/sprint-{N}/auditor-sprint-feedback.md
Note: --prior-findings paths are only passed when the files exist.
This enables the "Deliberative Council" pattern — the Red Team gate
sees what the reviewer and auditor already found, enabling focused
analysis rather than duplicating earlier findings.
d. Parse output: check summary.actionable count
e. If actionable > 0 (CONFIRMED_DIVERGENCE above severity_threshold):
- Increment red_team_code.cycles in .run/state.json
- If red_team_code.cycles >= red_team_code.max_cycles (default 2):
Log WARNING: "Red Team code-vs-design max cycles reached, skipping"
Continue to COMPLETE
- Else: continue loop (back to /implement)
f. If no actionable findings → continue to COMPLETE
8. If COMPLETED → break
Create draft PR
Invoke Post-PR Validation (if enabled)
Update state to READY_FOR_HITL or JACKED_OUT
Post-PR Validation (v1.25.0):
After PR creation, check post_pr_validation.enabled in .loa.config.yaml:
if post_pr_validation.enabled:
1. Invoke: post-pr-orchestrator.sh --pr-url <url> --mode autonomous
2. On SUCCESS (exit 0) → state = READY_FOR_HITL
3. On HALTED (exit 2-5) → state = HALTED, create [INCOMPLETE] PR note
else:
state = JACKED_OUT
The post-PR validation loop runs:
See grimoires/loa/prd-post-pr-validation.md for full specification.
Sprint Plan Execution Loop (/run sprint-plan):
discover_sprints() # From sprint.md, ledger.json, or a2a directories
filter_sprints(--from, --to)
create_feature_branch("feature/sprint-plan-{timestamp}")
for sprint in sprints:
1. Check if sprint already COMPLETED → skip
2. Update state: current_sprint = sprint
3. Execute single sprint loop (above)
4. Commit with sprint marker: "feat(sprint-N): ..."
5. If HALTED → break outer loop, preserve state
6. Mark sprint COMPLETED in state
7. Log sprint transition
8. DO NOT create PR yet (consolidate at end)
Push all commits to feature branch
Create SINGLE consolidated draft PR with all sprints
- Summary table showing per-sprint breakdown
- Commits grouped by sprint
- Deleted files section
Invoke Post-PR Validation (if enabled)
Update state to READY_FOR_HITL or JACKED_OUT
Consolidated PR (Default - v1.15.1):
--no-consolidate for legacy per-sprint PRsBefore any execution:
run_mode.enabled: true in .loa.config.yamlcheck-permissions.sh to verify required permissions.run/ state existsFour triggers that halt execution (main loop):
| Trigger | Default Threshold | Description | |---------|-------------------|-------------| | Same Issue | 3 | Same finding hash repeated | | No Progress | 5 | Cycles without file changes | | Cycle Limit | 20 | Maximum total cycles | | Timeout | 8 hours | Maximum runtime |
When tripped:
[INCOMPLETE]Separate counter from the main circuit breaker, specifically for the RED_TEAM_CODE gate:
| Setting | Default | Description |
|---------|---------|-------------|
| red_team.code_vs_design.max_cycles | 2 | Max re-implementation cycles triggered by divergence findings |
| red_team.code_vs_design.severity_threshold | 700 | Only CONFIRMED_DIVERGENCE findings above this severity trigger re-implementation |
State tracked in .run/state.json:
{
"red_team_code": {
"cycles": 0,
"max_cycles": 2,
"findings_total": 0,
"divergences_found": 0,
"last_findings_hash": null
}
}
Behavior:
red_team_code.cycles >= max_cycles: log WARNING "Red Team code-vs-design max cycles reached, skipping" and continue to COMPLETEred_team.code_vs_design.enabled: false: skip RED_TEAM_CODE gate entirelyskip_if_no_sdd: true: skip silentlyskip_if_no_sdd: false: error and HALTAll git operations MUST go through ICE wrapper:
.claude/scripts/run-mode-ice.sh <command> [args]
ICE enforces:
All state in .run/ directory:
| File | Purpose |
|------|---------|
| state.json | Run progress, metrics, options |
| sprint-plan-state.json | Sprint plan progress (for /run sprint-plan) |
| circuit-breaker.json | Trigger counts, history |
| deleted-files.log | Tracked deletions for PR |
| rate-limit.json | API call tracking |
sprint-plan-state.json)When running /run sprint-plan, track multi-sprint progress:
{
"plan_id": "plan-20260128-abc123",
"target": "sprint-plan",
"state": "RUNNING",
"sprints": {
"total": 4,
"completed": 2,
"current": "sprint-3",
"list": [
{"id": "sprint-1", "status": "completed", "cycles": 2},
{"id": "sprint-2", "status": "completed", "cycles": 3},
{"id": "sprint-3", "status": "in_progress", "cycles": 1},
{"id": "sprint-4", "status": "pending"}
]
},
"options": {
"from": 1,
"to": 4,
"max_cycles": 20
},
"metrics": {
"total_cycles": 6,
"total_files_changed": 45
}
}
Execute single sprint autonomously.
/run sprint-1
/run sprint-1 --max-cycles 10 --timeout 4
/run sprint-1 --branch feature/my-branch
/run sprint-1 --dry-run
/run sprint-1 --local
/run sprint-1 --confirm-push
--local)Keeps all changes on your local machine:
Use when: Experimenting, not ready to share, or want manual control.
--confirm-push)Prompts before any remote operations:
Use when: You want to review changes before teammates see them.
Set default behavior in .loa.config.yaml:
run_mode:
git:
auto_push: true # true | false | prompt
| Setting | Behavior |
|---------|----------|
| true | Push and create PR automatically (default) |
| false | Never auto-push (like always using --local) |
| prompt | Always ask before push (like always using --confirm-push) |
Priority: --local flag > --confirm-push flag > config setting > default (true)
Execute all sprints in sequence with consolidated PR (default).
/run sprint-plan # Consolidated PR at end (recommended)
/run sprint-plan --from 2 --to 4 # Execute sprints 2-4 only
/run sprint-plan --no-consolidate # Legacy: separate PR per sprint
Output: Single draft PR containing all sprint changes with per-sprint breakdown.
Display current progress.
/run-status
/run-status --json
/run-status --verbose
Gracefully stop execution.
/run-halt
/run-halt --force
/run-halt --reason "Need to review approach"
Continue from checkpoint.
/run-resume
/run-resume --reset-ice
/run-resume --force
Tracks API calls per hour to prevent exhaustion:
run_mode.rate_limiting.calls_per_hour/run --bug)Autonomous bug fixing with triage → implement → review → audit cycle.
/run --bug "Login fails when email contains + character"
/run --bug --from-issue 42
/run --bug "description" --allow-high
/run --bug "description"
│
▼
┌─────────────┐
│ TRIAGE │ Invoke bug-triaging skill
│ │ Output: triage.md, micro-sprint
└──────┬──────┘
│
▼
┌─────────────┐
│ IMPLEMENT │ /implement sprint-bug-{N}
│ │ Test-first: write test → fix → verify
└──────┬──────┘
│
▼
┌─────────────┐
│ REVIEW │ /review-sprint sprint-bug-{N}
│ │ If findings → back to IMPLEMENT
└──────┬──────┘
│
▼
┌─────────────┐
│ AUDIT │ /audit-sprint sprint-bug-{N}
│ │ If findings → back to IMPLEMENT
└──────┬──────┘
│
▼
┌─────────────┐
│ COMPLETE │ COMPLETED marker + draft PR
└─────────────┘
bugfix/{bug_id} branch via ICE/bug skill with description or --from-issue N
--from-issue: pass issue number to bug-triaging skilltriage.md and micro-sprint in grimoires/loa/a2a/bug-{id}/risk_level from bug state
risk_level: high AND --allow-high not set → HALT/implement sprint-bug-{N}/review-sprint sprint-bug-{N}/audit-sprint sprint-bug-{N}Tighter limits than standard run (bug scope is smaller):
| Trigger | Limit | Rationale | |---------|-------|-----------| | Same Issue | 3 cycles | Bug fix shouldn't need >3 review cycles | | No Progress | 5 cycles | If no file changes, bug may be misdiagnosed | | Cycle Limit | 10 total | Reduced from 20 (smaller scope) | | Timeout | 2 hours | Reduced from 8 (smaller scope) |
Circuit breaker state stored in .run/bugs/{bug_id}/circuit-breaker.json (namespaced per bug).
Per-bug namespaced state in .run/bugs/{bug_id}/state.json:
{
"schema_version": 1,
"bug_id": "20260211-a3f2b1",
"bug_title": "Login fails with + in email",
"sprint_id": "sprint-bug-3",
"state": "IMPLEMENTING",
"mode": "autonomous",
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:30:00Z",
"circuit_breaker": {
"cycle_count": 1,
"same_issue_count": 0,
"no_progress_count": 0,
"last_finding_hash": null
},
"confidence": {
"reproduction_strength": "strong",
"test_type": "unit",
"risk_level": "low",
"files_changed": 3,
"lines_changed": 42
}
}
Allowed State Transitions:
TRIAGE → IMPLEMENTING (triage complete)
IMPLEMENTING → REVIEWING (implementation complete)
REVIEWING → IMPLEMENTING (review found issues)
REVIEWING → AUDITING (review passed)
AUDITING → IMPLEMENTING (audit found issues)
AUDITING → COMPLETED (audit passed)
ANY → HALTED (circuit breaker or manual halt)
Invalid transitions must be rejected with an error.
On completion, create draft PR via ICE with confidence signals:
## Bug Fix: {bug_title}
**Bug ID**: {bug_id}
**Source**: /run --bug
### Confidence Signals
- Reproduction: {strong/weak/manual_only}
- Test type: {unit/integration/e2e/contract}
- Files changed: {N}
- Lines changed: {N}
- Risk level: {low/medium/high}
### Artifacts
- Triage: grimoires/loa/a2a/bug-{id}/triage.md
- Review: grimoires/loa/a2a/bug-{id}/reviewer.md
- Audit: grimoires/loa/a2a/bug-{id}/auditor-sprint-feedback.md
### Status: READY FOR HUMAN REVIEW
This PR was created by `/run --bug` autonomous mode.
Please review before merging.
CRITICAL: Bug PRs are ALWAYS draft. Never auto-merged. Human approval required.
Suspected files are checked against high-risk patterns during triage (Phase 3):
auth, authentication, login, password, token, jwt, oauth
payment, billing, charge, stripe, checkout
migration, schema, database, db
encrypt, decrypt, secret, credential, key
| Mode | Risk Level | Behavior | |------|-----------|----------| | Interactive | high | WARN: display risk, ask confirmation | | Autonomous | high (no --allow-high) | HALT: require --allow-high flag | | Autonomous | high (--allow-high) | Proceed with risk_level: high in PR | | Any | low/medium | Proceed normally |
All deletions logged to .run/deleted-files.log:
file_path|sprint|cycle
PR body includes prominent tree view:
## 🗑️ DELETED FILES - REVIEW CAREFULLY
**Total: 5 files deleted**
src/legacy/
└── old-component.ts (sprint-1, cycle 2)
4-Level Defense in Depth:
run_mode.enabled: trueHuman in the Loop:
run_mode:
enabled: true
defaults:
max_cycles: 20
timeout_hours: 8
rate_limiting:
calls_per_hour: 100
circuit_breaker:
same_issue_threshold: 3
no_progress_threshold: 5
git:
branch_prefix: "feature/"
create_draft_pr: true
On any error:
.run//run-status to see current state/run-resume to continue/run-resume --reset-ice if circuit breaker trippedrm -rf .run/ to start freshtesting
# valid-skill Test skill with valid license for unit testing. ## Purpose Used in test_constructs_loader.bats to verify correct handling of valid licenses.
testing
# grace-skill Test skill in license grace period for unit testing. ## Purpose Used in test_constructs_loader.bats to verify correct handling of licenses in grace period.
testing
# expired-skill Test skill with expired license for unit testing. ## Purpose Used in test_constructs_loader.bats to verify correct handling of expired licenses.
testing
# skill-b Test skill B from test-pack for unit testing. ## Purpose Used in test_pack_support.bats to verify pack validation and skill loading.