session plugin · skill docs

session skills

코딩 세션의 경계를 담당하는 스킬 8개 — 죽은 턴을 되살리고, 끝나는 세션을 감사하거나 넘기고, 토큰 리밋 리셋 너머로 무인 작업을 잇고, 작업이 벌어질 격리 워크트리를 만들고 지웁니다. 무엇을 건드리는가가 아니라 언제 손이 가는가로 묶여 있습니다.

worktree-spawn─▶ restart─▶ rate-limit-guard─▶ close / handoff─▶ worktree-teardown
셋은 Claude Code 에서만 동작합니다 — rate-limit-guard · resume-after-limit · schedule 은 벽시계 시각에 새 에이전트 턴을 여는 CronCreate 를 씁니다. 다른 하네스에는 대응물이 없고 우회로도 없습니다 — sleep 도, 백그라운드 셸도, at 잡도 에이전트를 깨우지 못합니다. 그래서 그 하네스에서는 못 한다고 말하고 멈추는 것이 정상 동작입니다.

1스킬 8개

같은 순간에 손이 가는 것끼리 세 갈래로 묶었습니다. 기술적으로는 공통점이 없어도 — 세션이 곤란해졌을 때, 세션을 끝낼 때, 작업 공간을 여닫을 때.

세션 중단 · 재개

restart

/session:restart

API 에러 · OOM · 인증 만료 · ESC 로 죽은 턴을 같은 세션에서 이어간다. TodoList 의 in_progress 를 재개 지점으로 잡고 git status 로 대조한 뒤, 다음 실패가 덜 비싸도록 도구 호출 1회 단위로 쪼개 진행한다.

rate-limit-guard

/session:rate-limit-guard --reset HH:MM <command>

리셋 시각 +5분에 durable 크론 하나를 걸고 .claude/.rate-limit-guard.json 을 남긴 뒤 감싼 명령을 실행한다. 성공하면 안전망을 스스로 걷지만, 리밋 · 네트워크 · 타임아웃 같은 일시적 실패에서는 크론을 그대로 둔다 — 그러라고 건 것이다.

resume-after-limit

/session:resume-after-limit [<command>]

그 크론이 실제로 호출하는 쪽. state 파일을 읽어 명령을 복원하고, 워크트리가 다르면 즉시 멈춘다. 다음 사이클이 남아 있으면 명령을 돌리기 전에 미리 크론을 재무장하고, 성공 시 정리한다.

schedule

/session:schedule [--time M] "<command>"

슬래시 명령이든 자연어 작업이든 M분 뒤에 한 번 실행되게 미룬다(기본 5분). 세션 로컬 일회성 지연 전용이며, 주기 반복은 내장 /loop 의 몫이다.

세션 마무리

close

/session:close [--repos <path,...>]

이번 세션이 건드린 모든 저장소를 4개 항목(git 상태 · TodoList · 임시 산출물 · 이슈/PR 후속)으로 훑어 [OK] 또는 [BLOCKED] 와 Next: 한 줄만 낸다. 완전한 read-only — 파일도 git 상태도 원격도 건드리지 않고, /exit 를 대신 실행하지도 않는다.

handoff

/session:handoff [issue] [remote] [--memory-only]

컨텍스트가 차오를 때 미완 작업을 트래킹 이슈 코멘트와 에이전트 메모리 파일에 적고, 복사해 쓸 재개 문장 한 줄을 낸다. 쓰기는 정확히 그 둘뿐 — 커밋도 push 도 하지 않는다. 실제로 머지된 PR 과 이번 세션에서 초록으로 돈 테스트만 "완료" 로 적는다.

격리 작업공간

worktree-spawn

/session:worktree-spawn [--task <slug>] [<branch>]

../<project>-<agent>-<N> 워크트리를 wt/<agent>/<N> 브랜치로 만들어 병렬 에이전트끼리 충돌하지 않게 한다. 에이전트 이름 감지 · 빈 인덱스 선택 · base ref 해석 · git-crypt 자동 해제까지 처리하되, 이미 워크트리 안이면 실행을 막는다.

worktree-teardown

/session:worktree-teardown <worktree-path> [--force]

워크트리를 지우고 main 을 동기화한 뒤 브랜치를 -d 로 안전 삭제한다. 여덟 중 유일하게 파괴적이라 미커밋 · 미푸시 작업이 남아 있으면 멈추고, --force 는 사람이 주는 것이지 에이전트가 질러도 되는 지름길이 아니다.

2짝과 갈림길

여덟 중 여섯은 짝으로 움직이고, 나머지 갈림길은 "지금 무엇이 끊겼는가" 로 갈립니다.

한 장치의 양 끝 — rate-limit-guard / resume-after-limit

하나의 메커니즘을 두 번의 발화로 쪼갠 것이다. 가드는 reset + 5분 을 계산해 크론을 걸고 state 파일을 쓰고, 리주머는 그 크론이 부르는 쪽이라 자기가 맞는 워크트리에서 깨어났는지 부터 확인한다. 어느 쪽도 혼자서는 쓸모가 없어 함께 배포된다.

같은 순간, 다른 질문 — close / handoff

close 는 "깨끗하게 끝났나" 를 묻고 감사만 한다. handoff 는 컨텍스트가 먼저 바닥났을 때 남은 일을 이슈에 적어 다음 세션이 고고학 대신 문장 하나로 시작하게 한다. close 가 미완 작업에 [BLOCKED] 를 내면 그 Next: 줄이 가리키는 곳이 handoff 다.

재개의 갈림길 — restart / resume-after-limit

턴이 에러나 ESC 로 끊긴 것이면 restart — 세션은 살아 있으니 크론이 필요 없다. 토큰 한계에 막힌 것이면 리셋을 기다려야 하므로 rate-limit-guard 가 걸어둔 크론과 resume-after-limit 의 몫이다.

여닫는 한 쌍 — worktree-spawn / teardown

둘 다 메인 저장소에서 실행하고, 워크트리 안이면 서로 같은 검사로 막는다. 순수 git 이라 여섯 하네스 전부에서 동일하게 동작하는 유일한 둘이기도 하다.