Communitygithub.com

취소

활성화된 모든 OMC 모드(오토파일럿, ralph, ultragoal, swarm, ultrapilot, pipeline, team)를 취소하고, 폐기된 레거시 상태를 정리합니다.

취소란 무엇인가요?

이 스킬은 활성화된 OMC(Oh My Claude Code) 모드를 자동으로 감지하고 취소하는 표준 방법입니다. 사용자가 작업 완료나 중단 시 이 스킬을 호출하면, 각 모드별로 적절한 정리(cleanup) 과정을 수행합니다. 예를 들어, 오토파일럿 모드는 작업을 중단하고 재개 가능한 상태를 보존하며, ralph 모드는 지속 루프를 중단하고, swarm 모드는 조정된 에이전트 스웜을 중지하고 할당된 작업을 해제합니다. 또한, 팀 모드는 팀원들에게 종료를 요청하고 응답을 기다린 후 상태를 정리합니다. 이 스킬은 Claude Code를 포함한 다양한 AI 에이전트 플랫폼에서 사용할 수 있으며, `--force` 플래그를 사용하여 모든 세션 및 레거시 아티팩트를 강제로 지울 수 있습니다. 내부적으로는 `state_list_active`, `state_get_status`, `state_clear` 등의 상태 관리 도구를 사용하며, 특정 조건에서는 bash 대체 명령어를 통해 비상 탈출을 지원합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/cancel

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

취소 스킬 (Cancel Skill)

활성화된 OMC 모드를 감지하고 취소하는 지능형 취소 기능입니다.

취소 스킬은 모든 OMC 모드를 완료하고 종료하는 표준 방법입니다. 중지 훅(stop hook)이 작업 완료를 감지하면 LLM이 이 스킬을 호출하여 상태를 적절히 정리하도록 지시합니다. 취소가 실패하거나 중단되면 --force 플래그로 재시도하거나, 최후의 수단으로 2시간 스테일니스 타임아웃을 기다리세요.

기능 설명

어떤 모드가 활성화되어 있는지 자동으로 감지하여 취소합니다:

  • 오토파일럿 (Autopilot): 워크플로를 중단하고, 재개를 위해 진행 상황을 보존합니다.
  • Ralph: 지속 루프(persistence loop)를 중단합니다.
  • 레거시 Ultrawork 상태: 업그레이드된 설치 환경에서만 정리용으로 제거합니다. 활성 워크플로가 아닙니다.
  • UltraQA (폐기됨): 남아있는 활성 워크플로가 없습니다. 5.0.0 이전의 ultraqa-state.json이 있으면 제거합니다.
  • Ultragoal: 세션 범위의 ultragoal 런타임 가드(.omc/state/.../ultragoal-state.json)를 지워서 PreToolUse /goal 적용 및 Stop 강화를 해제합니다. 영구적인 .omc/ultragoal/ 계획/원장 아티팩트는 보존됩니다.
  • Swarm: 조정된 에이전트 스웜을 중단하고, 할당된 작업을 해제합니다.
  • Ultrapilot: 병렬 오토파일럿 워커를 중단합니다.
  • Pipeline: 순차 에이전트 파이프라인을 중단합니다.
  • Team: 활성 팀/대화 표면을 통해 모든 팀원에게 종료를 요청하고, 응답/타임아웃을 기다린 후 OMC 팀 상태를 지우고, 연결된 ralph가 있으면 함께 지웁니다. Claude Code 2.1.178+에는 TeamDelete가 없습니다.
  • Team+Ralph (연결됨): 먼저 팀을 취소(정상 종료)한 후 ralph 상태를 지웁니다. ralph를 취소할 때도 연결된 경우 먼저 팀을 취소합니다.

사용법

/oh-my-claudecode:cancel

또는 말로: "cancelomc", "stopomc"

중요: 지연 도구 처리 (Deferred Tool Handling)

