
Claude Code의 routine(클라우드 정기 실행)을 안전하게 구성하기 위한 노하우
요약
Claude Code의 routine 기능을 활용하여 PC가 꺼져 있어도 클라우드에서 작업을 무인화하는 방법과 주의사항을 다룹니다. 실행 환경의 특성을 이해하고 권한 설정 및 리포지토리 구성 시 고려해야 할 실무 노하우를 제공합니다.
핵심 포인트
- routine은 클라우드 환경에서 실행되므로 로컬 설정이 인계되지 않음
- 안전한 실행을 위해 Private 리포지토리 사용과 deny 권한 설정 권장
- 파일 편집보다는 브라우저 기반 태스크나 GitHub 커넥터 활용이 적합
- 리포지토리 내 .claude 설정 및 서브 에이전트 활용 가능
서론
Claude Code의 routine(루틴)을 사용하면, 사용자의 PC가 꺼져 있더라도 클라우드 측에서 Claude Code 세션을 자동으로 실행할 수 있습니다. cron이나 EventBridge처럼, PC를 켜지 않아도 정형 작업을 무인화할 수 있는 기능입니다.
하지만 실제로 구성해 보면, 실행 환경이 로컬 세션과는 별개의 것이라 권한, 네트워크, 상태 인계 문제로 어려움을 겪게 됩니다. "settings.json의 allow를 작성했는데 적용되지 않는다", "git push가 통과되지 않는다", "MCP 도구를 사용할 수 없다"와 같은 함정들이 한두 가지가 아닙니다.
이 기사에서는 routine을 안전하게 구성하기 위해 파악해 두어야 할 포인트들을 직접 검증하며 알게 된 내용과 함께 공유합니다.
실행 환경을 이해하기
routine의 실행 환경은 클라우드 측에 있습니다. 따라서 /loop나 launchd + claude -p를 통한 로컬의 정기 실행과는 달리, 로컬 설정을 전혀 인계받지 않습니다. 로컬 파일 편집도 기본적으로 불가능하므로, 파일 편집이 주가 되는 태스크에는 적합하지 않습니다.
또한, 클라우드로 코드를 보내는 만큼 고객 정보를 커밋하지 않는 등 취급하는 정보에 주의해야 합니다.
전체상 — routine은 "리포지토리를 clone 하여 세션을 시작한다"
routine의 실행 모델은 심플하며, 매번 이를 반복합니다.
[스케줄 시간]
│
▼
...
리포지토리에 .claude 폴더나 CLAUDE.md를 두면, 로컬의 Claude Code와 마찬가지로 자동으로 읽어옵니다. 서브 에이전트(Sub-agent)도 리포지토리에 작성하면 사용할 수 있으므로, 기본적으로 로컬과 동등한 작업을 할 수 있습니다.
"지시(Instruction)"는 routine에서 가장 먼저 실행되는 프롬프트입니다. 장문으로 작성해도 좋지만, 아래와 같이 리포지토리 내의 파일로 유도하는 방식을 사용할 수도 있습니다.

