claude-code-launchd-loops
Claude Code를 주기적으로 무인 실행하는 macOS launchd 작업을 명령 한 줄로 만들어 주는 생성기입니다.
어떤 문제를 푸나The problem
세션 안의 반복 예약은 세션이 끝나면 사라집니다. launchd 에이전트는 재시작을 넘어 자율 루프를 유지합니다. 이 스크립트는 실행용 래퍼 스크립트와 plist를 만들어 줄 뿐 설치하거나 로드하지는 않습니다.
무인 실행은 위험할 수 있으므로 기본 상태에서는 권한을 건너뛰지 않습니다. 필요한 도구만 --allowed-tools로 허용하고, 모든 권한 건너뛰기는 --unsafe-skip-permissions를 직접 줘야 켜집니다.
이런 분께 맞습니다Who it is for
Claude Code를 정해진 시각에 무인으로 돌리고 싶은 macOS 사용자.
무엇을 하나What it does
- 작업 이름, 프로젝트 경로, 실행 분, 프롬프트 파일로 래퍼와 plist를 만듭니다.
- 0~59 밖의 분, 상대 경로, 셸·XML 특수문자가 든 경로나 라벨을 거부합니다.
- 프롬프트 파일에 PROMPT_EOF 줄이 있으면 거부해 스크립트가 중간에 끊기는 것을 막습니다.
- launchd 라벨은 --label-prefix로 정하고, 로드는 launchctl bootstrap으로 직접 합니다.
직접 돌려 본 출력Real output
저장소의 examples 폴더를 실행한 결과입니다.
$ bash examples/demo.sh
# Generate a launchd job that runs Claude Code headless at minutes 7 and 37 of every hour
$ scripts/make-loop.sh --name demo --dir /path/to/your/project --minutes 7,37 --prompt-file .demo-tmp/prompt.txt --out .demo-tmp/out
wrote .demo-tmp/out/demo-loop.sh
wrote .demo-tmp/out/com.example.demo-loop.plist
[exit 0]
com.example.demo-loop.plist
demo-loop.sh
# The generated plist, validated:
.demo-tmp/out/com.example.demo-loop.plist: OK
# Minutes outside 0-59 are refused:
$ scripts/make-loop.sh --name demo --dir /tmp --minutes 75 --prompt-file .demo-tmp/prompt.txt --out .demo-tmp/o2
[exit 2]
minute > 59
알아둘 한계Limits
- macOS 전용이며 테스트는 생성물의 유효성까지만 확인합니다. 실제 예약 실행은 확인하지 않습니다.
- 예약 실행은 API 사용량을 쓰므로 주기와 비용을 확인하고 쓰십시오.
받아서 쓰기Get it
# 저장소를 받습니다
git clone https://github.com/Kein-chronicle/claude-code-launchd-loops.git
# Claude Code 스킬로 쓰려면 이 폴더 이름으로 받습니다
git clone https://github.com/Kein-chronicle/claude-code-launchd-loops.git ~/.claude/skills/scheduled-claude-loops
정보Info
- 분류Category
- 에이전트 운영Agent operations
- 형태Type
- 명령줄 도구Command-line tool
- 라이선스License
- MIT
- 필요한 것Requires
- bash, macOS(plutil, zsh)
- 저장소Repository
- claude-code-launchd-loops
- 토픽Topics
claude-codeclaude-skillsagent-skillslaunchdmacosautomationschedulingcron
2026-10-18 기준: 저장소의 테스트를 로컬에서 실행해 통과했고, 예제 출력은 저장소의 examples 폴더를 실제로 실행한 결과입니다.