클로드 코드 예약 작업: 반복 업무를 자동화하는 세 가지 방법

클로드 코드 예약 작업: 반복 업무를 자동화하는 세 가지 방법

매일 아침 출근하면 습관처럼 하는 일이 있습니다. PR 리뷰 목록 확인하고, CI 실패한 거 훑어보고, 의존성 업데이트 알림 살펴보고… 중요한 일이긴 한데 매번 직접 하자니 번거롭죠. “이거 Claude가 알아서 해주면 안 되나?” 싶은 생각, 한 번쯤은 드셨을 겁니다.

클로드 코드에는 바로 이런 반복 업무를 자동으로 처리해주는 예약 작업(Scheduled Tasks) 기능이 있습니다. 컴퓨터를 꺼도 돌아가는 Cloud 예약 작업, 로컬 파일에 접근할 수 있는 Desktop 예약 작업, 세션 안에서 가볍게 폴링하는 /loop까지 상황에 맞는 세 가지 방식을 제공하는데요. 이 글에서는 각 방식의 특징과 사용법을 실전 예제와 함께 살펴보겠습니다.

세 가지 예약 작업 한눈에 비교

Claude Code가 제공하는 예약 작업은 Cloud, Desktop, /loop 이렇게 세 가지입니다. 어떤 걸 써야 할지 고민되시죠? 핵심 차이를 먼저 정리해볼게요.

구분CloudDesktop/loop (CLI)
실행 환경Anthropic 클라우드로컬 (데스크톱 앱)로컬 (터미널)
컴퓨터 켜야 하나?아니오
세션 열어야 하나?아니오아니오
재시작 후 유지?아니오
로컬 파일 접근불가 (fresh clone)가능가능
최소 간격1시간1분1분

간단히 말하면 이렇습니다. 컴퓨터를 꺼도 돌아가야 하면 Cloud 예약 작업, 매일 아침 9시에 PR 리뷰를 자동으로 돌리고 싶은데 로컬 파일이 필요하면 Desktop 예약 작업, 지금 돌리고 있는 빌드가 끝났는지 잠깐 확인하고 싶으면 /loop을 쓰면 됩니다.

Cloud 예약 작업: 컴퓨터 꺼도 돌아가는 자동화

Cloud 예약 작업은 Anthropic이 관리하는 인프라에서 실행됩니다. 컴퓨터를 꺼도, 앱을 닫아도 계속 돌아가요. 로컬 파일에 접근할 수는 없지만 (매번 GitHub에서 fresh clone) 안정성이 중요한 작업에는 이게 가장 잘 맞습니다.

CLI에서 /schedule 커맨드를 실행하면 인터랙티브 메뉴가 나타납니다.

/schedule 실행 화면
What would you like to do with scheduled remote agents?

> 1. Create
     새로운 스케줄 에이전트를 생성합니다
  2. List
     기존 스케줄 에이전트 목록을 조회합니다
  3. Update
     기존 스케줄 에이전트를 수정합니다
  4. Run Now
     기존 스케줄 에이전트를 즉시 실행합니다

여기서 Create를 선택하면 작업 이름, 프롬프트, GitHub 저장소, 실행 환경, 스케줄을 차례로 설정합니다. /schedule daily PR review at 9am처럼 직접 설명을 붙이면 대화형 설정 없이 바로 만들 수도 있어요.

CLI 외에 웹 인터페이스(claude.ai/code/scheduled)에서 New scheduled task를 클릭하거나, Desktop 앱의 Schedule 페이지에서 New taskNew remote task를 선택해도 됩니다.

Cloud 작업 설정하기

설정 항목을 하나씩 살펴보겠습니다. 가장 중요한 건 프롬프트입니다. Cloud 작업은 사람 없이 혼자 돌아가기 때문에 프롬프트가 자체적으로 완결되어야 합니다. “뭘 해야 하는지”뿐 아니라 “성공 기준이 뭔지”까지 명시하는 게 좋아요.

GitHub 저장소는 하나 이상 추가합니다. 매 실행마다 기본 브랜치에서 clone하고, Claude가 변경하면 claude/ 접두사가 붙은 브랜치에 push하는 방식이에요. 기본적으로 claude/ 브랜치에만 push할 수 있는데, 이 제한을 풀고 싶으면 Allow unrestricted branch pushes를 켜면 됩니다.

