매일 아침 스탠드업, 직접 쓰고 계신가요?
팀에서 스탠드업 메시지 작성을 기본적으로 하고 있고, 최근에 하루동안 진행한 작업 내용들에 대해서 좀 정리가 되면 좋을 것 같다는 개인적인 필요가 생겨 고민이 있었습니다.
🤔 매일 반복되는 업무 루틴
팀에서 스탠드업 메시지 작성을 기본적으로 하고 있고, 최근에 하루동안 진행한 작업 내용들에 대해서 좀 정리가 되면 좋을 것 같다는 개인적인 필요가 생겨 고민이 있었습니다.
그래서 저의 하루는 비슷한 패턴으로 시작하고 끝납니다.
아침:
- Jira 열어서 어제 뭐 했는지 확인
- 진행 중인 업무, 해야할 업무 파악하기
- 오늘 할 일 파악하고 스탠드업 메시지 작성
저녁:
- 다시 Jira 열어서 오늘 뭐 했는지 확인
- 커밋 내역 정리
- 일일 업무 내용 확인
매일 10~15분씩, 일주일이면 1시간 넘게 같은 작업을 반복하고 있었습니다.
“이거 자동화하면 안 될까?”
그래서 만들었습니다. Claude Code를 활용한 개인 업무 자동화 도구.
❗️ Claude Code 스킬로 해결하기
Claude Code 스킬이란?
Claude Code에는 스킬(Skill) 이라는 기능이 있습니다. 마크다운 파일로 워크플로우를 정의하면, Claude가 그대로 실행해줍니다.
.claude/skills/
├── standup/
│ └── SKILL.md # 아침 스탠드업
└── daily-summary/
└── SKILL.md # 일일 요약
스킬 파일의 기본 구조는 이렇습니다:
# 스킬 이름
스킬 설명
## 사용법
/스킬명 # 실행
/스킬명 --dry-run # 테스트 (전송 안함)
## 실행 단계
### 1단계: 데이터 수집
- API 호출 방법
- 파싱 로직
### 2단계: 결과 생성
- 출력 형식
- 전송 방법
Claude는 이 마크다운을 읽고 각 단계를 순서대로 실행합니다.
🔧 두 가지 자동화 스킬
1. 아침 스탠드업 (standup)
매일 아침 08:00에 자동 실행됩니다.
| 항목 | 내용 |
|---|---|
| 실행 시간 | 매일 08:00 (launchd) |
| 어제 한 일 | Git 커밋, 완료된 Jira 이슈, 머지된 PR |
| 오늘 할 일 | 진행 중 이슈, 내 PR 상태, 리뷰할 PR |
| 특별 기능 | Flex 휴가 정보 (Chrome 연동) |
| 특별 기능 | 오늘의 조언 자동 생성 |
실제 출력 예시:
Daily Standup - 2026-01-02 (목)
👥 오늘 부재
• *** - 휴가
📅 Yesterday (12/31)
• Linker Desktop 리팩토링 6개 커밋
• Discriminated Union으로 타입 안전성 개선
• PR #28562 머지됨
📌 Today
진행 중인 이슈:
• D1-1325 [Linker] 기획 구현 (🔴 Highest, 15일째)
내 PR (리뷰 대기):
• #28576 이미 Approve됨 → 머지 가능
💡 오늘의 제안
1. PR #28576 머지하고 다음 작업 시작
2. D1-1325가 15일째 → 블로커 확인 필요
3. ***님 휴가로 D1 팀 리뷰 지연 예상
2. 일일 요약 (daily-summary)
매일 저녁 18:00에 자동 실행됩니다.
| 항목 | 내용 |
|---|---|
| 실행 시간 | 매일 18:00 (launchd) |
| 수집 내용 | 오늘 커밋, 변경된 Jira 이슈, PR 상태 |
| 용도 | 퇴근 전 하루 정리, 업무 일지 |
실제 출력 예시:
📊 2026-01-02 업무 요약
Git 커밋: 0건 | Jira: 0건 | PR: 2건
내가 만든 PR
• #28576 - Discriminated Union 타입 안전성 개선 (✅ Approved)
리뷰 요청받은 PR
• #28533 - embed-modules 컴포넌트 테스트 (***)
두 스킬의 차이점
| 구분 | standup | daily-summary |
|---|---|---|
| 실행 시간 | 아침 08:00 | 저녁 18:00 |
| 어제 한 일 | ✅ | ❌ |
| 오늘 할 일 | ✅ (상세) | ❌ |
| 오늘 한 일 | ❌ | ✅ |
| 휴가 정보 | ✅ (Chrome) | ❌ |
| 조언/제안 | ✅ | ❌ |
📡 데이터 수집 방법
Jira API
JQL로 원하는 이슈를 조회합니다.
# 오늘 변경된 내 이슈
curl -s -X POST \
"https://your-company.atlassian.net/rest/api/3/search/jql" \
-H "Authorization: Basic $(printf '%s' "$JIRA_EMAIL:$JIRA_API_TOKEN" | base64)" \
-H "Content-Type: application/json" \
-d '{"jql":"project = D1 AND assignee = currentUser() AND updated >= startOfDay()","fields":["key","summary","status","priority"]}'
Azure DevOps / GitHub PR
# Azure DevOps - 내 PR 목록
az repos pr list \
--organization "https://dev.azure.com/YourOrg" \
--project "your-project" \
--status active \
-o json
# GitHub - 내 PR 목록
gh pr list --author @me --state open --json number,title,reviewDecision
Chrome 연동으로 Flex 휴가 정보까지
여기서 재밌는 부분이 있습니다. Flex(근태 관리 시스템)는 API를 제공하지 않습니다. 그럼 어떻게 휴가 정보를 가져올까요?
Claude in Chrome 확장 프로그램을 사용합니다.
1. Chrome 탭 열기
2. Flex 로그인 페이지 이동
3. 로그인 상태 확인 (스크린샷)
4. 로그인 됨 → 근무 탭 → 구성원 근무 페이지 이동
5. 휴가 정보 파싱
Claude가 실제로 브라우저를 조작해서 정보를 수집합니다. API가 없는 서비스도 자동화할 수 있는 거죠.
단, 로그인이 필요한 서비스라서 로그인 상태 체크 로직이 필요합니다:
5. 로그인 상태 확인
- 로그인 폼이 보이면 → 로그인 안 됨
- 홈 화면이 보이면 → 로그인 됨
6-A. 로그인 안 됨:
- Flex 수집 스킵
- 메시지에 표시: "👥 오늘 부재: (로그인 필요 - 수동 확인)"
6-B. 로그인 됨:
- 휴가 정보 파싱
💡 조언 생성 로직
standup 스킬의 가장 유용한 기능은 오늘의 조언입니다.
수집된 데이터를 분석해서 작업 우선순위와 제약사항을 알려줍니다.
| 분석 항목 | 조건 | 조언 |
|---|---|---|
| 긴급 이슈 | priority = Highest/High | 🔴 오늘 우선 처리 |
| 오래된 이슈 | 진행 중 5일 이상 | ⚠️ 블로커 확인 필요 |
| 부재 영향 | 부재자가 PR 리뷰어 | ⏳ 리뷰 지연 예상 |
| 빠른 완료 | PR 리뷰 거의 완료 | ⚡ 리마인더로 빨리 머지 |
| 상호 리뷰 | 리뷰할 PR 있음 | 👀 먼저 리뷰하면 빨리 받음 |
예를 들어, 이런 조언이 생성됩니다:
💡 오늘의 제안
1. 🔴 D1-1325가 Highest + 15일째 → 오늘 집중
2. ⚡ PR #28576 Approve됨 → 바로 머지 가능
3. ⏳ ***님 휴가 → 리뷰 지연 예상
4. 👀 PR #28533 먼저 리뷰 → 내 PR 리뷰도 빨리
아침에 출근해서 이 메시지만 보면 오늘 뭘 먼저 해야 할지 바로 알 수 있습니다.
⚠️ 삽질 기록
1. -p "/스킬명" 이 안 된다
처음에는 이렇게 실행하려고 했습니다:
# 이렇게 하면 안 됩니다!
claude -p "/standup"
-p 모드에서는 /스킬명 형태가 스킬로 인식되지 않고 일반 텍스트로 처리됩니다.
해결책: 스킬 파일 내용을 직접 프롬프트로 전달
SKILL_FILE=".claude/skills/standup/SKILL.md"
claude -p "아래 스킬을 실행해주세요.
$(cat "$SKILL_FILE")" \
--chrome \
--allowedTools "Bash(git:*)" "Bash(curl:*)" "mcp__claude-in-chrome__*" \
--max-turns 50
2. Chrome MCP 자동화 시 로그인 문제
launchd로 자동 실행할 때, Chrome이 열려있어야 하고 Flex에 로그인되어 있어야 합니다.
세션이 만료되면 휴가 정보를 수집할 수 없습니다.
해결책: 로그인 상태 체크 후 스킵
로그인 안 됨:
- Flex 수집 스킵
- 메시지에 "(로그인 필요 - 수동 확인)" 표시
- 나머지(Jira, PR)는 정상 수집
이렇게 하면 로그인이 풀려도 나머지 정보는 정상적으로 받을 수 있습니다.
3. launchd 환경 변수 문제
launchd에서 실행할 때는 쉘 환경이 다릅니다. ~/.zshrc의 환경 변수가 로드되지 않습니다.
해결책: 스크립트에서 직접 로드
# 환경 변수 로드 (~/.zshrc에서)
if [ -f ~/.zshrc ]; then
source ~/.zshrc 2>/dev/null || true
fi
🎯 자동 실행 설정 (macOS launchd)
매일 자동으로 실행되게 설정합니다.
plist 파일:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.dev-assistant.standup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/path/to/dev-assistant/scripts/standup.sh</string>
</array>
<!-- 매일 08:00 실행 -->
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin</string>
</dict>
</dict>
</plist>
등록:
# 심볼릭 링크 생성
ln -sf /path/to/com.dev-assistant.standup.plist ~/Library/LaunchAgents/
# 로드
launchctl load ~/Library/LaunchAgents/com.dev-assistant.standup.plist
# 확인
launchctl list | grep dev-assistant
🎉 결과
절약되는 시간
- 아침 스탠드업 작성: ~10분 → 0분
- 저녁 일일 요약 작성: ~10분 → 0분
- 하루 ~20분, 한 달 ~7시간 절약
라고 하네요. 클로드가…
추가 효과
- 휴가자 파악이 빨라짐 → 리뷰 지연 미리 대응
- 오래된 이슈 알림 → 블로커 빨리 발견
- 매일 일관된 포맷 → 업무 기록 축적
마무리
전체 코드는 GitHub에서 확인할 수 있습니다:
https://github.com/crowwan/dev-assistant
본인 환경에 맞게 커스터마이징
SKILL.md→ 일반화된 템플릿 (공개)SKILL.local.md→ 개인 설정 (gitignore)
로컬 설정 파일을 만들어서 본인 환경(Jira 프로젝트, PR 플랫폼, 팀원 목록 등)에 맞게 수정하면 됩니다.
만든 지 얼마되지 않아서 도움을 얼마나 받을지 모르겠지만, 그래도 좀 기대 중…