Claude 13분 읽기

매일 아침 스탠드업, 직접 쓰고 계신가요?

팀에서 스탠드업 메시지 작성을 기본적으로 하고 있고, 최근에 하루동안 진행한 작업 내용들에 대해서 좀 정리가 되면 좋을 것 같다는 개인적인 필요가 생겨 고민이 있었습니다.

🤔 매일 반복되는 업무 루틴

팀에서 스탠드업 메시지 작성을 기본적으로 하고 있고, 최근에 하루동안 진행한 작업 내용들에 대해서 좀 정리가 되면 좋을 것 같다는 개인적인 필요가 생겨 고민이 있었습니다.

그래서 저의 하루는 비슷한 패턴으로 시작하고 끝납니다.

아침:

  • 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 컴포넌트 테스트 (***)

두 스킬의 차이점

구분standupdaily-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

본인 환경에 맞게 커스터마이징

  1. SKILL.md → 일반화된 템플릿 (공개)
  2. SKILL.local.md → 개인 설정 (gitignore)

로컬 설정 파일을 만들어서 본인 환경(Jira 프로젝트, PR 플랫폼, 팀원 목록 등)에 맞게 수정하면 됩니다.

만든 지 얼마되지 않아서 도움을 얼마나 받을지 모르겠지만, 그래도 좀 기대 중…