나의 AI 비서 Sancho 만들기 - 4편 예약과 아침 브리핑
이 페이지 목차
목적준비물만드는 단계0단계 · 여는 말 (영상 0:05)1단계 · 새 세션 — 앞 편 이어서 (영상 0:24)2단계 · 예약 파일과 시계 (영상 0:49)3단계 · 알림 종과 예약 칸 (영상 1:35)4단계 · 말로 아침 브리핑 걸기 (영상 2:13)5단계 · 휴대폰으로 받기 — 텔레그램(선택) (영상 2:49)6단계 · Opus 로 검증하고 커밋 (영상 3:30)💡 설명자주 막히는 곳됐는지 확인하는 방법
개인 에이전트 AI 강좌 · 4 / 10편
© 2026 crazy4eu (cwkim83) · 강좌 자료 CC BY-NC-ND 4.0 · 코드 상업적 배포 금지 — 맨 아래 「저작권 · 라이선스」
💻 완성 소스: github.com/cwkim83/my-agent-Sancho (태그ep4) — 막히면 이 코드를 열어 비교해 보세요.
단계 번호는 영상 왼쪽 위 장면 이름과 같고, "영상 시각"은 편집본 기준입니다. 회색 상자는 Code 탭 입력창에 그대로 붙여 넣는 요청문입니다.
이전 편: 나의 AI 비서 Sancho 만들기 - 3편 프로젝트와 WBS 공정표 · 다음 편: 나의 AI 비서 Sancho 만들기 - 5편 메일 정리와 문서 만들기
핵심 요약
| 항목 | 내용 |
|---|---|
| 이 편이 끝나면 | 채팅으로 "매일 오전 일곱 시에 … 정리해서 알려줘" 하면 예약이 생기고, 시간이 되면 비서가 혼자 실행해 🔔 알림에 결과(표)가 쌓입니다. 컴퓨터가 꺼져서 놓친 예약은 켜지면 한 번만 실행. 텔레그램(선택)으로 휴대폰에도 받을 수 있습니다. |
| 필요한 것 | 3편을 끝낸 my-agent 폴더(또는 GitHub 의 ep3 태그) · Claude 유료 요금제 · Claude 데스크톱 앱 · (선택) 텔레그램 |
| 걸린 시간 | 실제 제작 약 64분(기다림 포함) → 편집본 4분 35초 |
| 요청문 | 6개 |
| 난이도 | 중 |
| 모델 | 만들기 Sonnet 5.5 · 검증 Opus 5.5 (6단계에서만 바꿈) |
한 줄 요약 — 예약도 파일 하나(data/schedule.json)로. 서버 시계가 30초마다 보다가 때가 되면 비서를 깨우고, 결과는 🔔 알림과 일지에 쌓입니다. 놓친 예약은 켜진 뒤 딱 한 번만.
4편 · 예약과 아침 브리핑
목적
말을 걸어야만 일하던 비서를, 정해진 시각에 스스로 일하는 비서로 만듭니다. 매일 아침 출근하면 브리핑이 이미 와 있게 합니다.
준비물
- 3편을 끝낸
my-agent폴더 — 없으면 GitHub 에서 받은 뒤ep3태그로 시작합니다 - Claude 데스크톱 앱 Code 탭, 모델 Sonnet 5.5
- (선택) 텔레그램 앱 — 휴대폰으로 받고 싶을 때만
만드는 단계
0단계 · 여는 말 (영상 0:05)

- 위 그림은 이 편에서 만든 "아침 7시 브리핑" 예약의 결과입니다. 오늘 일정 · 마감 임박 할 일 · 지연된 공정표 작업을 표로 정리해 🔔 알림으로 받았습니다.
1단계 · 새 세션 — 앞 편 이어서 (영상 0:24)

- + 새 세션 — 폴더·모델·권한 모드는 지난번 설정이 그대로 남아 있습니다. 워크트리만 꺼져 있는지 확인합니다.
- 오른쪽 위 지구본 단추로 브라우저 패널을 엽니다.
CLAUDE.md 와 docs/blueprint.md 를 읽고 ep3 까지를 세 줄로 요약해 줘. 서버를 켜 줘.
브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘. 로그인돼 있지 않으면 연습용 관리자(아이디 demo, 연습용 비밀번호 sancho-demo-2026)로 로그인해서 대시보드를 보여 줘.
- "탭을 하나만, 화면 앞 탭에서" 를 이번 편부터 요청문마다 붙였습니다. 3편에서 비서가 뒤쪽 탭에서 시연해 화면에 안 잡힌 일이 있었기 때문입니다.
2단계 · 예약 파일과 시계 (영상 0:49)

