Google Calendar Slack 아침 브리핑은 아침에 Slack으로 오늘 일정만 짧게 오는 거예요. 09:30 회의, 14:00 병원, 19:00 운동. 이 정도만 보여도 하루가 덜 꼬입니다. 지난 편에서 알림을 남한테 보내봤다면, 오늘은 그걸 내 일정에 붙여보는 날이구요.
완성되면 Slack에 오늘 일정이 시간순으로 딱 옵니다. 첫 결과는 터미널에 오늘 일정 3줄 찍히는 데서 끝내고, 그다음 Slack 전송만 붙이면 돼요. 여기까지 5분이면 됩니다.
준비물은 이것만
오늘은 Codex만 씁니다. Google Calendar 설정에서 가져오는 비밀 주소 하나, Slack Incoming Webhook 하나면 끝나요. Claude 쓰는 분도 프롬프트는 거의 같은데, 오늘은 명령 예시를 Codex 기준으로 갈게요.
최신 문서에서 확인한 것도 세 개뿐입니다. AGENTS.md 규칙 파일은 developers.openai.com/codex/guides/agents-md, 파일 자동 생성은 developers.openai.com/codex/noninteractive, /review와 web search는 developers.openai.com/codex/cli/features 기준으로 잡고 갑니다. 전체 기능 외울 필요 없어요. 오늘은 이 셋만 씁니다.
1
규칙 메모부터 박아두기
AI에게 보낸 프롬프트
codex exec --full-auto "현재 폴더에 AGENTS.md만 만들어줘.\n목표: Google Calendar Slack 아침 브리핑 만들기.\n규칙: 한국어로 짧게, 오늘 일정만 시간순으로, 일정이 없으면 '오늘은 비어 있습니다' 한 줄, 과장 금지, 파일 추가는 아직 하지 마."
왜 이렇게 시켰나: 이거 안 넣으면 Codex가 말투를 바꾸거나 쓸데없이 기능을 벌립니다. AGENTS.md는 폴더 규칙 메모라서 뒤 단계에서도 계속 먹어요.
이렇게 나오면 OK: AGENTS.md 안에 출력 규칙 네다섯 줄이 들어 있고, 일정 없을 때 문구까지 적혀 있으면 됩니다.
⚠여기서 이렇게 하면 안 돼요: Step 1에서 Python 파일이랑 Slack 전송까지 한 번에 시키지 마요. 첫 판이 커지면 초보일수록 어디서 꼬였는지 감이 안 옵니다.
2
오늘 일정만 뽑는 한 파일 만들기
AI에게 보낸 프롬프트
codex exec --full-auto "Python으로 briefing.py와 .env.example을 만들어줘.\nCALENDAR_ICS_URL을 .env에서 읽고 오늘 일정만 시간순으로 콘솔에 출력해.\n한국 시간 기준으로 처리하고, 제목과 시작 시간만 보여줘.\n일정이 없으면 오늘은 비어 있습니다를 출력해.\n아직 Slack 전송은 넣지 마."
왜 이렇게 시켰나: Codex exec는 공식 문서 기준으로 기본이 읽기 전용이라 파일을 만들 땐 --full-auto를 붙여야 해요. 그리고 Step 2에서는 터미널 출력만 보게 해야 첫 결과가 빨리 나옵니다.
이렇게 나오면 OK: .env에 비밀 주소를 넣고 briefing.py를 돌렸을 때 오늘 일정이 시간순으로 두세 줄 뜨면 끝입니다. 여기서 진짜 한 번 허무해져요. 생각보다 너무 빨리 되거든요.
여기서 이렇게 하면 안 돼요: Google Calendar 공개 링크를 넣으면 안 됩니다. 설정 화면의 비밀 iCal 주소를 넣어야 오늘 일정이 제대로 읽힙니다.
3
Slack으로 보내기
AI에게 보낸 프롬프트
codex exec --full-auto "기존 briefing.py에 Slack 전송만 추가해줘.\nSLACK_WEBHOOK_URL을 .env에서 읽고, 콘솔에 만든 같은 문구를 Slack에도 보내줘.\n--dry-run 옵션을 넣어서 테스트할 때는 전송 없이 콘솔만 보이게 해줘.\nREADME에는 실행 예시 한 줄만 적어줘."
왜 이렇게 시켰나: 이미 만든 문구를 그대로 보내게 해야 터미널 결과와 Slack 결과가 안 갈라집니다. --dry-run도 꼭 넣어야 웹훅 테스트하다가 채널에 같은 메시지 7개 보내는 사고를 막아요.
이렇게 나오면 OK: 터미널에서는 일정 미리보기가 보이고, dry-run을 빼면 Slack 채널에 같은 문구가 한 번 도착하면 됩니다.
⚠여기서 이렇게 하면 안 돼요: 일정 요약 형식을 이 단계에서 또 바꾸라고 길게 시키지 마요. 전송이 먼저 붙어야 하고, 문구 다듬기는 그다음입니다.
4
아침 8시에 혼자 돌게 만들기
AI에게 보낸 프롬프트
codex exec --full-auto "Windows 기준으로 run_morning.bat 파일 하나 만들어줘.\npython briefing.py를 실행하게 하고, README에 Task Scheduler로 오전 8시에 돌리는 설정을 5줄 안으로 적어줘.\n새 기능 추가 말고 실행 흐름만 정리해줘."
왜 이렇게 시켰나: 자동화는 거창하게 시작하면 손이 멈춥니다. bat 파일 하나 있으면 작업 스케줄러에 걸기 쉬워요. 몰라도 괜찮아요. 그냥 붙여넣고 시간만 08:00으로 맞추면 됩니다.
이렇게 나오면 OK: run_morning.bat를 더블클릭했을 때 Slack으로 한 번 도착하고, README에 작업 스케줄러 설정이 짧게 적혀 있으면 됩니다.
⚠여기서 이렇게 하면 안 돼요: Step 4에서 주간 요약이나 월간 통계까지 붙이지 마요. Google Calendar Slack 아침 브리핑은 매일 한 줄 오는 맛이 먼저입니다.
5
/review로 마지막 덜컹거림 잡기
AI에게 보낸 프롬프트
/review\nFocus on Asia/Seoul timezone, duplicate events, and the empty-day message only. Do not suggest a rewrite.
왜 이렇게 시켰나: 공식 문서 기준으로 /review는 작업 트리를 건드리지 않고 diff만 읽습니다. 그래서 지금처럼 거의 완성됐는데 살짝 불안할 때 쓰기 좋아요.
이렇게 나오면 OK: 시간대 꼬임, 중복 일정, 빈 일정 문구 정도만 짚어주고 큰 구조 갈아엎자는 말이 안 나오면 됩니다.
⚠여기서 이렇게 하면 안 돼요: review 결과를 보고 파일 전체를 다시 만들라고 시키지 마요. 지적받은 줄만 고쳐야 속도가 안 죽습니다.
여기서 막히면
첫 번째 현상은 일정이 하나도 안 뜨는 경우예요. 원인은 대체로 Google Calendar의 공개 공유 링크를 넣었거나, 비밀 iCal 주소를 복사하면서 앞뒤 공백이 같이 들어간 겁니다. 설정의 캘린더 통합 메뉴에서 비밀 주소를 다시 복사하고, .env 값 앞뒤 공백만 지운 뒤 briefing.py를 다시 돌려보면 금방 구분됩니다.
두 번째 현상은 Slack에 400이나 403이 뜨는 경우예요. 원인은 웹훅 URL이 줄바꿈으로 끊겼거나, 채널에 Incoming Webhook 앱 권한이 아직 안 붙은 경우가 많습니다. 브라우저에서 복사한 URL을 메모장에 한 줄로 붙여 보고, Slack 앱 설정에서 웹훅이 켜져 있는지 확인한 뒤 dry-run 없이 한 번만 보내보면 됩니다.
세 번째 현상은 시간이 9시간 밀리거나 어제 일정이 같이 섞이는 경우예요. 원인은 iCal 시간대를 코드에서 그냥 글자로만 읽고 로컬 시간으로 안 바꾼 겁니다. 이럴 땐 Codex에게 Asia/Seoul로 변환하는 줄만 고치라고 짧게 시키고, 바로 /review에서 timezone만 다시 보라고 하면 거의 정리됩니다.
다음엔 여기 하나만 더 붙이자
한 걸음 더
다음엔 Google Calendar Slack 아침 브리핑에 날씨 한 줄만 붙여도 체감이 확 올라갑니다. 비 오는 날 우산 챙기라는 문장 하나가 은근 오래 남거든요.