개발자F
개발자F
🎖️ 마스터 파트너

극단적인 게으름뱅이는 보법이 다르다

소개

안녕하세요. 게으름뱅이F입니다.

태생이 게으름뱅이인 저는 요즘 너무나 바쁘답니다 흑흑..
그러던 도중 꿀같은 부산 출장이 잡혀서 신나게 바다가 보이는 호텔방도 잡고 갈 때까지는 그럴 듯한 관광 계획도 있었습니다.

안경과 복싱 장갑을 곁들인 만화 소년

하지만 생각보다 오래걸린 강의 준비부터 호텔 근처에는 눈씻고 찾아봐도 찾을 수 없는 맛집 크리티컬로 호텔방에서 일만하는 3박4일을 보내고 있습니다.

다행이 3일차 저녁 기분 좋게 맥주 한잔하면서 이번 출장을 기념하고 마쟄형님의 Beat it을 듣다가 삘이 오고야 말았습니다.

이쯤되면 자동화 하나쯤 뚝딱해서 일정관리정돈 ai가 해줘도 괜찮지 않을까??

그래서 만들었습니다!

Claude code X MCP 로 이메일 기반 요약-정리-일정등록-테스크 관리 Agent!

진행 방법

먼저 사용한 MCP는

  1. 구글 캘린더 MCP https://github.com/nspady/google-calendar-mcp

  2. 구글 Gmail MCP https://github.com/shinzo-labs/gmail-mcp

  3. 노션 공식 MCP https://developers.notion.com/docs/mcp

  4. Linear 공식 MCP https://linear.app/docs/mcp


쉘 스크립트로 Claude code를 헤드리스로 동작시키는 것부터 시작했습니다. (참조 공식문서)

간단히 이야기하면 cli환경에서 claude -p "프롬프트"로 동작시키면 동작합니다.

여기서 가장 놀라운점은 cli 채팅환경에서 쓰던 mcp부터 프로젝트 세팅까지 전부 싹 다 유지가 가능합니다.

n8n cloud에서 mcp를 쓰면 무조건 원격환경의 mcp를 써야하는 데 이 경우 노션mcp나 리니어 mcp는 사용이 어렵습니다. 그래서 claude code를 스크립트로 실행 가능한 것은 엄청난 장점이었습니다.


다음으로 프롬프트를 잘 깍아서 항상 안정적으로 동작시키는 것입니다.

이때 중요했던 점이 이전 실행시간부터, 지금 실행시간까지를 프롬프트로 넘겨주지 않으면 항상 모든 이메일을 읽어오거나 부정확하게 필터링해서 낭비가 발생합니다. 이 점을 유의해서 항상 log파일로 직전 실행이 완료된 시점을 기록하고 그 지점부터 실행 시점까지의 시간을 프롬프트에 강제하게 스크립트에 추가했습니다.

[메일 자동 처리 - 서브에이전트 조율자]

현재: ${NOW_KST}
마지막 실행: ${LAST_RUN}
오늘: ${TODAY_KST}

그 이후부터는 동작을 정의했습니다

  1. Gmail을 마지막 실행시점부터 현재까지 조회한다.

  2. 각 이메일에 적절한 라벨을 부여한다. 프로세스가 완료된 이메일은 프로세스가 완료되었음을 나타내는 라벨도 같이 추가한다.

  3. 조회한 이메일을 노션에 요약 정리하여 기록한다

  4. 각 이메일에 맞춰 일정 등록이 필요하면 등록한다

  5. 각 이메일에 맞춰 리니어에 테스크로 정리하여 등록한다

이렇게 프롬프트가 완료되고 스크립트가 동작하기 시작했습니다


하지만 늘 잘 작동하면 AI가 아니겠죠?

이메일이 몰리면 컨텍스트가 넘쳐서 계속 compact를 진행하여 시간이 오래걸리는 문제가 발생했습니다.

이를 해결하기 위해 각 동작에 맞는 적절한 서브에이전트를 구축하고 이를 각 단계별로 지정해서 호출하게 했습니다.(참고 자료)

서브에이전트의 장점은 각 서브에이전트 내부 동작으로 발생하는 컨텍스트는 매인 에이전트에게 전달되지 않고 오직 명령-결과 만 주기 때문에, 컨텍스트를 엄청 아낄 수 있습니다.

이를 이용해서 결과적으로 큰 덩치의 프롬프트를 확 줄이고 컨텍스트도 조절이 가능해졌습니다.

# 에이전트 예시

### 2. AI 에이전트 시스템

스크립트는 Claude AI를 활용한 멀티 에이전트 시스템으로 구성됩니다:

#### 2.1 조율자 에이전트 (Orchestrator)
- **역할**: 전체 작업 흐름 관리 및 서브 에이전트 조율
- **책임**:
  - Gmail 메일 검색 지시
  - 병렬 처리 조율
  - 결과 집계 및 보고

#### 2.2 Gmail Processor 에이전트
- **역할**: Gmail 메일 검색 및 분류
- **기능**:
  - 시간 범위 기반 메일 검색 (`LAST_RUN` ~ `NOW_KST`)
  - 라벨 캐시를 활용한 효율적인 분류
  - 메일 데이터 구조화 및 전달
  - 처리된 메일에 자동 라벨링

#### 2.3 Notion Organizer 에이전트
- **역할**: 메일 데이터를 Notion으로 정리
- **기능**:
  - Notion 데이터베이스에 메일 정보 저장
  - 페이지 계층 구조 생성
  - 일일 요약 페이지 생성
  - 메타데이터 및 태그 관리

#### 2.4 Calendar Scheduler 에이전트
- **역할**: 일정 관련 메일 처리
- **기능**:
  - 일정 메일 자동 감지
  - Google Calendar 이벤트 생성
  - 중복 일정 확인
  - 시간대 자동 변환 (KST)

#### 2.5 Linear Tasker 에이전트
- **역할**: 작업 요청 메일을 Linear 이슈로 변환
- **기능**:
  - 작업 요청 메일 필터링
  - Linear 이슈 자동 생성
  - 라벨 및 프로젝트 할당
  - 우선순위 설정

이렇게 완료된 스크립트를 처음에는 cron으로 동작시키려 했습니다. 매번 실행시킬 이유도 없거니와 한시간에 한번정도 동작시키다가 맥북이 꺼져있어서 동작되지 못해도 큰 문제는 없었기 때문이죠.

하지만 이왕 하는거 맥북이 닫혀있어도 동작되도록 launchctl 를 이용해서

  1. 맥북이 충전 중이거나, 맥북 베터리가 20%이상이면 2를 동작하고 아니면 실행하지 않는다

  2. 맥북을 caffeinate 으로 깨어있는 상태로 만든다

  3. 스크립트를 실행시키고 완료되면 다시 맥북을 비활성화한다

순서로 동작하는 스크립트를 추가로 구현해서 등록했습니다.


결과와 배운 점

이제 게으름뱅이F는 이메일과 일정등록 지옥에서 해방되었어요

자유를 찾아 떠나기엔 남은 일이 너무 많지만 맥주 한잔 하면서 만든 자동화 치고는 훌륭하다 생각합니다.

10
3개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요