예약 기능을 만들어 줘.
- 예약은 data/schedule.json: { id, 이름, 언제: daily(HH:MM) | weekly(요일, HH:MM) | once(YYYY-MM-DD HH:MM) | every(N분), 지시문, 켬/끔, 마지막실행 }
- 서버가 30초마다 시계를 보고 때가 된 예약의 지시문을 Claude Code 에 보낸다(대화창과 같은 두뇌, 새 세션).
- 결과는 data/journal/<날짜>.md 에 쌓고, 🔔 알림(notices)에 제목·요약·시각으로 넣는다.
- 컴퓨터가 꺼져 있어서 놓친 예약은 켜진 뒤 한 번만 실행(여러 번 몰아서 실행하지 않게).
- 같은 예약이 겹쳐 돌지 않게, 실행 중이면 건너뛴다.
- 비서가 말로 예약을 만들 수 있게 시스템 프롬프트에 schedule.json 형식을 적는다.
- selftest: 시각 계산(daily·weekly·once·every), 놓친 회차 한 번만, 겹침 방지.
다 되면 node selftest.js 로 돌려 줘.
- 놓친 예약은 한 번만 — 컴퓨터를 꺼 둔 사이 아침 7시가 지나갔다면 켜졌을 때 딱 한 번. 밀린 회차를 몰아서 돌리면 사용량만 버립니다(파이스 운영에서 실제로 겪은 문제).
- 비서는 겹침 방지 코드를 일부러 빼고 점검을 돌려서 점검이 정말 잡아내는지까지 확인했습니다. 점검 367개.
- 비서가 정한 것: 새로 만든 예약은 바로 실행하지 않고 지금부터 시간을 셉니다(오후 3시에 만든 아침 9시 예약이 바로 돌지 않게).
3단계 · 알림 종과 예약 칸 (영상 1:35)

위쪽에 🔔 알림 단추(안 읽은 수 배지) → 펼치면 알림 목록, 누르면 결과 전체.
채팅 왼쪽에 "예약" 칸: 예약 목록, 켬/끔 스위치, 지금 실행(▶) 버튼, 삭제.
대시보드 알림 카드 숫자와 연결.
다 되면 서버를 다시 켜고 🔔 알림 단추와 예약 칸을 보여 줘. 브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘.
- 비서는 진짜 데이터를 건드리지 않으려고 가짜 두뇌를 단 임시 서버를 따로 켜서 화면을 시험했습니다(▶ 실행 → 배지 3 → 4 → 결과 창). 휴대폰 폭에서 머리글이 꺾이는 것도 스스로 고쳤습니다.
- 긴 한글 답이 조각 경계에서 깨지던 문제(채팅에도 있던 문제)를 같이 찾아 고쳤습니다. 점검 401개.
4단계 · 말로 아침 브리핑 걸기 (영상 2:13)

이제 말로 아침 브리핑을 걸어 볼게. 브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘.
브라우저 패널의 채팅에서 "매일 오전 일곱 시에 오늘 일정, 7일 안 마감 할 일, 지연된 공정표 작업을 표로 정리해서 알려줘" 를 보내고, 예약 칸에 생긴 예약의 ▶ 지금 실행을 눌러 🔔 배지가 뜨고 결과 표가 열리는 것까지 보여 줘.
- 결과: 26초 만에 "예약 추가: 매일 07:00 아침 7시 브리핑" → 예약 칸에 생김(위 그림) → ▶ 지금 실행 → 23초 뒤 🔔 2 → 3 → 열어 보면 표 3개(아래 그림).

- 1편에서 "보고서는 표로 받는 걸 좋아해"라고 기억시킨 것이 여기서도 반영됩니다.
- 이 예약은 진짜로 켜져 있어서, 다음 날 07:00 에 서버가 켜져 있으면 또 돕니다. 원치 않으면 예약 칸에서 스위치를 끄거나 ✕.
5단계 · 휴대폰으로 받기 — 텔레그램(선택) (영상 2:49)

설정 화면에 "텔레그램 배달(선택)" 칸을 만들어 줘: 봇 토큰, 채팅 ID, 시험 보내기 버튼.
값은 data/settings.json 에만 저장하고 화면에는 가려서 보여 줘(****).
예약에 "휴대폰으로도 보내기" 체크가 켜져 있으면 결과 요약을 텔레그램으로 보낸다.
봇을 만드는 방법(BotFather)을 설정 칸 옆 도움말로 쉽게 적어 줘.
실제 토큰은 없으니 아무것도 입력하지 마. 다 되면 서버를 다시 켜고 설정 화면의 텔레그램 칸(빈 칸·가림 표시·도움말)을 보여 주고, 토큰이 비어 있을 때 시험 보내기를 누르면 안내가 뜨는지만 확인해 줘. 브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘.
- 토큰은 비밀번호와 같습니다. 대화창에 붙여 넣지 말고 설정 화면에 직접 넣습니다. 비서(두뇌)도 이 파일을 읽지 못하게 막았습니다.
- 영상에서는 토큰을 넣지 않고, 빈 칸에서 시험 보내기 → 안내 문구만 확인했습니다. 오른쪽 도움말에 봇 만드는 방법 7단계(BotFather →
/newbot→ 토큰 → 봇에게 먼저 말 걸기 →@userinfobot으로 채팅 ID → 저장 → 시험 보내기). - 예약 칸의 📱 체크를 켠 예약만 휴대폰으로 보냅니다(결과 요약 400자). 점검 430개.
- 비서의 지적: 청사진의 "회사 밖으로 자료 보내지 않기"와 부딪히는 선택 기능이라, 예약마다 직접 켠 것만 나가게 했습니다. 8편 안전장치에서 다시 다룹니다.
6단계 · Opus 로 검증하고 커밋 (영상 3:30)

