2015년 MacBook에서 Claude Code를 24시간 내내 실행하는 방법 — 6개월 동안 살아남은 프레임워크

발행: (2026년 5월 4일 AM 03:30 GMT+9)
14 분 소요
원문: Dev.to

Source: Dev.to

Suzu Idaki

저는 엔지니어가 아닙니다. 저는 개발자가 아닌 사람으로, 2025년 말에 Claude Code가 제가 잠든 사이에도 계속 작동하기를 원했습니다.

6개월 후, 그 결정은 857개의 자율 세션, 840개의 자체 병합 풀 리퀘스트, 그리고 49개의 launchd 서비스에 걸쳐 배포된 17,328개의 진화 사이클로 컴파일되었습니다 — 모두 8 GB RAM을 탑재한 2015년형 MacBook Air에서 실행되었습니다.

어제 저는 그것을 살아 있게 만든 프레임워크를 오픈소스했습니다: claude‑autonomous‑kit.

이 글은 r/ClaudeAI에 썼던 글의 장문 버전입니다. 실제로 LLM 에이전트를 일정에 맞춰 실행하려고 할 때 무엇이 깨지는지 궁금했다면 — 단순히 데모가 아니라 — 이것이 현장 보고서입니다.

아무도 경고하지 않는 문제

Claude Code는 인터랙티브 모드에서 뛰어납니다. 앉아서 질문하고, 반복하고, 배포합니다. 마찰이 거의 없습니다.

하지만 당신이 자리에 없을 때 실행하려 하면 세 가지가 깨집니다:

  1. 모든 세션이 빈 상태로 시작됩니다. Claude는 어제 했던 일을 기억하지 못합니다. 두 시간 전 결정한 내용을 기억하지 못합니다.
  2. 실패가 조용히 연쇄됩니다. 예정된 세션이 새벽 3시에 실패합니다. 다음 예정 세션은 전혀 모릅니다. 당신이 일어나면 상태가 손상되고 감사 로그가 없습니다.
  3. Git이 무덤이 됩니다. 에이전트가 브랜치를 만들고, 작업을 반쯤 마친 뒤 중단되고, 다른 일을 진행합니다. 일주일 안에 30개 이상의 고아 브랜치가 생기고, 어떤 브랜치에 가치 있는 것이 있는지 전혀 알 수 없습니다.

이것들은 이론적인 문제가 아닙니다. 저도 직접 겪었습니다. 각 문제마다 실제 시간을 낭비했기 때문에 방어 장치를 만들게 되었습니다.

프레임워크가 실제로 하는 일

claude-autonomous-kit다른 에이전트 프레임워크가 아닙니다. DSL도 없고, 그래프도 없으며, 오케스트레이션 레이어도 없습니다. 기존 claude CLI를 감싸서 예약된 작업을 지속 가능하게 만드는 작은 Bash 훅과 Python 스크립트 집합입니다.

다섯 가지 구성 요소:

1. launchd plists      — schedules sessions (macOS native, no daemon to maintain)
2. session‑start hook  — injects the previous session's state into context
3. session‑end hook    — extracts what happened from the transcript JSONL
4. scope‑guard hook    — blocks Claude from modifying protected files
5. healthcheck         — independent watcher; opens GitHub Issues on failure

그게 전부입니다. 마법이 없습니다. 각 구성 요소는 200줄 이하입니다.

몇 달 동안 정착시키는 데 걸린 세 가지 교훈

1. git stash는 자동화된 운영에서 깨진다

첫 번째 버전은 각 세션 전에 작업 중인 변경 사항을 stash했습니다. 깔끔해 보였지만 그렇지 않았습니다.

세션은 중단될 수 있습니다. 시간이 초과될 수 있습니다. OOM으로 강제 종료될 수도 있습니다. 이런 일이 발생하면 stash는 여전히 남아 있지만, 그것을 소유했던 세션은 사라집니다. 다음 세션은 그 stash에 어떤 변경 사항이 있었는지, 혹은 팝해도 안전한지 전혀 알지 못합니다.

이제는 stash를 전혀 사용하지 않습니다. 모든 WIP는 전용 브랜치에 커밋합니다. 세션이 작업 중에 죽으면, 다음 세션은 “이전 세션이 이 브랜치를 남겼다”는 명확한 상태를 이어받습니다. stash는 보이지 않지만, 브랜치는 눈에 보입니다.

2. 세션에 대한 AI 요약은 신뢰할 수 없다

직관적인 답변은 다음과 같습니다: 각 세션이 끝날 때 Claude에게 무엇을 했는지 물어보세요. 이를 내일 세션의 인수인계로 사용하세요.

그렇게 하지 마세요.

Claude는 자신감 있고 유창한 답변을 제공하지만 부분적으로 조작된 내용일 수 있습니다. 거짓말이라기보다, 모델이 긴 컨텍스트 내에서 자신의 도구 호출에 대한 완벽한 자기 검증을 갖고 있지 않기 때문입니다. 실제로 건드리지 않은 파일을 보고하고, 건드린 파일을 누락할 수 있습니다. 한 세션에서는 차이가 작아 보이지만, 수십 개의 세션에 걸쳐 누적되면 재앙이 됩니다.

진정한 진실의 출처는 Claude Code가 작성하는 transcript JSONL 파일입니다. 이를 파싱하고, 도구 호출을 결정적으로 추출하세요. 인수인계는 모델이 작성한 산문 요약이 아니라 transcript에서 추출한 구조화된 데이터여야 합니다.

3. CLAUDE.md는 당신의 AI 헌법이다

미국 헌법처럼 다루세요: 기본 자유, 실제 문제가 발생했을 때만 수정.

