블로그 / 스킬 활용
스킬 활용

클로드 코드 “계속할까요?” 안 눌러도 되게 한다는 스킬, 마켓 11곳을 열어 보니 도는 건 2개였어요

2026.10.12 · 자비스스튜디오

자리를 비웠다가 돌아와 보면 클로드가 “계속할까요?”에서 멈춰 있을 때가 있어요. 이걸 없애 준다는 스킬은 많은데, 실제로 혼자 돌아가는 건 몇 개일까요? 윈도우 PC에 깔린 마켓 11곳을 직접 열어 후보를 세어 봤어요. 결론부터 말하면 실행파일과 Stop 훅을 실제로 가진 건 ralph-loop과 marathon 둘이었어요. marathon은 저희가 만든 스킬이에요. 이 글은 세는 방법, 둘의 차이, 쓰는 법, 그리고 파일 전문까지 한 번에 정리했어요.

자고 일어났더니 “계속할까요?”에서 멈춰 있던 적 있죠

자고 일어났더니 “계속할까요?”에서 멈춰 있던 적 있죠
카드뉴스 1

긴 작업을 맡기고 자리를 비웠는데 돌아와 보면 중간에서 멈춰 있고, 화면에는 계속할까요라는 물음만 떠 있는 경우가 있어요. 이 물음에 사람이 대답해야만 이어지니, 목표까지 끝내 주는 장치가 필요해져요. 그런 걸 해 준다는 스킬이 여럿 있어서, 이름이 아니라 실제로 실행되는 물건인지부터 따져 봤어요.

이런 소식, 남들보다 먼저 받으실 분?
직접 돌려보고 되는 것만 골라 매주 보내드립니다. 광고성 하이프는 거릅니다.

📮 뉴스레터 신청

마켓 11곳을 직접 열어 셌어요

마켓 11곳을 직접 열어 셌어요
카드뉴스 2

이 PC에 깔린 마켓플레이스는 claude-plugins-official, claudedesignskills, dev-gom-marketplace, diagram-design, ecc, everything-claude-code, pixel-plugin, ponytail, product-film-skill, randroids-dojo-skills, typesafe-ai까지 11곳이었어요. 폴더 이름에 loop, autonomous, continuous, marathon, ralph이 들어간 것을 모두 찾았고, 후보마다 파일 수, 실행파일 수, Stop 훅을 갖고 있는지를 같은 방법으로 셌어요. 기준은 하나예요. 실행되는 물건인가. 2026년 10월 12일 윈도우 PC에서 직접 센 값이라 마켓이 바뀌면 숫자도 바뀔 수 있어요.

문서 한 장에 실행파일 0개가 네 개였어요

문서 한 장에 실행파일 0개가 네 개였어요
카드뉴스 3

continuous-agent-loop, autonomous-loops, autonomous-agent-harness, ralphinho-rfc-pipeline은 모두 파일이 1개이고 실행파일이 0개였어요. 읽어 보면 도움이 되는 문서일 수는 있지만, 설치한다고 혼자 돌아가는 물건은 아니에요. 이름에 loop가 들어 있어도 실행되지 않는 것들이라서 후보에서 뺐어요.

진짜 도는 건 ralph-loop과 marathon 둘이었어요

진짜 도는 건 ralph-loop과 marathon 둘이었어요
카드뉴스 4

ralph-loop은 Anthropic 공식 마켓에 있는 플러그인이에요. 파일 9개에 실행파일 2개이고, hooks.json과 191줄짜리 stop-hook.sh가 세션 종료를 막아요. marathon은 저희가 만든 스킬이에요. 파일 2개에 실행파일 1개이고, 62줄짜리 stop-hook.mjs가 설정 파일의 Stop 훅에 걸려 있어요. 표 안의 marathon이 저희 것이라는 점은 숨기지 않을게요. 중립인 척하지 않겠어요. 둘의 차이는 이래요. ralph-loop은 같은 프롬프트를 계속 다시 줘요. 끝나는 조건은 미리 정한 문구를 클로드가 말했을 때나 반복 횟수 상한에 닿았을 때예요. marathon은 작업 폴더의 체크리스트에서 남은 칸의 첫 항목을 짚어 줘요. 전부 체크되었거나 완주 섹션이 있거나 랩 상한에 닿으면 끝나요. marathon은 세션 격리가 없고 작업 폴더 기준으로 돌아요. 이 차이는 Better Stack 영상 장면과 두 스킬의 훅 코드를 직접 열어 확인했어요.