전송 버튼 옆 모델을 Opus 5.5 로 바꾼 뒤 보냅니다.
4편 검증: 시각 계산의 경계(자정, 일요일, 월말), 서버를 껐다 켰을 때 놓친 회차가 한 번만 도는지, 예약 실행이 실패하면 알림에 오류가 남는지, 텔레그램 토큰이 로그·화면·git 어디에도 새지 않는지. 문제 목록 → 수정 → selftest → 커밋, ep4 태그.
그리고 예약 실행 때 비서가 "platform 스킬 문서는 읽기 권한이 없어 열지 못했다"고 했는데, 원인도 확인해서 고쳐 줘.
- 마지막 줄은 4단계 결과에 비서가 남긴 "스킬 문서를 못 읽었다"는 말을 보고 덧붙였습니다. 결과를 끝까지 읽으면 검증할 거리가 보입니다.
- 찾아 고친 것: ① 비서가 이 PC 의 Claude Code 설정을 통째로 물려받고 있었음 — 개발용 지침·훅·다른 앱 연결 약 200개가 실려 가서 스킬 문서를 엉뚱한 곳에서 찾다 거절됨 → 비서를 띄울 때 싣지 않고 도구를 7개로 고정 ② 실행 도중 서버가 꺼진 예약이 아무 말 없이 사라짐 → 다시 켜면 알림 ③ 컴퓨터 시계를 앞으로 잘못 맞췄다 되돌리면 예약이 멈춤 ④ 토큰 칸이 비밀번호 칸이라 브라우저가 클라우드에 저장할 수 있음 → 일반 칸으로. 점검 457개, 커밋하고
ep4태그. - 시각 경계(자정·일요일·월말·연말·윤년)는 원래 맞았고 점검 13개를 더했습니다.
- 검증이 끝나면 다시 Sonnet 5.5 로 돌려 둡니다.
💡 설명
- 예약(
schedule.json): 언제(매일·매주·한 번·N분마다)와 무엇(지시문)을 적은 파일. 서버 시계가 30초마다 봅니다. - 일지(
data/journal/날짜.md): 예약 결과 전체가 쌓이는 곳. 🔔 알림에는 요약이 갑니다. - 놓친 회차: 컴퓨터가 꺼져 있던 동안 지나간 예약. 켜진 뒤 한 번만 실행합니다.
- 겹침 방지: 같은 예약이 아직 실행 중이면 다음 회차는 건너뜁니다.
- 텔레그램 봇 토큰: 봇을 움직이는 열쇠. 비밀번호처럼 다룹니다.
- 설정 상속: 비서가 실행될 때 이 PC 의 Claude Code 설정을 물려받는 것. 개발용 도구가 비서에게 새지 않게 끊었습니다.
자주 막히는 곳
- 예약이 안 돈다 → 서버가 켜져 있어야 돕니다(서버가 시계). 예약 칸에서 스위치가 켜져 있는지, ▶ 지금 실행으로 먼저 시험합니다.
- 방금 만든 예약이 바로 안 돈다 → 정상입니다. 새 예약은 지금부터 시간을 셉니다.
- 결과에 "권한이 없어 못 읽었다"가 있다 → 영상 6단계처럼 "원인을 확인해서 고쳐 줘" 를 검증 요청에 넣습니다.
- 텔레그램이 안 온다 → 봇에게 먼저 아무 말이나 걸었는지(시작), 채팅 ID 가 맞는지 확인. 알림에 이유가 남습니다.
- 명령이 오래 멈춘다 → 비서가
python3를 부른 경우일 수 있습니다(이 PC 에서는 멈춤). "python3 말고 node 나 python 으로 해 줘".
됐는지 확인하는 방법
채팅 "매일 오전 7시에 … 알려줘" → 예약 칸에 생긴다
[ ]
지금 실행 → 🔔 배지가 오르고, 누르면 결과가 열린다
서버를 껐다가 예약 시각이 지난 뒤 켜면 한 번만 실행된다
설정의 텔레그램 칸에서 토큰이
****로 가려진다node selftest.js→ 모두 통과(영상 기준 457개),git tag에ep4
스스로 점검
- 놓친 예약을 몰아서 돌리면 안 되는 이유를 안다
- 새 예약이 바로 안 도는 이유를 설명할 수 있다
- 토큰을 대화창에 붙여 넣지 않았다
- 결과에 남은 이상한 말을 검증 요청에 덧붙여 봤다
- Opus 로 검증하고
ep4태그로 커밋했다