실행 환경에서는 네트워크 접근 수준, 환경 변수, 셋업 스크립트를 설정합니다. API 키나 토큰이 필요하면 환경 변수로 넣어주고, 의존성 설치 같은 준비 작업은 셋업 스크립트에 넣으면 매 실행 전에 알아서 돌아갑니다.

스케줄은 Hourly, Daily, Weekdays, Weekly 중에서 고릅니다. 로컬 타임존 기준이라 서울에서 오전 9시로 설정하면 실제로 오전 9시에 실행돼요. 커스텀 간격이 필요하면 /schedule update로 조정할 수 있습니다.

커넥터도 빼놓을 수 없죠. Slack, Linear, Google Drive 같은 외부 서비스와 연동하는 MCP 커넥터를 작업에 포함시킬 수 있는데요. Slack 채널에서 지원 요청을 읽어서 Linear에 이슈를 만드는 식의 작업도 가능합니다. 기본적으로 연결된 모든 커넥터가 포함되니 필요 없는 건 빼주세요.

Cloud 작업 관리하기

만들어진 작업은 웹 인터페이스(claude.ai/code/scheduled)나 Desktop 앱의 Schedule 페이지에서 관리합니다. 작업을 클릭하면 상세 페이지가 나오는데, 여기서 꽤 많은 걸 할 수 있어요.

Run now를 누르면 다음 스케줄을 기다리지 않고 바로 실행합니다. 이전 실행 결과는 각각 별도 세션으로 남아서 Claude가 뭘 했는지 확인하고 변경 사항을 리뷰하거나 PR을 만들 수도 있습니다. 스케줄 일시 중지, 프롬프트 수정, 저장소나 환경 설정 변경, 삭제도 모두 여기서 됩니다.

CLI에서도 관리가 가능합니다. /schedule list로 전체 목록을 보고, /schedule update로 수정하고, /schedule run으로 즉시 실행합니다.

Desktop 예약 작업: 로컬 머신에서 지속적으로

Desktop 예약 작업은 Claude Code 데스크톱 앱에서 설정하는 방식입니다. Cloud와 달리 로컬 파일에 직접 접근할 수 있고, 세션을 열어놓지 않아도 앱이 열려 있는 한 계속 돌아갑니다. 앱을 재시작해도 유지되고요.

설정하려면 데스크톱 앱 사이드바에서 Schedule 페이지로 가서 New task -> New local task를 클릭합니다. 작업 이름, 설명, 프롬프트, 실행 빈도를 입력하는 폼이 나오는데요. 프롬프트 입력란에서는 모델, 권한 모드, 작업 폴더, worktree 사용 여부도 함께 설정할 수 있습니다. 꼭 UI를 통하지 않아도 됩니다. 아무 Desktop 세션에서 자연어로 “매일 아침 9시에 코드 리뷰 작업을 만들어줘”라고 말해도 돼요.

빈도는 다섯 가지 중에서 선택합니다.

  • Manual — 스케줄 없이, Run now를 클릭할 때만 실행됩니다. 자주 쓰는 프롬프트를 저장해두고 필요할 때 꺼내 쓰는 용도로 좋습니다.
  • Hourly — 매시간 실행됩니다. API 트래픽 분산을 위해 정시에서 최대 10분까지 자동 오프셋이 붙습니다.
  • Daily — 매일 지정한 시간에 실행됩니다. 기본값은 오전 9시입니다.
  • Weekdays — Daily와 같지만 토/일은 건너뜁니다.
  • Weekly — 매주 지정한 요일과 시간에 실행됩니다.

15분마다 실행하거나 매월 1일에 실행하는 것처럼 피커에 없는 간격이 필요하면, Desktop 세션에서 Claude에게 직접 말하면 됩니다. “6시간마다 전체 테스트를 돌려줘” 같은 식으로요.

Desktop 작업의 실행과 권한

Desktop 예약 작업은 앱이 열려 있는 동안 매분 스케줄을 확인합니다. 작업 시간이 되면 새로운 세션이 사이드바의 Scheduled 섹션에 나타나고, 데스크톱 알림이 뜹니다. 일반 세션과 똑같이 동작하기 때문에 파일 편집이나 명령어 실행은 물론이고 커밋이나 PR까지 만들 수 있습니다.