쓰는 법은 세 단계예요

쓰는 법은 세 단계예요
카드뉴스 5

하나, 작업 폴더에 MARATHON.md를 만들고 할 일을 체크박스 칸으로 적어요. 둘, 클로드에게 MARATHON.md 대로 끝까지 해 달라고 한 번만 시켜요. 셋, 자리를 비우세요. 칸이 남아 있으면 Stop 훅이 종료를 막고 다음 항목을 알려 주니 칸이 다 채워질 때까지 이어져요. 끄고 싶으면 MARATHON.md를 지우거나 완주 섹션을 추가하면 돼요. 아래 가져가세요 칸에 스킬 파일과 훅 코드를 전부 올려 뒀어요.

윈도우에서 ralph-loop을 쓸 때 걸리는 함정이 하나 있어요

윈도우에서 ralph-loop을 쓸 때 걸리는 함정이 하나 있어요
카드뉴스 6

공식 stop-hook.sh는 32행에서 jq를 불러요. 이 PC에는 jq가 없어서 훅을 직접 돌려 보니 jq: command not found와 종료코드 127로 끝났어요. Stop 훅이 오류로 끝나면 루프가 이어지지 않아요. 플러그인을 설치만 하고 쓰면 안 도는 셈이에요. winget install jqlang.jq로 설치한 뒤에는 정상으로 돌았어요. marathon은 Node만 있으면 돼서 이 문제가 없어요.

같은 일 18개를 시켜 봤더니 셋 다 끝까지 갔어요

같은 일 18개를 시켜 봤더니 셋 다 끝까지 갔어요
카드뉴스 7

유틸 함수 18개를 구현하고 미리 써 둔 테스트 18개를 전부 통과시키는 일을 루프 없음, ralph-loop, marathon 세 조건으로 한 번씩 돌렸어요. 셋 모두 18개를 통과했고 중간에 멈추거나 계속할까요를 묻지 않았어요. marathon은 체크리스트 19칸이 전부 채워졌어요. 이 정도 작은 일은 루프가 없어도 끝났어요. 각 1회씩 잰 값이라 훅 때문에 차이가 났다고 말할 수 없고, 긴 일에서 어떨지는 다음 편에서 재 볼게요.

정리 — 이런 분께 맞아요

짧은 일이면 루프를 걸 필요가 없었어요. 오래 걸리는 여러 단계 작업을 맡기고 자리를 비우는 분에게 맞는 도구예요.

  • 후보는 이름이 아니라 실행파일과 Stop 훅이 있는지로 가르세요.
  • ralph-loop을 윈도우에서 쓰려면 jq를 먼저 설치하세요.
  • 한 번 시키고 자리를 비우려면 체크리스트 한 장부터 적으세요.

그대로 가져가세요

아래는 전부 그대로 복사해 쓰셔도 돼요. 마라톤 스킬은 MIT로 마음대로 고쳐 쓰셔도 됩니다.

1. 후보를 직접 세는 법 (윈도우 · 파워셸에 한 줄로 붙여 넣기)

'ralph-loop','marathon','continuous-agent-loop','autonomous-loops','autonomous-agent-harness' | %{
  $d = gci "$env:USERPROFILE\.claude" -Recurse -Directory -Filter $_ -EA 0 | select -First 1
  if (-not $d) { "{0,-26} 설치 안 됨" -f $_; return }
  $f = gci $d.FullName -Recurse -File -EA 0
  $x = $f | ?{ $_.Extension -in '.mjs','.sh','.py','.js' }
  "{0,-26} 파일 {1,2}개 · 실행파일 {2}개" -f $_, $f.Count, $x.Count
}

찾는 이름은 앞 줄에서 바꾸세요. .ps1 파일로 저장해 돌리면 실행 정책에 막히니 붙여 넣어서 실행하세요.

2. marathon 설치 — 폴더에 두고 Stop 훅 한 칸 등록