GitHub가 없어도 routine은 만들 수 있지만, 불편하고 위험합니다. 리포지토리가 없으면 .claude 설정(특히 settings.json의 권한)이 적용되지 않아 파일 읽기/쓰기도 할 수 없습니다. 읽기는 지시에 포함할 수 있지만, 쓰기는 git push로 저장해야 하므로 리포지토리가 없으면 편집 결과가 사라집니다.
1. Private 리포지토리를 준비하기
routine 전용 Private 리포지토리를 하나 만들고, 필요한 파일이나 코드를 커밋합니다. Python 등 범용적인 도구는 처음부터 클라우드 환경에 들어있으므로 사용할 수 있습니다.
예:
your-routine-repo/
├── .claude/
│ ├── routine.md
...
권한 — "allow"는 아마 무의미, "deny"로 제한하기
직접 검증한 바로는, .claude/settings.json의 allow는 효과가 없습니다(승인 개념이 없기 때문). 반면 deny는 효과가 있습니다. 필요한 도구 이외의, 특히 쓰기 계열이나 위험한 Bash를 deny로 차단합니다.
예:
{
"permissions": {
"deny": [
...
2. 클라우드 환경에서 사용할 도구를 준비하기
태스크 수행을 위한 도구군
routine은 클라우드에서 동작하기 때문에, 태스크는 로컬의 파일 편집 계열보다 브라우저 계열이 중심이 됩니다. MCP 도구를 사용하고 싶어지겠지만, 로컬의 MCP는 인계되지 않으므로 태스크에 맞춰 커넥터(Connector)를 설정합니다.
커넥터로서 GitHub는 필수입니다.
GitHub 측 연동
GitHub를 열고, 사용자 설정(User Settings) → [Integrations] → [Applications]에서 [Authorized GitHub Apps]에 Claude가 있다면 인가는 OK입니다. 하지만 [Installed GitHub Apps] 측에 Claude가 없으면 routine은 실패합니다. 아래에서 설치하여 routine용 리포지토리에 대한 액세스를 허용합니다.
3. routine을 생성하기
등록 방법은 Web UI와 CLI(/schedule) 두 가지가 있습니다. /schedule
는 간편하지만, 처음에는 설정 항목이 눈에 보이는 Web UI가 이해하기 쉽습니다. https://claude.ai/code/routines 에서 생성합니다. 최소 권한을 의식하여, 불필요한 것은 연결하지 않습니다.

네트워크 액세스 (Network Access) 설정
Environment (위 이미지의 ☁️ claudecode 부분)에서는 네트워크 액세스, 환경 변수 (Environment Variables), 셋업 스크립트 (Setup Scripts)를 설정할 수 있습니다. 그중에서도 중요한 것이 네트워크 액세스이며, 허가되지 않은 사이트에 대한 WebFetch (전체 가져오기)는 403 에러로 차단할 수 있습니다.
기본값인 Trusted는 Anthropic이 허가하는 도메인에 액세스할 수 있는 설정입니다. 범위가 다소 넓기 때문에, 저는 필요한 도메인만 포함하는 커스텀 (Custom) 설정을 사용하고 있습니다. 액세스가 필요 없다면 '없음'으로 설정하는 것이 가장 안전합니다.

상태 유지
git push로 다시 써서 상태를 유지합니다 — 워크트리 (Worktree)는 매번 폐기되므로, 상태를 다음 실행 시까지 남기려면 리포지토리 (Repository)에 다시 써야 합니다. 아래의 권한 토글 (Toggle)을 켤 수 있다면 임의의 브랜치 (Branch)에 git push를 할 수 있어야 하지만, 제 환경에서는 켤 수 없습니다 (아마도 버그로 보입니다).
단, main 등에는 쓸 수 없지만, 토글이 꺼져 있더라도 claude/ 접두사가 붙은 브랜치에는 git push를 할 수 있습니다. 저는 routine용 리포지토리의 기본 브랜치 자체를 claude/xxxx로 설정하여 이 문제를 회피하고 있습니다.

요약
요점은 다음 5가지로 요약됩니다.
- 권한 (Permissions):
allow는 작동하지 않으며,deny로 제한해야 함 - 커넥터 (Connector): 로컬의 MCP는 사용할 수 없으므로 클라우드 측에서 연결함
- GitHub App: routine용 리포지토리에 설치하여 허가함
- 네트워크 액세스 (Network Access): 필요한 도메인만 허용함 (불필요하면 없음)
- 상태의 영속화 (Persistence):
claude/브랜치로git push하여 다시 씀
저는 AWS 학습이나 Claude Code 공부를 돕는 용도로 routine을 사용하고 있습니다. 내 PC를 켜두지 않아도 정형화된 작업이 돌아가는 것이 매우 쾌적하므로, 꼭 안전한 구성으로 시도해 보시기 바랍니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기