여기서 주의할 점이 하나 있습니다. 컴퓨터가 잠자기에 들어가면 작업이 실행되지 않아요. 노트북 덮개를 닫으면 당연히 안 되고요. Settings의 Keep computer awake 옵션을 켜면 유휴 상태에서의 잠자기는 방지할 수 있지만, 덮개를 닫는 건 막을 수 없습니다. 대신 놓친 실행에 대한 보충 로직이 있어서, 앱이 시작되거나 컴퓨터가 깨어나면 최근 7일 내에 놓친 실행이 있는지 확인하고 가장 최근 것 하나만 보충 실행합니다.

이 보충 로직 때문에 프롬프트 작성에 신경 써야 할 부분이 있는데요. 매일 오전 9시로 설정한 작업이 오후 11시에 보충 실행될 수도 있거든요. 시간에 민감한 작업이라면 프롬프트에 “오후 5시 이후면 리뷰를 건너뛰고 놓친 항목만 요약해줘” 같은 가드레일을 추가하는 게 좋습니다.

권한도 작업마다 별도로 설정할 수 있습니다. ~/.claude/settings.json의 allow 규칙이 적용되고, 허용되지 않은 도구를 써야 하면 승인할 때까지 세션이 멈춰서 기다립니다. 팁을 하나 드리자면, 작업을 처음 만든 후 Run now를 눌러서 한 번 실행해보세요. 그때 뜨는 권한 프롬프트에서 “always allow”를 선택하면, 이후 실행에서는 같은 도구에 대해 자동 승인이 됩니다.

실전 활용 시나리오

어떤 상황에서 어떤 방식을 쓰면 좋을지 몇 가지 시나리오를 살펴보겠습니다.

첫 번째, 매일 오전 PR 리뷰입니다. 팀에서 올라온 PR을 매일 아침 자동으로 리뷰하고 싶다면, Cloud 예약 작업이 적합합니다. 컴퓨터를 안 켜도 돌아가니까요.

열려 있는 PR 중 리뷰어가 지정되지 않은 것들을 찾아서 코드 리뷰를 해줘.
중요한 이슈는 코멘트로 남기고, 전체 요약을 Slack #dev 채널에 올려줘.

두 번째, 주간 의존성 감사입니다. 매주 월요일에 의존성 취약점을 검사하고 싶다면 역시 Cloud 예약 작업을 쓰면 됩니다.

npm audit과 cargo audit을 실행하고, critical이나 high 취약점이 있으면
수정 PR을 만들어줘. 결과 요약을 이슈로 등록해줘.

세 번째, 로컬 테스트 자동 실행입니다. 코드를 수정하면서 테스트를 계속 돌리고 싶은데 매번 직접 실행하기 귀찮을 때 Desktop 예약 작업을 쓸 수 있습니다. Hourly로 설정해두면 매시간 전체 테스트를 돌려서 깨진 테스트가 없는지 확인해줍니다. 로컬 파일에 직접 접근하니까 Cloud보다 빠르고, 세션을 열어놓지 않아도 되니까 /loop보다 편하죠.

네 번째, 배포 후 모니터링입니다. 프로덕션 배포를 했는데 안정화될 때까지 상태를 계속 확인하고 싶을 때, /loop이 딱입니다. 이건 예약 작업이라기보다 잠깐 돌리는 폴링에 가까운데요. 바로 다음 섹션에서 살펴보겠습니다.

/loop: 세션 안에서 간이 폴링이 필요할 때

Cloud나 Desktop 예약 작업은 지속적인 반복 업무에 적합하지만, “배포 끝났나?” “CI 통과했나?” 같은 짧은 확인은 예약 작업을 만들기엔 좀 과하죠. 이럴 때 /loop을 씁니다. 현재 세션 안에서 프롬프트를 반복 실행하는 간이 폴링 도구예요.

/loop 5m 프로덕션 서버 헬스체크 엔드포인트를 호출해서 상태를 확인해줘. 에러가 있으면 즉시 알려줘.

/loop 뒤에 간격과 프롬프트를 적으면 됩니다. 간격은 앞에 붙여도 되고(/loop 30m 빌드 상태 확인해줘), 뒤에 every 절로 붙여도 되고(/loop 빌드 상태 확인해줘 every 2 hours), 아예 생략하면 기본 10분마다 실행됩니다.