현재 내 CLAUDE.md에는 아홉 개의 수정 조항이 있습니다. 각 조항마다 날짜, 상황, 구체적인 사건이 기록되어 있습니다:

  • Amendment 7: 커밋하기 전에 자신의 코드를 검토한다. eval()이 프로덕션에 배포된 뒤, 아무도 이를 차단하지 못한 사건 이후 추가되었습니다.
  • Amendment 8: 모든 푸시는 병합된 PR을 만든다. 푸시만 하고 PR을 열지 않은 에이전트들 때문에 33개의 고아 브랜치가 누적된 뒤 추가되었습니다.
  • Amendment 9: 행동하지 않는 것도 실패다. “계속 진행해야 할까?”라는 질문을 40번 반복하며 명백히 올바른 행동을 실행하지 않은 세션 이후 추가되었습니다.

이 조항들의 형태가 중요합니다. 상상으로 만든 예방 규칙이 아니라 사후 사고에서 생긴 흉터 조직입니다. 예방 규칙만 가득한 헌법은 읽히지 않으며, 실제 상처와 연결된 조항이 있는 헌법만이 존중받습니다.

불안에서 만든 아흔 개의 규칙보다, 고통을 통해 얻은 아홉 개의 수정 조항을 더 선호합니다.

숫자로 보는 현황 (2026년 5월)

6개월간 다듬은 뒤, 한 대의 MacBook Air가 유지하는 내용은 다음과 같습니다:

  • 857개의 자동 Claude Code 세션이 기록됨
  • 840개의 PR이 자동 생성 및 자동 병합됨
  • 49개의 백그라운드 launchd 서비스(거래 봇, 콘텐츠 엔진, 헬스체크, 브리핑)에서 17,328번의 진화 사이클
  • 자동 세션당 평균 API 비용 ~$2
  • 사용자에게 노출되는 0개의 손상된 배포

마지막 숫자가 제가 가장 조용히 자부심을 느끼는 부분입니다. 스코프 가드는 지루합니다. 단지 Claude가 특정 파일(헌법, 훅 자체, 비밀)에 접근하지 못하도록 거부할 뿐입니다. 하지만 “지루하고 거부한다”는 것이 바로 가드레일에서 원하는 모습입니다. 6개월 동안 약 40건의 편집 시도를 차단했으며, 그 모두가 재앙이었을 것입니다.

Claude Code(또는 어떤 LLM 에이전트)를 일정에 따라 실행하려는 생각이 있다면, 먼저 이 가드레일을 적용하세요. 나머지는 지뢰밭 같은 느낌이 크게 줄어듭니다.

아직도 아픈 점

아직 완성되지 않은 부분에 대해 솔직하고 싶습니다.

Claude Code 2.1.113+는 macOS 13이 필요합니다.
내 2015년형 MBA는 Big Sur에 머물러 있습니다. Mac mini 마이그레이션(2026년 7월에 M4 24 GB로 예정 — 레포에 별도 문서화된 결정)이 이루어질 때까지 오래된 버전에 고정돼 있습니다.

보기에 올바른 환각이 아직도 가장 큰 해결되지 않은 문제입니다.
Claude가 자신 있게 함수를 작성해 컴파일되고 대략 실행되지만 미묘하게 잘못된 경우, 현재 어떤 가드레일도 병합 전에 이를 잡아내지 못합니다. 저는 python3 -m py_compile과 사람의 눈으로 확인하는 것에 의존하고 있는데, 둘 다 충분하지 않습니다.

장시간 장애 복구가 수동입니다.
Anthropic에 품질 회귀가 몇 시간 지속될 때, 전체 파이프라인이 저하되고 저는 단순히 헬스‑체크가 이슈를 열게 두는 것보다 더 똑똑한 “이 세션을 건너뛰고 내일 재개” 경로를 구축하지 못했습니다.

이것이 제가 같은 일을 하는 커뮤니티가 반박해 주길 바라는 내용들입니다.

세 가지 열린 질문

Claude Code(또는 어떤 에이전트)를 일정에 따라 실행하고 있다면:

  1. 빈 슬레이트 문제를 어떻게 처리하시나요?
    훅? 컨텍스트를 다시 주입하는 시스템 프롬프트? /memory? 혹은 맞춤형 무언가?

  2. launchd, cron, 혹은 systemd를 통해 Claude Code를 실행하는 사람 있나요?
    시도했을 때 가장 먼저 어떤 것이 깨졌나요?

  3. 자율 PR 패턴의 경우 — 자동 병합을 신뢰하시나요, 아니면 인간 게이트를 두시나요?
    저는 안전망으로 스코프 가드를 두고 자동 병합합니다. 다른 사람들은 더 강하게 게이트를 두는지 궁금합니다.

다른 사람들이 같은 문제를 어떻게 해결했는지(또는 해결하지 못했는지) 듣고 싶습니다.

레포지토리

github.com/uzucky/claude-autonomous-kit

오늘 바로 설치할 수 있는 두 가지 스킬이 포함되어 있습니다:

  • autonomous-bootstraplaunchd 플리스트와 훅을 설정해 줍니다.
  • autonomous-handover – 구조화된 추출 핸드오버 라이터.

채널을 선호한다면 r/ClaudeAI Project Showcase Megathread에서도 논의가 진행되고 있습니다.

여기서 무언가 공감이 가거나, 제가 해결하지 못한 열린 질문을 더 잘 해결하셨다면 정말 듣고 싶습니다. 이슈, PR, 혹은 아래 댓글 하나라도 언제든 환영합니다.

0 조회
Back to Blog

관련 글

더 보기 »