~/.claude/skills/marathon/SKILL.md와 ~/.claude/skills/marathon/scripts/stop-hook.mjs를 만들고, ~/.claude/settings.json의 hooks에 아래를 추가하세요.

{
  "hooks": {
    "Stop": [
      { "hooks": [
        { "type": "command",
          "command": "node \"%USERPROFILE%/.claude/skills/marathon/scripts/stop-hook.mjs\"" }
      ] }
    ]
  }
}

3. MARATHON.md 뼈대

# 마라톤: <작업 이름>
목표: <한 문장>
<!-- max-laps: 100 -->

## 레이스
- [ ] 항목 1 — 완료 기준
- [ ] 항목 2 — 완료 기준

4. stop-hook.mjs 전문 (62줄)

#!/usr/bin/env node
// marathon stop-hook — MARATHON.md 체크리스트가 남아 있는 한 Claude 를 멈추지 않는다.
//
// Claude Code 의 Stop 훅으로 등록해서 쓴다. Claude 가 턴을 끝내려는 순간 이 스크립트가
// 실행되고, 작업 폴더에 MARATHON.md 가 있고 미완료 항목(- [ ])이 남아 있으면
// {"decision":"block"} 을 돌려줘 자동으로 "계속"을 밀어 넣는다.
// 사람이 '계속' 버튼을 누르며 기다릴 필요가 없어진다.
//
// 종료 조건 (셋 중 하나면 정상적으로 멈춘다):
//   1. MARATHON.md 가 없다 — 마라톤 모드가 아니다
//   2. 모든 항목이 [x] 로 체크됐거나 '## 완주' 섹션이 있다
//   3. 랩 상한 도달 — 기본 100, 파일 안 <!-- max-laps: N --> 으로 조절 (무한루프 안전핀)

import fs from "node:fs";
import path from "node:path";

let cwd = process.cwd();
try {
  const input = fs.readFileSync(0, "utf8");
  const j = JSON.parse(input || "{}");
  if (j.cwd) cwd = j.cwd;
} catch { /* stdin 이 없거나 JSON 이 아니면 process.cwd() 를 쓴다 */ }

const file = path.join(cwd, "MARATHON.md");
if (!fs.existsSync(file)) process.exit(0);

let md = fs.readFileSync(file, "utf8");

// 완주 선언이 있으면 멈춘다
if (/^##\s*(완주|DONE)/mi.test(md)) process.exit(0);

const unchecked = md.match(/^[-*] \[ \] .+$/gm) || [];
if (unchecked.length === 0) process.exit(0);

// 안전핀: 랩 카운터 — 훅이 돌 때마다 1씩 올리고 상한을 넘으면 멈춘다
const capM = md.match(/<!--\s*max-laps:\s*(\d+)\s*-->/);
const cap = capM ? parseInt(capM[1], 10) : 100;
const lapM = md.match(/<!--\s*laps:\s*(\d+)\s*-->/);
const laps = lapM ? parseInt(lapM[1], 10) : 0;
if (laps >= cap) {
  console.error(`marathon: 랩 상한(${cap}) 도달 — 종료를 허용합니다. 남은 항목 ${unchecked.length}개`);
  process.exit(0);
}
md = lapM
  ? md.replace(lapM[0], `<!-- laps: ${laps + 1} -->`)
  : md.trimEnd() + `\n\n<!-- laps: 1 -->\n`;
fs.writeFileSync(file, md, "utf8");

const next = unchecked[0].replace(/^[-*] \[ \] /, "");
console.log(JSON.stringify({
  decision: "block",
  reason:
    `[marathon ${laps + 1}랩] 아직 완주 전 — 남은 항목 ${unchecked.length}개. 지금 바로 이어서 하세요: ${next}\n` +
    `규칙: ① 항목을 끝내면 MARATHON.md 에서 [x] 로 바꾸고 뒤에 '— 증거 한 줄'을 남긴다 ` +
    `② 레이스 중 질문 금지 — 결정이 필요하면 기본값으로 진행하고 '결정한 기본값'에 기록한다 ` +
    `③ 막힌 항목은 '⛔ 막힘: 이유'를 적고 [x] 처리 후 다음으로 넘어간다 ` +
    `④ 레이스가 끝났고 실기로 확인할 산출물이 있으면 '## 검증 랩' 체크리스트를 추가해 ` +
    `크롬·테스트폰으로 직접 돌려보고, 문제는 그 자리에서 고치고 재확인한다 ` +
    `⑤ 검증까지 비었을 때 '## 완주' 섹션에 결과 요약을 쓴다 — 그래야 멈출 수 있다 ` +
    `⑥ 계획·약속으로 턴을 끝내지 말고 도구를 실행한다.`,
}));
process.exit(0);

5. SKILL.md 전문

---
name: marathon
description: Keeps Claude running until the work is actually finished — no more sitting there pressing "continue". Front-loads ALL questions and credential/login needs at the start, then runs question-free to completion; leftover budget goes to hands-on verification (Chrome, test phone, captures) where Claude tests its own deliverables and fixes what breaks. A Stop hook auto-continues Claude whenever unchecked MARATHON.md items remain. Use for long multi-part tasks, batch jobs, migrations, audits, or whenever the user says to keep going without stopping. Triggers: /marathon, "run a marathon on this". 한국어 트리거: '마라톤', '끝까지 이어서 진행해', '멈추지 말고 계속해', '토큰 끝날 때까지 해', '계속 안 눌러도 되게 해줘'.
---

# Marathon — 토큰이 끝날 때까지 완주

사람들이 Claude 앞에서 제일 많이 하는 일이 **답변을 기다렸다가 '계속'을 누르는 것**이다.
marathon 은 그 버튼을 없앤다. 구조는 3부다:

1. **출발선** — 계획을 세우고 **물어볼 것을 전부 한 번에** 묻는다
2. **레이스** — 질문 없이 성과만 낸다 (체크리스트가 남아 있는 한 Stop 훅이 자동으로 "계속")
3. **검증 랩** — 토큰이 남으면 크롬·테스트폰으로 **직접 돌려보고 고친다** (사람이 하던 검증·피드백을 Claude 가 한다)

unlazy 와의 관계: unlazy 는 "다 했다"는 거짓 보고를 막는 **완료 증명**이고,
marathon 은 중간에 서는 것을 막는 **지속 장치**다. 큰 작업엔 둘을 같이 쓴다.

## 1부 — 출발선 (레이스 시작 전, 여기서만 질문한다)

1. 작업을 받으면 **먼저 계획을 세운다** — 전체를 실행 단위로 분해하고 순서·의존성을 잡는다.
2. **질문을 전부 모아 한 번에 묻는다.** 레이스 중엔 물을 수 없다는 전제로, 지금 긁어모은다:
   - **방향 결정**: 둘 이상으로 갈리는 설계·범위·우선순위 선택지
   - **계정·로그인**: 필요한 서비스 목록을 만들어 **사용자가 지금 미리 로그인해 두도록** 요청한다
     (소셜 로그인 포함). ⚠ Claude 는 비밀번호·카드번호를 직접 다루지 않는다 — 로그인은
     사람이 하고, 로그인된 세션을 Claude 가 이어받는 방식만 쓴다.
   - **한도·예산**: 유료 API 호출, 게시 여부, 되돌리기 어려운 것의 사전 승인
3. 답을 받으면 `MARATHON.md` 를 작업 폴더에 만든다:

```markdown
# 마라톤: <작업 이름>
목표: <한 문장>
<!-- max-laps: 100 -->

## 출발선에서 받은 결정
- <질문> → <답>
- 로그인 확보: <서비스 목록>

## 레이스
- [ ] 항목 1 — 완료 기준
- [ ] 항목 2 — 완료 기준

## 결정한 기본값 (레이스 중 기록)
```

## 2부 — 레이스 (질문 금지, 성과 최대화)

- 항목을 하나 끝낼 때마다 **즉시 `[x]` 로 체크하고 뒤에 증거 한 줄**을 남긴다
  (실행한 명령·결과 수치·생성 파일 경로).
- **레이스 중엔 사용자에게 묻지 않는다.** 출발선에서 못 받은 결정이 나오면
  합리적인 기본값으로 진행하고 「결정한 기본값」에 한 줄로 남긴다 — 완주 보고에서 모아 보여준다.
- 막힌 항목은 세 번까지 다른 방법을 시도하고, 그래도 안 되면 `⛔ 막힘: <이유>` 를 적고
  `[x]` 처리 후 다음으로 넘어간다. 마라톤은 한 항목에서 멈추지 않는다.
- 턴을 계획·약속·질문으로 끝내지 않는다. 다음 항목이 남아 있으면 도구를 실행한다.

## 3부 — 검증 랩 (레이스가 끝났는데 토큰이 남았다면)

레이스 항목이 전부 체크됐다고 바로 `## 완주` 를 쓰지 않는다.
**실기로 확인할 수 있는 산출물이 있으면 「검증 랩」 체크리스트를 추가하고 직접 돌린다** —
사람이 하던 검증과 피드백을 Claude 가 대신한다:

```markdown
## 검증 랩
- [ ] 크롬으로 실제 화면 열어 동작 확인 (스크린샷 증거)
- [ ] 테스트폰/실기기에서 확인 (폰 게이트웨이 등 가용 수단)
- [ ] 발견한 문제 수정 → 재확인
```

- 웹이면 크롬(또는 브라우저 도구)으로 열어 클릭·입력까지 해보고, 모바일이면 테스트폰으로 확인한다.
- **문제를 찾으면 그 자리에서 고치고 다시 확인한다** — "발견했다"로 끝내지 않는다.
- 검증 랩까지 비었을 때 `## 완주` 섹션에 결과 요약(완료 N·막힘 M·수정 K·핵심 산출물)을 쓴다.
  **이 섹션이 있어야 훅이 종료를 허용한다.**

## 동작 원리 (Stop 훅)

Claude 가 턴을 끝내려는 순간 `scripts/stop-hook.mjs` 가 실행된다:

- `MARATHON.md` 가 없으면 → 그냥 종료 (마라톤 모드 아님, 다른 작업에 무해)
- `- [ ]` 가 남아 있으면 → **종료를 막고** 다음 항목을 지시문으로 밀어 넣는다
- 전부 `[x]` 이거나 `## 완주` 가 있으면 → 종료 허용
- 랩 상한(기본 100, `<!-- max-laps: N -->` 으로 조절) 도달 → 안전핀으로 종료 허용

## 설치 (1회)

`~/.claude/settings.json` 의 hooks 에 추가:

```json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "node \"%USERPROFILE%/.claude/skills/marathon/scripts/stop-hook.mjs\""
          }
        ]
      }
    ]
  }
}
```

macOS/Linux 는 `node "$HOME/.claude/skills/marathon/scripts/stop-hook.mjs"`.

## 끄는 법

- 그 폴더의 `MARATHON.md` 를 지우거나 `## 완주` 를 추가하면 즉시 평소대로 돌아간다.
- 완전 제거: settings.json 에서 훅 항목 삭제.

## 주의

- 마라톤 중엔 사용자 확인이 오지 않는다는 전제로 항목을 짜라 — 파괴적 작업
  (삭제·강제 push·공개 게시·결제)은 체크리스트에 넣지 말고 **출발선에서 사전 승인을 받거나**
  "완주 후 사용자 확인" 목록에 둔다.
- 계정 생성·비밀번호 입력·결제는 어떤 경우에도 Claude 가 직접 하지 않는다 —
  출발선의 로그인 요청 목록으로 사람에게 넘긴다.
- 랩 카운터는 훅이 자동으로 올린다. Claude 가 손대지 않는다.

6. ralph-loop을 쓸 때 (윈도우)

winget install jqlang.jq
claude plugin install ralph-loop@claude-plugins-official

jq를 설치한 뒤 새 터미널을 열어야 PATH에 잡혀요.

출처: ralph-loop — anthropics/claude-plugins-official (GitHub) · Ralph Wiggum as a “software engineer” — Geoffrey Huntley (2025-07-14) · Claude Ralph — Better Stack (2025-12-30)

실측 위주 AI 뉴스레터 — 직접 돌려보고 되는 것만 골라 매주 보내드립니다.

#클로드코드 #마라톤 #랄프루프 #자비스스튜디오