| 관점 | 내용 |
|---|---|
| Problem | 개인 일지 도구로는 팀 단위 작업 추적/보안/리포팅이 불가능 |
| Solution | 보안 강화(마스킹/필터/접근제어) + Git 중앙 repo + 팀 리포트 |
| Function UX Effect | init --team 1분 온보딩 → 자동 팀 일지 수집 → claude-diary team으로 팀 현황 파악 |
| Core Value | 팀 개발 활동의 가시성과 보안을 동시에 확보 |
Claude Code Working Diary v4.0 작성일: 2026-03-17 상태: ✅ Done 선행 조건: Phase A + Phase B 완료
개인 도구(A) + 오픈소스 도구(B)를 기반으로, 팀 단위로 작업 일지를 수집, 보호, 분석할 수 있는 기능을 추가한다.
- 보안 최우선 — 팀원의 민감 정보 보호, 접근 제어, opt-out 보장
- 서버리스 우선 — Git + Notion으로 시작, 자체 서버는 향후 확장
- 프로젝트 중심 — 개인이 아닌 프로젝트 단위로 활동을 조망
민감한 파일 경로를 자동 필터링.
~/.config/claude-diary/config.json:
{
"security": {
"mask_paths": [
"**/credentials/**",
"**/secrets/**",
"**/\.env*",
"**/*secret*",
"**/*credential*"
]
}
}동작:
원본: /srv/payment/src/credentials/StripeKeyManager.java
마스킹: /srv/payment/src/****/****
- glob 패턴 매칭
- 파일명과 디렉토리명 모두 마스킹
- 팀 config에서 공통 규칙 설정 가능
프롬프트/요약에서 특정 키워드를 포함한 문장 제거.
~/.config/claude-diary/config.json:
{
"security": {
"content_filters": [
"salary", "compensation", "급여", "연봉",
"personal", "private", "개인정보"
],
"filter_mode": "redact"
}
}filter_mode:
redact: 해당 문장을[REDACTED]로 치환skip: 해당 키워드가 포함된 세션 전체를 기록하지 않음
팀 일지에 대한 열람 권한 계층.
| 역할 | 본인 일지 | 타인 일지 (요약) | 타인 일지 (상세) | 팀 통계 |
|---|---|---|---|---|
| member | ✅ 전체 | ✅ 프로젝트/카테고리만 | ❌ | ✅ |
| lead | ✅ 전체 | ✅ 전체 | ✅ 같은 프로젝트만 | ✅ |
| admin | ✅ 전체 | ✅ 전체 | ✅ 전체 | ✅ |
구현 방식:
- Git repo: GitHub/GitLab 팀 권한으로 제어
- Notion DB: Notion 권한 시스템 활용
- CLI:
claude-diary team명령 시 config의role기반 필터링
특정 세션을 기록에서 제외하는 방법.
방법 1 — 환경변수:
# 이 세션은 기록하지 않음
export CLAUDE_DIARY_SKIP=1
claude # 세션 시작방법 2 — 프로젝트별 제외:
// ~/.config/claude-diary/config.json
{
"skip_projects": [
"personal-notes",
"salary-calculator"
]
}방법 3 — 대화형 제외:
# 직전 세션 삭제
claude-diary delete --last
# 특정 세션 삭제
claude-diary delete --session abc12345팀 환경에서 추가 패턴:
{
"security": {
"additional_secret_patterns": [
"internal\\.company\\.com",
"\\b\\d{3}-\\d{2}-\\d{4}\\b",
"사번|employee.?id"
]
}
}- 팀 admin이 공통 패턴을 설정
- 팀 config가 개인 config보다 우선 (보안 규칙은 강화만 가능)
team-diary-repo/ ← 팀 공유 Git 저장소
├── .team-config.json ← 팀 공통 설정
├── members/
│ ├── sol/
│ │ ├── 2026-03-17.md
│ │ └── 2026-03-18.md
│ ├── alex/
│ │ ├── 2026-03-17.md
│ │ └── 2026-03-18.md
│ └── ...
├── weekly/
│ ├── team-W12_2026-03-16.md ← 팀 주간 리포트
│ └── team-W13_2026-03-23.md
└── dashboard/
└── index.html ← 팀 HTML 대시보드
동작 흐름:
세션 종료
│
▼
core.py (코어 파이프라인)
├── ~/working-diary/2026-03-17.md (개인 로컬)
│
└── GitHub exporter
├── 보안 필터 적용 (마스킹, 콘텐츠 필터)
├── members/sol/2026-03-17.md에 push
└── (접근 제어는 GitHub 권한으로)
팀 설정 파일 (.team-config.json):
{
"team_name": "backend-team",
"members": ["sol", "alex", "jordan"],
"security": {
"mask_paths": ["**/credentials/**"],
"content_filters": ["salary"],
"required_secret_scan": true
},
"roles": {
"sol": "admin",
"alex": "lead",
"jordan": "member"
}
}Git repo와 병행 가능.
Notion DB 구조:
| 컬럼 | 타입 | 설명 |
|---|---|---|
| 날짜 | Date | 자동 |
| 작성자 | Select | 팀원 이름 |
| 프로젝트 | Select | cwd 기반 |
| 카테고리 | Multi-select | 자동 분류 |
| 작업 요약 | Rich Text | summary_hints |
| 변경량 | Number | +/- lines |
| Git 커밋 | Rich Text | 커밋 목록 |
| 수정 파일 수 | Number | 파일 개수 |
- 팀 Notion workspace에 공유 DB 생성
- 각 팀원의 exporter가 같은 DB에 기록
- Notion의 필터/정렬/뷰로 팀 분석
현재는 plan에만 기록. 필요 시 구현.
- FastAPI 경량 서버
- REST API: POST /entries, GET /stats, GET /dashboard
- 인증: API key 또는 OAuth
- 저장: SQLite → PostgreSQL
- 배포: Docker 컨테이너
# 팀 전체 이번 주 요약
claude-diary team
# 프로젝트별 팀 활동
claude-diary team --project ai-chatbot
# 특정 팀원의 활동 (권한에 따라 상세도 다름)
claude-diary team --member alex
# 팀 주간 리포트 생성
claude-diary team weekly
# 팀 월간 리포트
claude-diary team monthly --month 2026-03╔══════════════════════════════════════════════════╗
║ 📊 Team Stats — backend-team | W12 ║
╠══════════════════════════════════════════════════╣
║ ║
║ 👥 팀원: 3 | 세션: 23 | +2,481 / -567 lines ║
║ ║
║ 📁 프로젝트별 ║
║ ai-chatbot ████████████░░░░ 14 (sol:8 alex:4 jordan:2)
║ blog ████░░░░░░░░░░░░ 5 (sol:3 alex:2)
║ infra ████░░░░░░░░░░░░ 4 (jordan:4)
║ ║
║ 👤 팀원별 ║
║ sol ████████████░░░░ 12 feature(7) bugfix(3) refactor(2)
║ alex ████████░░░░░░░░ 7 feature(3) docs(2) bugfix(2)
║ jordan ██████░░░░░░░░░░ 4 config(3) feature(1)
║ ║
╚══════════════════════════════════════════════════╝
# 📊 팀 주간 리포트 — backend-team W12
### 2026-03-16 ~ 2026-03-22
## 📈 주간 요약
| 항목 | 수치 |
|------|------|
| 총 세션 | **23** |
| 활동 팀원 | **3** / 3 |
| 관련 프로젝트 | **3** |
| 코드 변경량 | **+2,481 / -567** |
## 👤 팀원별 활동
### sol (12세션)
- 🏷️ feature(7) bugfix(3) refactor(2)
- 📁 ai-chatbot, blog
- 주요: Circuit breaker 패턴 구현, 로그인 버그 수정
### alex (7세션)
- 🏷️ feature(3) docs(2) bugfix(2)
- 📁 ai-chatbot, blog
- 주요: API 문서 업데이트, 페이지네이션 구현
### jordan (4세션)
- 🏷️ config(3) feature(1)
- 📁 infra
- 주요: CI/CD 파이프라인 설정, 모니터링 추가# 1. admin이 팀 diary repo 생성
gh repo create team-diary --private
# 2. 각 팀원이 설치 + 팀 연결
pip install claude-diary
claude-diary init --team https://github.com/org/team-diary.git
# init --team이 하는 일:
# ✓ 개인 설정 (Phase A init과 동일)
# ✓ 팀 repo clone
# ✓ .team-config.json에서 팀 보안 규칙 로드
# ✓ GitHub exporter 자동 활성화
# ✓ 팀원 이름 설정# admin이 팀 config에 추가
claude-diary team add-member --name newbie --role member
# newbie가 자기 PC에서
claude-diary init --team https://github.com/org/team-diary.git1. 경로 마스킹 (glob 패턴 기반)
2. 콘텐츠 필터 (키워드 기반 redact/skip)
3. 세션 opt-out (환경변수, 프로젝트별, 대화형 삭제)
4. 팀 시크릿 패턴 확장
5. 접근 제어 역할 시스템 (member/lead/admin)
1. GitHub exporter 확장 (팀 repo 구조)
2. .team-config.json 스키마 정의
3. 보안 필터 → push 파이프라인 통합
4. claude-diary init --team 명령어
5. claude-diary team 기본 명령어 (요약, 프로젝트별)
1. claude-diary team stats (터미널 대시보드)
2. claude-diary team weekly/monthly (마크다운 리포트)
3. 팀원별 활동 조회 (권한 기반 필터링)
4. 프로젝트 중심 뷰
5. 팀 HTML 대시보드 (Phase A dashboard 확장)
1. Notion exporter 팀 모드 (공유 DB)
2. 작성자 컬럼 자동 설정
3. 팀 Notion 뷰 가이드 문서
1. FastAPI 서버 설계
2. REST API 구현
3. 웹 대시보드
4. Docker 이미지
5. 인증/인가
팀 보안 규칙 (.team-config.json)
↓ (강화만 가능, 약화 불가)
개인 보안 규칙 (~/.config/claude-diary/config.json)
↓ (추가 규칙 가능)
기본 시크릿 스캔 (항상 활성)
- 팀 admin이
mask_paths에 추가한 경로는 개인이 해제할 수 없음 - 개인은 추가 마스킹만 가능
- 시크릿 스캔은 비활성화 불가
- auto push: 세션 종료마다 자동 (기본, 권장)
- manual push:
claude-diary team sync로 수동 - batch push: 하루 1회 일괄 (cron/scheduler)
config에서 선택:
{
"team": {
"push_strategy": "auto"
}
}- 각 팀원은
members/{name}/하위에만 쓰기 - 동일 파일 수정 불가 → 충돌 원천 차단
- 팀 리포트(
weekly/)는 admin만 생성
- 민감 경로가 자동 마스킹됨
- 콘텐츠 필터가 키워드 기반으로 동작함
-
CLAUDE_DIARY_SKIP=1로 세션 제외 가능 -
claude-diary delete --last로 직전 세션 삭제 가능 - 팀 Git repo에 각 팀원 일지가 자동 push됨
-
.team-config.json보안 규칙이 개인 설정보다 우선 적용됨 -
claude-diary team명령으로 팀 활동 조회 가능 -
claude-diary team weekly로 팀 주간 리포트 생성 가능 - member/lead/admin 역할별 접근 범위가 다름
-
claude-diary init --team으로 1분 내 팀 온보딩 완료 - 한국어/영어 모두 동작
전체 기능 유지: 0건 deferred.
Phase C에서 정의한 모든 기능은 유지 대상으로 확정됨.
검토 사항:
- 3-tier 접근 제어 (member/lead/admin)가 과도한지 논의됨 — Git repo 권한만으로 충분할 수 있으나, Notion DB나 향후 자체 서버 시나리오에서는 Git 권한으로 커버 불가능하므로 유지 결정.
- Phase A:
src/claude_diary/패키지 구조를 그대로 사용. GitHub exporter를 팀 repo push에 재활용. - Phase B:
pip install claude-diary패키지 배포 기반, secret scanner 모듈, audit 기능 활용.
- 팀 config (
.team-config.json)는 개인 config (~/.config/claude-diary/config.json)를 override함. - 보안은 강화만 가능 — 팀에서 설정한 마스킹/필터/시크릿 패턴은 개인이 해제할 수 없고, 개인은 추가 규칙만 설정 가능.
- Phase A에서 구현한 GitHub exporter를 팀 repo push에 그대로 재사용.
- 팀 모드에서는 보안 필터 파이프라인을 push 전에 추가 적용.
-
기능 우선순위: 보안 > 프로젝트 뷰 > 팀 리포트 = 대시보드
- 팀 도구에서 보안이 확보되지 않으면 아무도 채택하지 않음. 보안이 반드시 먼저.
-
아키텍처 진행 순서: Git repo → Notion → 자체 서버
- Git repo는 서버리스이고 팀 대부분이 이미 사용 중. 가장 낮은 진입 장벽.
- Notion은 비개발 직군과의 공유에 유용하므로 선택 옵션으로 추가.
- 자체 서버는 YAGNI 원칙에 따라 plan에만 기록하고, 실제 필요가 확인될 때까지 구현 보류.
-
Opt-out은 팀 채택의 핵심
- 팀원이 "감시당한다"고 느끼면 도구 자체를 거부함.
- 환경변수/프로젝트별/대화형 삭제 등 다양한 opt-out 경로를 보장해야 자발적 채택이 가능.
-
하이브리드 아키텍처 + 자체 서버 YAGNI
- Git + Notion 하이브리드로 대부분의 팀 시나리오를 커버 가능.
- 자체 서버는 수십 명 이상 규모에서만 의미가 있으므로, 현재 단계에서는 구현하지 않음.