상태 관리 도구(state_clear, state_read, state_write, state_list_active, state_get_status)는 Claude Code에 의해 **지연 도구(deferred tools)**로 등록될 수 있습니다. 어떤 상태 도구를 호출하기 전에, 반드시 ToolSearch를 통해 먼저 모든 도구를 로드해야 합니다:

ToolSearch(query="select:mcp__plugin_oh-my-claudecode_t__state_clear,mcp__plugin_oh-my-claudecode_t__state_read,mcp__plugin_oh-my-claudecode_t__state_write,mcp__plugin_oh-my-claudecode_t__state_list_active,mcp__plugin_oh-my-claudecode_t__state_get_status")

state_clear를 사용할 수 없거나 실패하면, 다음 bash 대체 명령어를 중지 훅 루프에서 비상 탈출용으로 사용하세요. 이는 취소 흐름을 완전히 대체하는 것이 아닙니다. 단지 상태 파일을 제거하여 세션 차단을 해제하는 것뿐입니다. 연결된 활성 모드(예: autopilot→ralph)는 각 모드마다 대체 명령어를 한 번씩 실행하여 별도로 지워야 합니다.

MODE를 특정 모드(예: ralplan, ralph, ultrawork, ultragoal)로 바꾸세요.

경고: autopilot 또는 omc-teams에는 이 대체 명령어를 사용하지 마십시오. 오토파일럿은 재개 데이터를 보존하기 위해 state_write(active=false)가 필요합니다. omc-teams는 파일 삭제만으로는 처리할 수 없는 tmux 세션 정리가 필요합니다.

# 대체 명령어: state_clear MCP 도구를 사용할 수 없을 때 직접 파일 제거
SESSION_ID="${CLAUDE_SESSION_ID:-${CLAUDECODE_SESSION_ID:-}}"
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || { d="$PWD"; while [ "$d" != "/" ] && [ ! -d "$d/.omc" ]; do d="$(dirname "$d")"; done; echo "$d"; })"

# 크로스 플랫폼 SHA-256 (macOS: shasum, Linux: sha256sum)
sha256portable() { printf '%s' "$1" | (sha256sum 2>/dev/null || shasum -a 256) | cut -c1-16; }

# 상태 디렉토리 확인 (OMC_STATE_DIR 중앙 저장소 지원)
if [ -n "${OMC_STATE_DIR:-}" ]; then
  # worktree-paths.ts의 getProjectIdentifier() 미러링
  SOURCE="$(git remote get-url origin 2>/dev/null || echo "$REPO_ROOT")"
  HASH="$(sha256portable "$SOURCE")"
  DIR_NAME="$(basename "$REPO_ROOT" | sed 's/[^a-zA-Z0-9_-]/_/g')"
  OMC_STATE="$OMC_STATE_DIR/${DIR_NAME}-${HASH}/state"
  [ ! -d "$OMC_STATE" ] && { echo "ERROR: State dir not found at $OMC_STATE" >&2; exit 1; }
elif [ "$REPO_ROOT" != "/" ] && [ -d "$REPO_ROOT/.omc" ]; then
  OMC_STATE="$REPO_ROOT/.omc/state"
else
  echo "ERROR: Could not locate .omc state directory" >&2
  exit 1
fi
MODE="ralplan"  # <-- 대상 모드로 바꾸세요

# 특정 모드의 세션 범위 상태 지우기
if [ -n "$SESSION_ID" ] && [ -d "$OMC_STATE/sessions/$SESSION_ID" ]; then
  rm -f "$OMC_STATE/sessions/$SESSION_ID/${MODE}-state.json"
  rm -f "$OMC_STATE/sessions/$SESSION_ID/${MODE}-stop-breaker.json"
  rm -f "$OMC_STATE/sessions/$SESSION_ID/skill-active-state.json"
  # 중지 훅이 취소 진행 중임을 감지하도록 취소 신호 쓰기
  NOW_ISO="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
  EXPIRES_ISO="$(date -u -d "+30 seconds" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || python3 - <<'PY'\nfrom datetime import datetime, timedelta, timezone\nprint((datetime.now(timezone.utc) + timedelta(seconds=30)).strftime('%Y-%m-%dT%H:%M:%SZ'))\nPY\n)"
  printf '{"active":true,"requested_at":"%s","expires_at":"%s","mode":"%s","source":"bash_fallback"}' \
    "$NOW_ISO" "$EXPIRES_ISO" "$MODE" > "$OMC_STATE/sessions/$SESSION_ID/cancel-signal-state.json"
