코딩 에이전트 쓰는 법을 이미 아는데 코칭까지 받을 이유가 있을까요? 없다고 생각했습니다. 그냥 제품이 궁금해서 붙은 거였어요.
빈 폴더에서 시작해 세 시간쯤 뒤에 매일 아침 저절로 도는 웹 앱이 나왔습니다. 혼자 부딪히면서 만들어도 결국 나왔을 거예요. 다만 훨씬 많이 헤맸겠죠. 코칭이 한 일은 그 헤맬 자리를 앞으로 당겨서 미리 걷어낸 것이었습니다. 묻고, 고르게 하고, 목표를 문장으로 못 박고 나서야 손을 대더라고요.
가진 건 슬랙 스레드에 정리해 둔 출처 링크 목록이 전부였어요. 격주로 도는 AI 에이전트 스터디에서 발표를 맡게 돼서, 매일 아침 소식을 카드로 훑고 그중 몇 개를 골라 발표하는 걸 만들고 싶었습니다. 첫 요청은 이렇게 보냈습니다.
보통 여기서 바로 만들기가 시작되죠. 안 그랬습니다.
1. 만들기 전에 묻고, 고르게 합니다
코치가 네 가지를 나눠서 물었어요. 지금 어디까지 되어 있는지, 재료가 뭔지, 결과물을 어디서 볼 건지, 뭘 보면 다 됐다고 할 건지. 한 응답에 질문은 하나씩만 왔습니다.
시시해 보이는데 세 번째에서 걸렸어요. 매일 만들어진 카드를 어디서 보고 싶으냐고, 슬랙 DM이나 노션 데이터베이스, 로컬에서 여는 HTML 페이지 같은 선택지를 늘어놓고 묻길래 답하다 보니, 제가 원한 게 웹으로 배포된 앱이라는 게 그제야 말로 나왔습니다. 그 질문이 없었으면 그 말을 한참 뒤에야 꺼냈을 것 같아요.
그다음이 더 중요했는데, 방향 세 가지를 장점과 제약까지 적어서 늘어놓고 고르라고 했습니다.
코치 추천은 1번이었어요. 저는 3번을 골랐습니다.
어... 음... 근데 일단 방향 3로 하자. 일단 API를 쓸 여력이 안되서 말이야....
추천을 물릴 수 있게 만들어 둔 게 이 단계의 핵심 입니다. 코치는 바로 받아들이고, 나중에 여력이 생기면 같은 스크립트를 그대로 1번으로 옮길 수 있게 파일 구조를 호환되게 잡겠다고 덧붙였어요. 판단은 제 쪽에 두되, 그 판단의 대가는 미리 알려주는 식이었습니다.
대신 이건 제가 제약을 읽고 감수한 거예요. 아침에 맥이 꺼져 있으면 그날 카드는 안 쌓입니다.
2. 목표를 세 줄로 못 박고 일곱 조각으로 쪼갭니다
방향이 정해지자 완료 기준이 문장으로 나왔습니다. 이게 파일에 박혔어요.
9월 9일 스터디에서 실제 주소를 열어 진짜 수집된 카드로 만든 발표를 진행할 수 있다.
카드와 발표가 날짜·회차별로 남아 다시 열어볼 수 있다.
카드에 핵심 내용·실전 팁·원문 링크가 있고 수집이 빈 날에도 페이지가 깨지지 않는다.
그리고 이 세 줄에 닿기 위한 체크포인트 일곱 개가 나왔습니다. 각 체크포인트에는 할 일, 그걸 하는 이유, 쓸 실제 자료, 그리고 통과 조건이 미리 적혀 있어요.
마지막 항목이 제일 중요합니다. "카드 화면을 만든다"가 아니라 이렇게 적혀 있어요.
실제 카드가 화면에 보이고, 빈 날짜도 안내 문구로 깨지지 않으면 끝나요.
뭘 만들지가 아니라 뭘 확인하면 끝인지를 먼저 쓴 겁니다. 시작할 때는 형식적으로 보였는데, 끝에 가서 이 세 줄이 그대로 판정 기준이 됐어요. "된 것 같다"가 아니라 세 줄을 배포된 화면에 하나씩 대고 확인했습니다.
그런데 다 끝나고 보니 더 크게 작용한 건 "이유" 칸이었어요. 일곱 개 중 다섯 개가 "이걸 먼저 안 해 두면 나중에 되돌아온다"는 말이었거든요.
출처마다 형식이 달라서 먼저 갈라두지 않으면 수집기를 만들다 계속 되돌아와요.
요약 전에 원문이 제대로 잡히는지 봐야 카드 품질 문제가 수집 탓인지 요약 탓인지 구분돼요.
배포 전에 눈으로 봐야 간격·정렬·빈 날 처리 같은 문제를 싸게 고쳐요.
손으로 돌리면 며칠 안에 빠지기 시작해요.
혼자 만들었어도 저 자리에 결국 도착했을 겁니다. 다만 순서를 몸으로 배우고 나서 도착했겠죠. 수집기를 절반쯤 만들다 출처 형식이 제각각인 걸 알고 되돌아오고, 카드가 이상한데 수집 탓인지 요약 탓인지 몰라 한참 붙들고요. 코칭이 한 건 그 시행착오를 앞단으로 당겨 미리 없앤 겁니다. 없던 실력을 준 게 아니라요.
3. 통과 조건이 검증 항목을 미리 정해 줍니다
여기가 제일 놀랐던 부분이에요. 통과 조건이 미리 있으니까 검증이 끝나고 하는 요식이 아니라 단계 안에 들어와 있더라고요. 그때그때 시키지 않아도 승인해 둔 조건대로 이런 게 돌아갔습니다.
- 카드에 적힌 숫자 아흔여덟 개를 스크립트로 원문과 대조했어요. 원문에서 그대로 못 찾은 건 네 건인데 전부 한국어 단위로 바꿔 쓴 것이라 값은 같았습니다. 그날 카드 스물세 장 기준이고, 본문을 못 받은 여덟 장은 대조할 수치가 거의 없었어요.
- 출처마다 수집한 건수를 실제 피드·페이지와 나란히 놓 고 맞췄어요. 안 걸린 출처는 로그에 이유가 남고요.
- 카드가 0장인 날짜를 일부러 만들어 넣고 페이지가 깨지는지 봤어요.
- 예약 실행 환경을 실제와 똑같이 비워서 아침 스크립트를 통째로 돌려 봤습니다.
마지막 것에서 진짜가 나왔어요.
📎 launchd는 맥에 기본으로 들어 있는 예약 실행 도구예요. 정해진 시각에 스크립트를 돌려 줍니다. (설명서)
예약 실행은 환경변수를 거의 물려주지 않습니다. 그런데 코딩 에이전트는 USER 값이 있어야 로그인 정보를 읽어요. 그래서 예약으로 돌면 카드 만드는 단계에서 죽습니다. 손으로 돌릴 땐 절대 안 나오는 문제고, 다음 날 아침 여덟 시에야 조용히 드러났을 거예요.
이렇게 나온 버그를 제가 묻기 전에 그쪽이 먼저 들고 왔습니다. 제가 세어 본 기준으로 일곱 개 중 여섯 개고, 자잘한 것까지 넣으면 더 늘어나요. 그중 한 번은 이렇게 말하고 시작하더라고요.
이건 제가 테스트하다가 발견한 제 버그예요.
4. 멈추는 자리마다 되돌릴 기회가 생깁니다
단계가 끝나면 결과와 뭘 어떻게 확인했는지