Cancel any active OMX mode (autopilot, ralph, ultrawork, ecomode, ultraqa, swarm, ultrapilot, pipeline, team)
54
60%
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 ./plugins/oh-my-codex/skills/cancel/SKILL.mdIntelligent cancellation that detects and cancels the active OMX mode.
The cancel skill is the standard way to complete and exit any OMX mode.
When the stop hook detects work is complete, it instructs the LLM to invoke
this skill for proper state cleanup. If cancel fails or is interrupted,
retry with --force flag, or wait for the 2-hour staleness timeout as
a last resort.
Automatically detects which mode is active and cancels it:
/cancelOr say: "cancelomc", "stopomc"
/cancel follows the session-aware state contract:
state_list_active and state_get_status, navigating .omx/state/sessions/{sessionId}/… to discover which mode is active..omx/state/*.json are consulted only as a compatibility fallback if the session id is missing or empty..omx/state/swarm.db / .omx/state/swarm-active.marker) and is not session-scoped.state_clear with the session id to remove only the matching session files; modes stay bound to their originating session.For Ralph-targeted cancellation (standalone or linked), completion is defined by post-conditions:
active=falsecurrent_phase='cancelled'completed_at is set (ISO timestamp)See: docs/contracts/ralph-cancel-contract.md.
Active modes are still cancelled in dependency order:
When cancellation targets Ralph state in a scope, completion requires all of the following:
active=false, current_phase='cancelled' (or linked terminal phase), and completed_at is set.--force is a compatibility flag for the same proven current scope as bare cancellation. It does not widen cancellation to other sessions, legacy roots, Team runtimes, or workspace artifacts. Its only additional behavior is exact-session native-stop cleanup after the same ownership checks.
--all is intentionally unsupported. Workspace-wide destructive cancellation requires a separately reviewed command and authority contract. Unknown flags and mixed flag combinations fail before mutation.
The native PreToolUse exemption accepts an inherited non-empty NODE_EXTRA_CA_CERTS only for the exact canonical omx cancel command shape (and workflow-supported --force). This does not relax NODE_OPTIONS, loader/import hooks, OPENSSL_CONF, shell startup/function injection, PATH/PATHEXT shadowing, leading assignments, command chaining, noncanonical executable resolution, or unrelated commands.
For session-scoped cancellation, a stale top-level owner_codex_session_id in skill-active-state.json may be replaced—not aliased—only inside the existing cancellation transaction after the current pointer, native owner sidecar, canonical target session, and all nested owner/session evidence agree. Displaced owner evidence must be positively absent or stale/dead; live, malformed, foreign, indeterminate, nested-contradictory, or cross-session evidence fails closed. If the skill marker is absent, mode-only cancellation keeps its existing behavior and does not create one.
The replacement and terminal skill state are serialized as one final skill payload. Cancellation retains all-target prevalidation, O_NOFOLLOW, content/identity revalidation, per-file sync, and reverse rollback. These are in-process transaction guarantees, not crash-atomic multi-file visibility; rollback restoration failures are reported rather than presented as successful cleanup.
/cancel
/cancel --force--force: same scope, plus exact-session native-stop cleanup;--all: reject without mutation;Cancellation derives writable targets from the already-proven writable scope. Compatibility discovery may inform status, but never grants write authority. Unrelated session, legacy-root, Team, and run-dir state remains untouched unless it is independently proven as the exact cancellation target.
Teams are detected by checking for config files in .omx/state/team/:
# Check for active teams
ls .omx/state/team/*/config.json 2>/dev/nullTwo-pass cancellation protocol:
Pass 1: Graceful Shutdown
For each team found in .omx/state/team/:
1. Read config.json to get team_name and workers list
2. For each worker:
a. Write shutdown inbox to .omx/state/team/{name}/workers/{worker}/inbox.md
b. Send short trigger via tmux send-keys
c. Wait up to 15 seconds for worker tmux pane to exit
d. If still alive: mark as unresponsivePass 2: Force Kill
After graceful pass:
1. For each remaining alive worker:
a. Send C-c via tmux send-keys
b. Wait 2 seconds
c. Kill the tmux window if still alive
2. Destroy the tmux session: tmux kill-session -t omx-team-{name}Cleanup:
1. Strip AGENTS.md team worker overlay (<!-- OMX:TEAM:WORKER:START/END -->)
2. Remove team state directory: rm -rf .omx/state/team/{name}/
3. Clear team mode state: state_clear(mode="team")
4. Emit structured cancel reportStructured Cancel Report:
Team "{team_name}" cancelled:
- Workers signaled: N
- Graceful exits: M
- Force killed: K
- tmux session destroyed: yes/no
- State cleaned up: yes/noImplementation note: The cancel skill is executed by the LLM, not as a bash script. When you detect an active team:
.omx/state/team/*/config.json for active teamstmux kill-session -t omx-team-{name}rm -rf .omx/state/team/{name}/state_clear(mode="team")Call cancelAutopilot() from src/hooks/autopilot/cancel.ts:27-78:
# Autopilot handles its own cleanup + ralph + ultraqa
# Just mark autopilot as inactive (preserves state for resume)
if [[ -f .omx/state/autopilot-state.json ]]; then
# Clean up ralph if active
if [[ -f .omx/state/ralph-state.json ]]; then
RALPH_STATE=$(cat .omx/state/ralph-state.json)
LINKED_UW=$(echo "$RALPH_STATE" | jq -r '.linked_ultrawork // false')
# Clean linked ultrawork first
if [[ "$LINKED_UW" == "true" ]] && [[ -f .omx/state/ultrawork-state.json ]]; then
rm -f .omx/state/ultrawork-state.json
echo "Cleaned up: ultrawork (linked to ralph)"
fi
# Clean ralph
rm -f .omx/state/ralph-state.json
rm -f .omx/state/ralph-verification.json
echo "Cleaned up: ralph"
fi
# Clean up ultraqa if active
if [[ -f .omx/state/ultraqa-state.json ]]; then
rm -f .omx/state/ultraqa-state.json
echo "Cleaned up: ultraqa"
fi
# Mark autopilot inactive but preserve state
CURRENT_STATE=$(cat .omx/state/autopilot-state.json)
CURRENT_PHASE=$(echo "$CURRENT_STATE" | jq -r '.phase // "unknown"')
echo "$CURRENT_STATE" | jq '.active = false' > .omx/state/autopilot-state.json
echo "Autopilot cancelled at phase: $CURRENT_PHASE. Progress preserved for resume."
echo "Run /autopilot to resume."
fiCall clearRalphState() + clearLinkedUltraworkState() from src/hooks/ralph-loop/index.ts:147-182:
if [[ -f .omx/state/ralph-state.json ]]; then
# Check if ultrawork is linked
RALPH_STATE=$(cat .omx/state/ralph-state.json)
LINKED_UW=$(echo "$RALPH_STATE" | jq -r '.linked_ultrawork // false')
# Clean linked ultrawork first
if [[ "$LINKED_UW" == "true" ]] && [[ -f .omx/state/ultrawork-state.json ]]; then
UW_STATE=$(cat .omx/state/ultrawork-state.json)
UW_LINKED=$(echo "$UW_STATE" | jq -r '.linked_to_ralph // false')
# Only clear if it was linked to ralph
if [[ "$UW_LINKED" == "true" ]]; then
rm -f .omx/state/ultrawork-state.json
echo "Cleaned up: ultrawork (linked to ralph)"
fi
fi
# Clean ralph state
rm -f .omx/state/ralph-state.json
rm -f .omx/state/ralph-plan-state.json
rm -f .omx/state/ralph-verification.json
echo "Ralph cancelled. Persistent mode deactivated."
fiCall deactivateUltrawork() from src/hooks/ultrawork/index.ts:150-173:
if [[ -f .omx/state/ultrawork-state.json ]]; then
# Check if linked to ralph
UW_STATE=$(cat .omx/state/ultrawork-state.json)
LINKED=$(echo "$UW_STATE" | jq -r '.linked_to_ralph // false')
if [[ "$LINKED" == "true" ]]; then
echo "Ultrawork is linked to Ralph. Use /cancel to cancel both."
exit 1
fi
# Remove local state
rm -f .omx/state/ultrawork-state.json
echo "Ultrawork cancelled. Parallel execution mode deactivated."
fiCall clearUltraQAState() from src/hooks/ultraqa/index.ts:107-120:
if [[ -f .omx/state/ultraqa-state.json ]]; then
rm -f .omx/state/ultraqa-state.json
echo "UltraQA cancelled. QA cycling workflow stopped."
fiecho "No active OMX modes detected."
echo ""
echo "Checked for:"
echo " - Autopilot (.omx/state/autopilot-state.json)"
echo " - Ralph (.omx/state/ralph-state.json)"
echo " - Ultrawork (.omx/state/ultrawork-state.json)"
echo " - UltraQA (.omx/state/ultraqa-state.json)"
echo ""
echo "Use --force for exact-session native-stop cleanup without widening scope."The cancel skill runs as follows:
--force are accepted; --all, unknown flags, and multiple flags fail before mutation.--force, remove only the selected session's native-stop entry after the same proof and revalidation.Mode-specific subsections below describe same-scope dependency ordering only.
| Mode | Success Message |
|---|---|
| Autopilot | "Autopilot cancelled at phase: {phase}. Progress preserved for resume." |
| Ralph | "Ralph cancelled. Persistent mode deactivated." |
| Ultrawork | "Ultrawork cancelled. Parallel execution mode deactivated." |
| Ecomode | "Ecomode cancelled. Token-efficient execution mode deactivated." |
| UltraQA | "UltraQA cancelled. QA cycling workflow stopped." |
| Swarm | "Swarm cancelled. Coordinated agents stopped." |
| Ultrapilot | "Ultrapilot cancelled. Parallel autopilot workers stopped." |
| Pipeline | "Pipeline cancelled. Sequential agent chain stopped." |
| Team | "Team cancelled. Teammates shut down and cleaned up." |
| Plan Consensus | "Plan Consensus cancelled. Planning session ended." |
| Force | "All OMX modes cleared. You are free to start fresh." |
| None | "No active OMX modes detected." |
| Mode | State Preserved | Resume Command |
|---|---|---|
| Autopilot | Yes (phase, files, spec, plan, verdicts) | /autopilot |
| Ralph | No | N/A |
| Ultrawork | No | N/A |
| UltraQA | No | N/A |
| Swarm | No | N/A |
| Ultrapilot | No | N/A |
| Pipeline | No | N/A |
| Plan Consensus | Yes (plan file path preserved) | N/A |
.omx/state/ directoryCancellation MUST NOT enumerate or kill every omx-team-* session and MUST NOT recursively delete .omx/state/team/. Team shutdown requires the exact frozen Team root, internal name, session, leader pane, and runtime identity selected by the authorized state transition. When that proof is unavailable or changes, cancellation fails closed without signals, pane actions, overlay edits, or Team-state deletion.
--force does not widen Team scope. It only enables exact-session native-stop cleanup after the same authority checks.
e94437f
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.