agentic/code/addons/agent-loop/skills/ralph-external/SKILL.md
Crash-resilient external loop with state persistence and CI/CD integration
npx skillsauth add jmagly/aiwg ralph-externalInstall 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.
Skill access pattern (post-kernel-pivot, 2026.5+)
Skill names referenced in this document are AIWG skills, not slash commands. Most are not kernel-listed and cannot be invoked as
/skill-nameby the platform. Reach them via:aiwg discover "<capability>" aiwg show skill <name>Only kernel-listed skills (
aiwg-doctor,aiwg-refresh,aiwg-status,aiwg-help,use,steward) are directly invokable as slash commands. See skill-discovery rule.
You are the Al External Orchestrator — launching and managing crash-resilient iterative loops that run outside the AI session for long-running tasks.
ralphralph runs the loop inside the current AI session. ralph-external launches the loop as an external process via tools/ralph-external/run.sh, persisting all state to .aiwg/ralph-external/. If the session dies mid-loop, the loop survives and can be reattached or resumed.
Use ralph-external when:
Users may say:
The task the loop should accomplish. Passed as the first positional argument.
Success criteria as a verifiable command. The loop exits when this command returns exit code 0.
Good examples:
--completion "npm test passes with 0 failures"--completion "npx tsc --noEmit exits with code 0"--completion "coverage report shows >80%"Maximum iterations before the loop halts and saves state for manual review.
Maximum wall-clock time. Loop checkpoints state before exiting so it can be resumed.
AI provider to use for loop iterations. Supported: claude, codex, factory, opencode.
Skip automatic git commits after each iteration.
Create and work on a dedicated feature branch. The branch is created before iteration 1.
Suppress verbose progress output. Completion banner is always shown.
When triggered:
--completion criteria are specified and verifiable.aiwg/ralph-external/ workspace; create if absentloop-id (8-character hex) and create the loop state file at .aiwg/ralph-external/loops/<loop-id>.json{ objective, completionCriteria, maxIterations, timeout, provider, status: "pending", iteration: 0 }--branch is specified, create the git branch nowtools/ralph-external/run.sh with all parsed flags, passing the loop-idAl External Loop Started
Loop ID: abc123
Objective: {objective}
Completion: {completion}
Max iterations: {max} | Timeout: {timeout}m | Provider: {provider}
Loop is running externally. Follow progress:
/ralph-attach --loop-id abc123
Check status:
/ralph-status
State: .aiwg/ralph-external/loops/abc123.json
Log: .aiwg/ralph-external/logs/abc123.log
--quiet is NOT set, automatically attach to the loop's output stream (equivalent to running /ralph-attach --loop-id <id>)State is written to disk before each external process action. If the process crashes:
tools/ralph-external/run.sh detects the incomplete state and resumes from the last checkpointState file schema (.aiwg/ralph-external/loops/<id>.json):
{
"loopId": "abc123",
"objective": "Fix all auth tests",
"completionCriteria": "npm test passes with 0 failures",
"maxIterations": 10,
"timeout": 60,
"provider": "claude",
"status": "running",
"iteration": 3,
"startedAt": "2026-04-01T10:30:00Z",
"lastCheckpoint": "2026-04-01T10:38:42Z",
"logFile": ".aiwg/ralph-external/logs/abc123.log",
"branch": null,
"learnings": ["auth mocks must be initialized before describe block"]
}
For use in pipelines, pass --quiet and read the exit code:
0 — loop completed successfully (completion criteria verified)1 — loop failed (max iterations or timeout reached)2 — configuration error (bad arguments)GitHub Actions example:
- name: Auto-fix tests
run: |
aiwg ralph-external "Fix all failing unit tests" \
--completion "npm test passes" \
--max-iterations 5 \
--timeout 30 \
--quiet
Missing --completion:
Error: --completion is required for /ralph-external.
Provide a verifiable success criterion:
/ralph-external "Fix tests" --completion "npm test passes"
External process launch failure:
Failed to launch external Al process.
Check:
1. tools/ralph-external/run.sh is executable
2. Node.js >= 18 is available
3. .aiwg/ directory is writable
Run with --verbose for diagnostics.
Loop already active for this objective:
An existing loop may be running for a similar objective.
Active loops:
abc123 — Fix auth tests (running, iteration 3/10)
Options:
1. Attach to existing: /ralph-attach --loop-id abc123
2. Start new anyway: confirm and proceed
3. Abort existing: /ralph-abort --loop-id abc123
/ralph-external "Fix all failing tests in src/auth/" --completion "npm test -- --testPathPattern=auth passes"
Response: Starts external loop, prints loop ID, streams live output.
/ralph-external "Migrate src/ to ESM" --completion "npx tsc --noEmit exits with code 0" --max-iterations 20 --timeout 120 --branch feat/esm-migration
Response: Creates branch feat/esm-migration, starts loop, streams output.
aiwg ralph-external "Fix lint errors" --completion "npm run lint exits 0" --max-iterations 5 --quiet
echo "Exit: $?"
Response: Runs silently, exits 0 on success or 1 on failure.
/ralph-external "Refactor payment module" --completion "npm test passes" --provider codex --max-iterations 8
Response: Runs iterations using OpenAI Codex instead of Claude.
ralph — In-session iterative loop (no crash recovery)ralph-attach — Attach to a running external loop's output streamralph-status — Check active and completed loop statusralph-abort — Stop a running loopralph-resume — Resume a paused or interrupted loopdata-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.