fi

# 세션 ID가 없을 때만 레거시 상태 지우기 (다른 세션 상태를 지우지 않도록)
if [ -z "$SESSION_ID" ]; then
  rm -f "$OMC_STATE/${MODE}-state.json"
fi

자동 감지 (Auto-Detection)

/oh-my-claudecode:cancel은 세션 인식 상태 계약(session-aware state contract)을 따릅니다:

  • 기본적으로 명령어는 state_list_active 및 state_get_status를 통해 현재 세션을 검사하고, .omc/state/sessions/{sessionId}/…에서 활성화된 모드를 찾습니다.
  • 세션 ID가 제공되었거나 이미 알려진 경우, 해당 세션 범위 경로가 권위를 갖습니다. 세션 ID가 없거나 비어 있는 경우에만 레거시 파일(.omc/state/*.json)을 호환성 대체 수단으로 참조합니다.
  • Swarm은 공유 SQLite/마커 모드(.omc/state/swarm.db / .omc/state/swarm-active.marker)이며 세션 범위가 아닙니다.
  • 기본 정리 흐름은 세션 ID와 함께 state_clear를 호출하여 해당 세션 파일만 제거합니다. 모드는 원래 세션에 바인딩된 상태로 유지됩니다.

활성 모드는 다음 종속성 순서대로 취소됩니다:

  1. 오토파일럿 (연결된 ralph 및 폐기된 상태 정리 포함)
  2. Ralph
  3. 레거시 Ultrawork/UltraQA 상태 정리
  4. Ultragoal (독립 실행형 런타임 가드 — state_clear(mode="ultragoal"); 영구 .omc/ultragoal/ 아티팩트는 보존)
  5. Swarm (독립 실행형)
  6. Ultrapilot (독립 실행형)
  7. Pipeline (독립 실행형)
  8. Team (Claude Code 기본 기능)
  9. OMC Teams (tmux CLI 워커)
  10. 계획 합의 (Plan Consensus, 독립 실행형)
  11. 자체 개선 (Self-Improve, 독립 실행형 — 상태 지우기, 고아 worktree 정리, 재개를 위한 iteration_state 보존, 해결된 <self-improve-root>/state/agent-settings.json에 상태를 "user_stopped"로 설정; 새 실행은 .omc/self-improve/topics/<topic-slug>/를 사용하며, 평면 .omc/self-improve/는 레거시 단일 트랙 재개용으로만 유지)

강제 전체 지우기 (Force Clear All)

워크스페이스를 완전히 초기화해야 하는 경우, --force 또는 --all을 사용하여 모든 세션과 레거시 아티팩트를 지우십시오.

/oh-my-claudecode:cancel --force
/oh-my-claudecode:cancel --all

내부 단계:

  1. state_list_active가 .omc/state/sessions/{sessionId}/…을 열거하여 알려진 모든 세션을 찾습니다.
  2. state_clear가 세션당 한 번씩 실행되어 해당 세션의 파일을 삭제합니다.
  3. session_id 없이 전역 state_clear를 실행하면 .omc/state/*.json, .omc/state/swarm*.db 아래의 레거시 파일과 호환성 아티팩트(목록 참조)를 제거합니다.
  4. 팀 아티팩트(~/.claude/teams/*/, ~/.claude/tasks/*/, .omc/state/team-state.json)는 레거시 대체 수단으로 최선을 다해 지워집니다.
    • 기본 팀에 대한 취소는 omc-teams 상태에 영향을 주지 않으며, 그 반대도 마찬가지입니다.

모든 state_clear 명령어는 session_id 인수를 따르므로, 강제 모드에서도 레거시 파일을 삭제하기 전에 먼저 세션 인식 경로를 사용합니다.

레거시 호환성 목록 (--force/--all에서만 제거):

  • .omc/state/autopilot-state.json
  • .omc/state/ralph-state.json
  • .omc/state/ralph-plan-state.json
  • .omc/state/ralph-verification.json
  • .omc/state/ultrawork-state.json
  • .omc/state/ultraqa-state.json
  • .omc/state/swarm.db
  • .omc/state/swarm.db-wal
  • .omc/state/swarm.db-shm
  • .omc/state/swarm-active.marker
  • .omc/state/swarm-tasks.db
  • .omc/state/ultrapilot-state.json
  • .omc/state/ultrapilot-ownership.json
  • .omc/state/pipeline-state.json
  • .omc/state/omc-teams-state.json
  • .omc/state/plan-consensus.json
  • .omc/state/ralplan-state.json
  • .omc/state/boulder.json
  • .omc/state/hud-state.json
  • .omc/state/subagent-tracking.json
  • .omc/state/subagent-tracker.lock
  • .omc/state/rate-limit-daemon.pid
  • .omc/state/rate-limit-daemon.log
  • .omc/state/checkpoints/ (디렉토리)
  • .omc/state/sessions/ (세션 정리 후 빈 디렉토리 정리)

구현 단계

이 스킬을 호출할 때:

1. 인수 파싱 (Parse Arguments)

# --force 또는 --all 플래그 확인
FORCE_MODE=false
if [[ "$*" == *"--force"* ]] || [[ "$*" == *"--all"* ]]; then
  FORCE_MODE=true
fi

2. 활성 모드 감지 (Detect Active Modes)

이제 이 스킬은 하드코딩된 파일 경로 대신 세션 인식 상태 계약에 의존합니다:

  1. state_list_active를 호출하여 .omc/state/sessions/{sessionId}/…을 열거하고 모든 활성 세션을 찾습니다.
  2. 각 세션 ID에 대해 state_get_status를 호출하여 실행 중인 활성 모드와 종속 모드가 있는지 확인합니다. Ultrawork 레코드는 폐기된 정리 입력으로만 처리합니다.
  3. session_id가 /oh-my-claudecode:cancel에 제공된 경우 레거시 대체를 완전히 건너뛰고 해당 세션 경로 내에서만 작동합니다. 그렇지 않으면 상태 도구가 활성 세션이 없다고 보고할 때만 .omc/state/*.json의 레거시 파일을 참조합니다. Swarm은 세션 범위 밖의 공유 SQLite/마커 모드로 유지됩니다.
  4. 이 문서의 모든 취소 로직은 상태 도구를 통해 발견된 종속성 순서(autopilot → ralph → …)를 따릅니다.

3A. 강제 모드 (Force Mode, --force 또는 --all인 경우)

state_clear를 통해 모든 세션과 레거시 아티팩트를 지우려면 강제 모드를 사용하십시오. 직접 파일 제거는 상태 도구가 활성 세션이 없다고 보고할 때 레거시 정리용으로 예약됩니다.

3B. 스마트 취소 (Smart Cancellation, 기본값)

팀이 활성화된 경우 (Claude Code 암시적 팀)

팀은 OMC 팀 상태를 통해 감지되며, 제거된 Claude Code ~/.claude/teams 설정 디렉토리는 사용되지 않습니다:

# 활성 OMC 팀 상태 확인
state_read(mode="team")

2단계 취소 프로토콜:

1단계: 정상 종료 (Graceful Shutdown)

활성 OMC 팀 상태:
  1. OMC 상태/핸드오프/작업 장부에서 team_name 및 워커 레이블 읽기
  2. 각 활성 팀원에 대해:
     a. 활성 대화/팀 메시징 표면을 통해 이름이 지정된 팀원에게 질문 또는 알림
     b. shutdown_response를 최대 15초 기다림
     c. 응답 수신: 구성원 응답으로 표시
     d. 타임아웃: 구성원을 응답 없음으로 표시하고 다음으로 진행
  3. 로그: "정상 종료 단계: X/Y 구성원 응답"

2단계: 조정 (Reconciliation)

정상 종료 단계 후:
  1. 아직 처리 중일 수 있는 응답 없는 팀원을 위해 5초 더 기다림
  2. 취소 보고서에 남은 응답 없는 팀원 기록
  3. TeamDelete 호출하지 않음; Claude Code 2.1.178+는 팀별 기본 정리를 제거함

OMC 상태 정리:

  1. 팀 상태 지우기: state_clear(mode="team")
  2. 연결된 ralph 확인: state_read(mode="ralph") — linked_team이 true인 경우:
     a. ralph 상태 지우기: state_clear(mode="ralph")
  3. 레거시 `omc team` / `/omc-teams` 워커에 대해서만 OMC tmux/CLI 고아 검사 실행 (아래 참조)
  4. 구조화된 취소 보고서 출력

고아 감지 (정리 후):

레거시 OMC tmux/CLI 워커 실행의 경우, 워커 프로세스가 남아 있는지 확인합니다:

node "${CLAUDE_PLUGIN_ROOT}/scripts/cleanup-orphans.mjs" --team-name "{team_name}"

고아 스캐너:

  1. OMC 워커 프로세스에 대해 ps aux (Unix) 또는 tasklist (Windows)를 확인하여 --team-name이 정리된 팀과 일치하는지 확인
  2. SIGTERM 전송, 5초 대기, 여전히 살아 있으면 SIGKILL 전송
  3. 정리 결과를 JSON으로 보고

--dry-run을 사용하여 종료하지 않고 검사만 할 수 있습니다. 스캐너는 여러 번 실행해도 안전합니다.

구조화된 취소 보고서:

팀 "{team_name}" 취소됨:
  - 신호 보낸 구성원: N
  - 응답 수신: M
  - 응답 없음: K (있는 경우 이름 목록)
  - OMC 상태 지워짐: 예/아니오
  - 수동 정리 필요: 예/아니오
    경로: OMC 팀 상태 / tmux 워커 프로세스 (있는 경우)

구현 참고 사항: 취소 스킬은 bash 스크립트가 아닌 LLM에 의해 실행됩니다. 활성 팀을 감지하면:

  1. state_read(mode="team")를 읽어 활성 OMC 팀 찾기
  2. 상태, 핸드오프 또는 작업 장부에서 활성 이름이 지정된 팀원 식별
  3. 각 팀원에 대해 활성 대화/팀 메시징 표면을 통해 이름이 지정된 팀원에게 질문 또는 알림
  4. 종료 응답을 잠시 기다림 (구성원당 15초 타임아웃)
  5. 조정 대기 후 응답 없는 팀원 기록
  6. 팀 상태 지우기: state_clear(mode="team", session_id)
  7. 사용자에게 구조화된 요약 보고

오토파일럿이 활성화된 경우

오토파일럿은 자체적인 기본-우선 정리를 처리합니다: 명명된 워크플로는 연결된 ralph 및 폐기된 ultraqa 정리 전에 자신의 세션이 소유한 중첩 ralplan 적용 상태만 추가로 제거합니다.

  1. state_read(mode="autopilot", session_id)를 통해 오토파일럿 상태를 읽어 workflowRunId가 있을 때 이를 포함한 정확한 현재 실행을 캡처합니다.
  2. 좁은 변형 state_write(mode="autopilot", session_id, active=false, state={workflowRunId: "<정확한 실행 ID>"})로 해당 정확한 실행을 일시 중지합니다. 상태 읽기 값을 재생하거나 복사하지 마십시오. Linux의 flock에서 도구는 변형 잠금 아래에서 보유된 실행 및 워크플로 무결성을 재검증한 후 active만 false로 변경합니다. 워크플로, 파이프라인 추적 및 작업 ID를 보존합니다. target_state_sha256은 현재 직렬화된 상태의 정확한 SHA-256인 경우에만 포함될 수 있습니다.
    • 이 쓰기가 실패하면 즉시 중단하십시오. 중첩된 ralplan, 연결된 상태, 취소 신호 또는 런타임 아티팩트를 지우지 마십시오.
  3. 명명된 워크플로의 경우, 동일한 session_id가 소유한 ralplan 상태만 지우십시오. 다른 세션의 독립 실행형 ralplan 상태는 절대 지우지 마십시오. 실패를 기록하되 일시 중지된 기본 실행은 재개 가능하게 유지하십시오.
  4. 기본 일시 중지가 커밋된 후에만 state_read(mode="ralph", session_id)로 연결된 ralph를 확인하십시오. linked_autopilot이 true이면 ralph 상태를 state_clear(mode="ralph", session_id)로 지우십시오. 연결된 ralph가 없으면 이 단계를 건너뛰십시오.
  5. 연결된 상태 정리 후: 같은 session_id 아래의 폐기된 ultraqa 아티팩트를 확인하십시오. 존재하면 state_clear(mode="ultraqa", session_id)를 실행하십시오. (UltraQA는 상태만 정리 가능한 모드이며, 활성 워크플로가 없습니다.)
  6. 모든 관련 취소 신호 파일(session-scoped *-stop-breaker.json, skill-active-state.json)을 같은 session_id로 지우십시오.

실패에 대한 특별 참고 사항:

  • state_write가 active=false 시도를 거부하면(예: 다른 run_id가 잠금을 소유함), 경고를 표시하고 재정의하지 마십시오. 기본 상태를 그대로 두고 계속 진행하거나 중단하십시오.
  • ralph 정리는 기본 일시 중지에 실패한 경우 절대 실행되지 않습니다.
  • session_id 없이 작업할 때(레거시 상태 경로를 통한 자동 감지 모드): 오토파일럿 정리는 tar-기반 백업 파일을 지원하지 않습니다. 스냅샷 또는 중간 상태 읽기가 전혀 없습니다. 좁은 state_write(active=false)가 취소의 유일한 진입점입니다.

Ralph가 활성화된 경우

  1. state_read(mode="ralph")를 통해 ralph 상태를 읽습니다.
  2. linked_team이 true이면 ralph 취소 전에 팀 취소 단계를 실행하십시오(위의 "팀이 활성화된 경우" 참조).
  3. linked_autopilot이 true이면 오토파일럿 취소 단계를 실행하십시오(위 참조).
  4. state_clear(mode="ralph", session_id)를 호출합니다.
  5. 세션이 ralplan 상태를 소유한 경우 state_clear(mode="ralplan", session_id)를 호출합니다.

구현 참고 사항: LLM은 이 단계를 순서대로 실행합니다. 이는 bash 파이프 명령어가 아닙니다. 오토파일럿이 활성화된 경우 ralph 취소 단계에 도달하기 전에 오토파일럿 취소 단계를 완전히 완료하십시오.

Ultragoal이 활성화된 경우

  1. state_read(mode="ultragoal", session_id)를 통해 ultragoal 상태를 읽습니다.
  2. state_clear(mode="ultragoal", session_id)를 호출합니다. 이렇게 하면 세션 범위 .omc/state/.../ultragoal-state.json 런타임 가드가 제거되어 /goal 적용 및 Stop 강화가 해제됩니다. .omc/ultragoal/ 아래의 영구 계획/원장 아티팩트는 건드리지 않습니다.
  3. (선택 사항) 준비가 되면 사용자에게 영구 초점 영역(.omc/ultragoal/...)을 다음 실행을 위해 보존 중임을 알립니다.

Swarm이 활성화된 경우

  1. Swarm 상태를 읽습니다(state_read(mode="swarm")). Swarm 모드는 세션 범위가 아닙니다(공유 SQLite/마커).
  2. state_clear(mode="swarm")를 호출하여 공유 Swarm 상태(SQLite db, marker)를 지웁니다.
  3. 스웜에서 작업을 수동으로 해제할 필요가 없습니다. state_clear가 정리를 처리합니다.

Ultrapilot이 활성화된 경우

  1. state_read(mode="ultrapilot", session_id)를 통해 ultrapilot 상태를 읽습니다.
  2. state_clear(mode="ultrapilot", session_id)를 호출합니다.

Pipeline이 활성화된 경우

  1. state_read(mode="pipeline", session_id)를 통해 pipeline 상태를 읽습니다.
  2. state_clear(mode="pipeline", session_id)를 호출합니다.

Plan Consensus가 활성화된 경우

  1. state_read(mode="plan-consensus", session_id)를 통해 Plan Consensus 상태를 읽습니다.
  2. state_clear(mode="plan-consensus", session_id)를 호출합니다.

자체 개선이 활성화된 경우 (Self-Improve)

  1. state_read(mode="self-improve", session_id)를 통해 자체 개선 상태를 읽습니다.
  2. state_clear(mode="self-improve", session_id)를 호출하여 세션 범위 상태를 지웁니다.
  3. 고아 worktree 정리: selfImproveRoot가 state_get_status에 의해 반환되면 다음을 사용하십시오:
    ls "${selfImproveRoot}/state/"*.worktree-name 2>/dev/null | while read f; do
      wt=$(cat "$f")
      git worktree remove "$wt" 2>/dev/null && rm -f "$f"
    done
    
  4. 재개를 위한 iteration_state는 그대로 둡니다.
  5. state/agent-settings.json에서 상태를 "user_stopped"로 설정합니다. 파일이 없으면 생성하지 마십시오.
  6. 사용자에게 세션 범위 상태가 지워졌고 이터레이션 상태가 재개를 위해 보존되었음을 알립니다.

폐기된 모드(레거시 Ultrawork/UltraQA만 해당)

이러한 폐기된 모드는 활성 워크플로를 포함하지 않습니다. 확인하되 정리하지 마십시오. ultrawork/ultraqa 파일이 있으면 무시하고 사용자에게 업그레이드가 완료되었음을 알립니다.

연결된 모드 처리

현재 연결은 autopilot→ralph 및 team→ralph로 제한됩니다. LLM은 항상 먼저 기본 모드를 정리한 후 연결된 모드를 확인합니다.

  • 오토파일럿 취소는 ralph가 연결된 경우 state_clear(mode="ralph")를 자동으로 호출합니다.
  • 팀 취소는 ralph가 연결된 경우 state_clear(mode="ralph")를 자동으로 호출합니다.
  • Ralph는 먼저 기본 오토파일럿/팀 정리를 트리거하지 않고 독립 실행형으로 정리되지 않습니다.

취소 중에 연결된 모든 모드가 함께 정리됩니다. 연결된 모드 체인이 더 긴 경우(예: autopilot→ralph→team은 현재 문서화되지 않음), 취소는 발견되는 대로 처리합니다.

4. 취소 확인 (Cancellation Confirmation)

취소 후, 확인을 위해 state_get_status를 호출하십시오. 활성 상태가 없어야 합니다. 활성 모드가 여전히 보고되면 각각에 대해 state_clear를 다시 시도하거나 최종 state_clear(session_id="__all__")로 폴백하십시오.

보안 참고 사항

취소 스킬은 LLM이 실행하는 대화형 작업입니다. FIM(채우기-중간 모드) 또는 claude_code_agent_operation 도구(자동화) 중에는 절대 실행되지 않습니다. MCP 상태 도구를 사용할 수 없는 비상 탈출 bash 대체 명령어는 SESSION_ID에 대해 CLAUDE_SESSION_ID 및 CLAUDECODE_SESSION_ID 환경 변수를 읽습니다. 공유 환경(예: CI/CD)에서는 의도하지 않은 세션 ID 충돌을 방지하기 위해 이러한 변수가 특정 실행으로만 범위가 지정되었는지 확인하십시오.

스테일니스 타임아웃 (Staleness Timeout)

state_clear가 계속 실패하면 중지 훅은 궁극적으로 2시간 스테일니스 타임아웃을 트리거합니다. 타임아웃에 도달하면 시스템은 모든 .omc/state/sessions/ 디렉토리를 안전하게 제거할 수 있다고 가정합니다. 타임아웃에 의존하는 것은 스테일니스 임계값에 도달할 때까지 Claude Code가 활성화되어 있어야 하므로 권장되지 않습니다.

문제 해결

  • "state_clear 도구를 찾을 수 없음": ToolSearch 지연 로딩 섹션을 참조하여 먼저 로드하십시오.
  • "state_clear 실패": MCP 시간 초과? 도구를 다시 로드하고 재시도하십시오. 계속 실패하면 bash 대체 명령어를 사용하고 --force로 재시도하십시오.
  • "취소가 활성 모드를 감지하지 못함": state_get_status를 사용하여 시스템 상태를 확인하십시오. state_list_active를 호출하여 활성 세션이 있는지 확인하십시오.
  • "취소 후에도 오토파일럿이 계속 실행됨": state_write(active=false)를 다시 호출하고 전달된 workflowRunId를 확인하십시오. 새 실행을 시작하기 전에 이전 run_id가 항상 지워져야 합니다. 수동으로 확인하려면 state_read(mode="autopilot", session_id)를 호출하고 반환된 state의 내용을 검사하십시오.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

agent-doc-discipline

Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and carrying a why, steps before reference, one meaning in one home, no restating what the environment already says. Mandatory at drydock seed generation and the launch C5 sediment pass; opt-in for any other agent-facing doc edit. The companion of minimal-code-discipline: that one disciplines code, this one disciplines papers.

ai-slop-cleaner

Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode

ask

Process-first advisor routing for Claude, Codex, Gemini, Antigravity, Grok, or Cursor via `omc ask`, with artifact capture and no raw CLI assembly

ask-navigator

Shipyard

autopilot

Full autonomous execution from idea to working code

autoresearch

Stateful single-mission improvement loop with strict evaluator contract, markdown decision logs, and max-runtime stop behavior

configure-notifications

Configure notification integrations (Telegram, Discord, Slack) via natural language

debug

Diagnose the current OMC session or repo state using logs, traces, state, and focused reproduction

deepinit

Deep codebase initialization with hierarchical AGENTS.md documentation

deep-interview

Socratic deep interview with mathematical ambiguity gating before explicit execution approval

drydock

Lay the keel of the shipyard harness in any repo — the 4-pillar shared environment (Context, Rules, Tools, Standards) across 5 surfaces (CLAUDE.md, skills, design-system, mcp/cli, shared context) so that every human and agent inherits the same design language and anyone can ship. Run once per repo; re-run with --check to audit drift.

execute

Carry an approved task through to working, verified code

external-context

Invoke parallel document-specialist agents for external web searches and documentation lookup

graph

Deterministic orchestration graph runtime - declarative DAG pipelines with journal-based crash recovery

harbor

Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with options, recommendation, impact and evidence. Agent-autonomous for facts and for actions covered by standing authorization; signed for every new judgment. Never merges.

hud

Configure HUD display options (layout, presets, display elements)

launch

Shipyard

loft

Loft the shape before cutting steel — answer a design question that prose cannot settle by building a throwaway artifact: a pure logic module in a clickable shell, or structurally different UI variants behind one route. The captain reacts to the artifact; the answer folds into the decision; the artifact never docks. Use when a design question stalls in words, when a navigator map carries a loft ticket, or when a spec discussion reaches

minimal-code-discipline

YAGNI-ladder coding discipline for writing changes — existence-first, reuse before writing, dependency ladder, shortest correct diff, with non-negotiables that must never be minimized away

omc-doctor

Diagnose and fix oh-my-claudecode installation issues

관련 스킬