다른 슬래시 커맨드를 반복 실행하는 것도 가능합니다. /loop 20m /review-pr 1234라고 하면 20분마다 PR 리뷰를 돌리고, /loop 5m /babysit으로 PR을 프로덕션까지 보살펴주는 식의 조합도 됩니다.

반복이 아니라 한 번만 알림을 받고 싶으면 /loop 없이 “오후 3시에 릴리즈 브랜치 푸시하라고 알려줘”처럼 자연어로 말하면 됩니다. Claude가 단발성 cron 작업을 만들고 실행 후 자동으로 삭제합니다.

다만 /loop에는 몇 가지 제약이 있습니다. 세션에 종속되기 때문에 터미널을 닫으면 모든 작업이 사라지고, /resume으로 이전 세션을 이어가도 복원되지 않습니다. tmuxscreen을 쓰지 않는 한 컴퓨터를 끄면 끝이에요. 반복 작업은 3일 후 자동 만료되고, Claude가 다른 응답을 생성하는 중이면 현재 턴이 끝날 때까지 기다렸다가 실행됩니다. 정각에 여러 세션이 동시에 API를 호출하는 걸 막기 위해 jitter도 적용돼서, 1시간 간격 작업은 최대 6분 늦게 실행될 수 있어요. 세션 내 작업 관리는 “지금 예약된 작업 목록 보여줘”, “배포 체크 작업 취소해줘”처럼 자연어로 합니다.

스케줄링을 아예 비활성화하려면 환경 변수 CLAUDE_CODE_DISABLE_CRON=1을 설정하면 됩니다.

cron 표현식 레퍼런스

예약 작업은 내부적으로 표준 5필드 cron 표현식을 사용합니다. 분 시 일 월 요일 순서이고, 와일드카드(*), 단일값(5), 스텝(*/15), 범위(1-5), 콤마 리스트(1,15,30)를 지원합니다.

표현식의미
*/5 * * * *5분마다
0 * * * *매시 정각
0 9 * * *매일 오전 9시
0 9 * * 1-5평일 오전 9시
30 14 15 3 *3월 15일 오후 2시 30분

요일은 0 또는 7이 일요일이고 6이 토요일입니다. L, W, ? 같은 확장 문법이나 MON, JAN 같은 이름 별칭은 지원하지 않습니다.

보통 cron을 직접 쓸 일은 없습니다. /loop이나 Desktop/Cloud UI에서 자연어로 설정하면 Claude가 알아서 변환해주니까요. 하지만 /schedule update로 세밀한 조정을 할 때는 알아두면 유용합니다.

GitHub Actions와의 차이

반복 자동화라는 점에서 GitHub Actions의 schedule 트리거와 비슷해 보일 수 있는데, 성격이 다릅니다.

GitHub Actions는 CI/CD 파이프라인의 일부로 리포지토리 이벤트에 반응하거나 정해진 시간에 워크플로우를 실행합니다. YAML로 정의하고 실행 환경도 GitHub이 관리하죠. 반면 Claude Code 예약 작업은 AI 에이전트가 프롬프트를 받아서 알아서 판단하고 행동합니다. “PR을 리뷰해줘”라고 하면 코드를 읽고 이해한 뒤 의미 있는 코멘트를 남기는 식이에요.

둘을 함께 쓸 수도 있습니다. GitHub Actions로 CI가 실패하면 Claude Code Cloud 작업이 원인을 분석해서 수정 PR을 만들도록 연결하는 것처럼요.

마치며

Claude Code의 예약 작업은 “AI에게 한 번 시키고 끝”이 아니라 “AI가 알아서 계속 해주는” 환경을 만들어줍니다. 컴퓨터를 꺼도 멈추지 않는 Cloud 예약 작업, 로컬에서 안정적으로 돌아가는 Desktop 예약 작업, 세션 안에서 가볍게 확인하는 /loop. 상황에 맞게 골라 쓰면 반복 업무에서 꽤 많이 해방될 수 있어요.

처음이라면 /schedule부터 시작해보세요. 매일 아침 PR 리뷰를 돌리는 Cloud 작업 하나만 만들어봐도, 아침마다 리뷰 목록을 훑는 시간이 사라지는 걸 체감하실 겁니다. 급한 확인이 필요하면 /loop 5m 헬스체크 확인해줘로 가볍게 폴링하고요.

더 자세한 내용은 Claude Code Scheduled Tasks 공식 문서를 참고하세요.

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord