글만든 이유와 원리
작업 중에 보낸 메시지는 언제 Claude에게 닿을까: /next를 만든 이유
Claude Code가 일하는 동안 보낸 일반 메시지는 도구 호출 사이에 끼어듭니다. 슬래시 명령은 턴이 끝날 때까지 기다립니다. 이 차이를 이용해 한 줄짜리 스킬을 만들고, 실제 세션으로 검증했습니다.

Claude Code에게 버그 수정을 맡겨 두고 화면을 보다 보면, 다음에 시킬 일이 떠오릅니다. “아, 빈 목록일 때 테스트도 하나 있어야겠다.” 잊어버리기 전에 바로 입력해서 보냅니다.
그런데 이 메시지는 지금 작업이 끝난 뒤가 아니라, 작업 도중에 Claude에게 전달됩니다. 정확히는 지금 실행 중인 도구 호출(파일 읽기, 명령 실행 등)이 하나 끝나는 즉시입니다. 버그를 고치다가 테스트를 돌리기도 전에 새 요청이 끼어들고, Claude는 두 가지를 한 번에 처리하려고 합니다. 결과적으로 두 요청이 한 답변 안에 섞이고, 처음 맡긴 일의 마무리(테스트 실행 같은)가 흐려지기도 합니다.
끼어드는 게 원래 의도된 동작이다
버그처럼 보이지만 Claude Code 문서에 적힌 의도된 동작입니다. 작업 중에 보낸 일반 메시지가 곧바로 반영되는 덕분에 진행 중인 작업의 방향을 바로잡을 수 있습니다. “그 파일 말고 다른 파일이야” 같은 말은 빨리 전달될수록 좋습니다.
같은 문서에 다른 동작도 적혀 있었습니다. 슬래시 명령은 지금 턴이 끝날 때까지 기다렸다가 실행됩니다. 그렇다면 “다음 할 일”을 슬래시 명령으로 보내면 원하는 순서가 됩니다. 문제는 그런 슬래시 명령이 없다는 것뿐이었습니다.
스킬 전체가 이것이다
Claude Code의 스킬은 SKILL.md 파일 하나로 만들 수 있고, 사용자가 /이름으로 부를 수 있습니다. /next의 본문은 이게 전부입니다.
---
name: next
description: Queue a follow-up request that runs after the current turn finishes.
argument-hint: <next request>
disable-model-invocation: true
---
Treat the following as the user's follow-up request and carry it out now,
continuing from the current conversation: $ARGUMENTS/next 뒤에 적은 내용이 $ARGUMENTS 자리에 들어가고, “이어서 처리할 다음 요청”으로 Claude에게 넘어갑니다. 기다리는 일은 스킬이 하지 않습니다. Claude Code의 명령 대기열이 원래 슬래시 명령을 턴이 끝날 때까지 붙잡아 두기 때문에, 스킬은 차례가 왔을 때 요청을 건네기만 하면 됩니다.
머리말의 disable-model-invocation: true는 중요한 한 줄입니다. 이 설정이 있으면 Claude가 스스로 이 스킬을 고를 수 없고, 사용자만 실행할 수 있습니다. 그래서 Claude가 매번 읽는 스킬 목록에도 올라가지 않습니다. 쓰기 전까지는 컨텍스트를 한 글자도 차지하지 않는다는 뜻입니다. 도구를 하나 더 설치했다고 다른 작업이 무거워지지 않습니다.
정말 기다리는지 확인하기
“문서에 그렇게 쓰여 있다”만으로는 불안했습니다. Claude Code는 자주 업데이트되고, 대기열 동작이 바뀌면 이 스킬은 조용히 원래 문제로 돌아갑니다. 그래서 실제 세션으로 확인하는 테스트(tests/verify.sh)를 만들었습니다.
- tmux 안에서 실제 Claude Code를 띄우고, 8초씩 걸리는 명령 세 개를 따로 실행하라는 작업을 줍니다. 끝나면
FIRST_DONE이라고만 답하게 합니다. - 첫 도구 호출이 기록되어 턴이 진행 중인 것을 확인한 뒤,
/next두 개를 연달아 입력합니다. 첫 번째/next도 여러 단계짜리 작업이라, 두 번째가 그것까지 기다리는지 볼 수 있습니다. - 끝나면 세션 기록(JSONL)을 읽어, 각 요청이 언제 대기열에 들어갔고 언제 Claude에게 전달됐는지 비교합니다.
Claude Code 2.1.283(macOS)에서의 결과입니다.
✓ both /next were queued during the first turn (2/2)
✓ neither /next reached Claude during the first turn (leaks: 0)
✓ the second /next didn't reach Claude during the first /next (leaks: 0)
✓ each /next ran as its own turn (2/2)
✓ reply order: FIRST_DONE -> SECOND_DONE -> THIRD_DONE두 요청 모두 첫 작업 도중에 대기열에 들어갔지만, 첫 작업이 끝나기 전에는 한 번도 Claude에게 닿지 않았습니다. 그리고 각자 별도의 턴으로, 입력한 순서대로 실행됐습니다. Claude Code를 업데이트한 뒤에는 이 테스트를 다시 돌려 보면 됩니다.
쓰는 법
npx claude-next-skill설치한 뒤에는 새 Claude Code 세션을 열어야 스킬이 보입니다.
- Claude가 일하는 중에
/next 테스트 돌리고 실패하는 것 고쳐줘처럼 입력합니다. - 여러 개를 남기려면 하나 입력할 때마다 Enter를 누릅니다. 하나씩 차례로 실행됩니다.
- 취소하고 싶으면 입력창이 비어 있을 때
↑로 대기 중인 줄을 불러와 지우고 Enter를 누릅니다.Ctrl+C는 지금 하던 작업까지 멈추니 이 용도로는 쓰지 마세요.
언제 무엇을 쓰나
이렇게 나눠 쓰면 헷갈리지 않습니다.
| 상황 | 보내는 방법 |
|---|---|
| 지금 작업의 방향이 틀렸다 | 일반 메시지 (바로 끼어들어야 한다) |
| 지금 작업에 조건을 하나 더하고 싶다 | 일반 메시지 |
| 지금 작업이 끝난 뒤에 할 별개의 일 | /next |
| 끝나면 확인할 것 (테스트, 정리, 커밋 메시지) | /next |
하지 못하는 것
- 메인 턴이 끝나기를 기다릴 뿐, Claude가 시작한 백그라운드 작업이 끝나기를 기다리지는 않습니다.
- 권한 확인 창은 평소처럼 뜹니다. 자리를 비운 사이 모든 걸 처리해 주지는 않습니다.
- 내 컴퓨터에 설치하는 개인 스킬이라, 클라우드에서 도는 세션에서는 쓸 수 없습니다.
만들고 보니 스킬의 핵심은 한 줄이고, 시간이 든 건 테스트였습니다. 이런 작은 도구는 기능보다 “정말 그렇게 동작하는가”를 계속 확인할 수 있는 장치가 더 중요하다고 생각합니다. 기반이 되는 프로그램이 바뀌면 조용히 망가지기 때문입니다.