feat(hook): 축 2 hook 확장안 구축 — agent_sync.sh + SessionStart hook 편입 (PD님 승인)
- scripts/agent_sync.sh: cwd 기반 부서 판단 → 부서 .claude/agents/*.md 를 cwd .claude/agents/ 로 자동 복제 - 실증 A 실패(상향 탐색 차단 확정) 후속 — hook 확장안으로 전환 결정 - SessionStart hook 3단(fetch·agent_sync·inbox_scan) 체계 확정 - 루트·개발실·기획실 settings.json 동일 복제 (3중 SOT 유지) - 동작 검증 완료: 개발실 3개·기획실 7개 에이전트 동기화 OK - 제약: 첫 세션은 여전히 부서 에이전트 미로드 (다음 세션부터 유효) — 감시자안 별도 검토 중 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f185dd30fd
commit
3ffb03e22b
|
|
@ -81,6 +81,10 @@
|
|||
"type": "command",
|
||||
"command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/agent_sync.sh 2>/dev/null || true"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/inbox_scan.sh 2>/dev/null || true"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
#!/bin/bash
|
||||
# SessionStart hook 확장: 부서 에이전트를 현재 워크트리 .claude/agents/ 로 자동 복제
|
||||
# 축 2 hook 확장안 (2026-04-15 PD님 승인)
|
||||
#
|
||||
# 동작:
|
||||
# 1. cwd 기반 부서 판단 (기획실/개발실/PM)
|
||||
# 2. 해당 부서의 .claude/agents/*.md 를 cwd의 .claude/agents/ 로 복사
|
||||
# 3. 이미 같은 내용이면 skip (cmp -s 비교)
|
||||
#
|
||||
# 제약:
|
||||
# - hook은 세션 이미 시작된 후 실행 → 그 세션의 이미 로드된 에이전트 목록은 갱신되지 않음
|
||||
# - 따라서 "다음 세션부터 유효"
|
||||
# - 첫 세션 유효화 이슈는 감시자안(별도 검토 중)에서 다룰 수 있음
|
||||
#
|
||||
# C23 준수: 실패·skip도 투명 보고
|
||||
|
||||
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
||||
[ -z "$REPO_ROOT" ] && exit 0
|
||||
|
||||
CWD=$(pwd -W 2>/dev/null || pwd)
|
||||
|
||||
# 부서 판단
|
||||
if [[ "$CWD" == *"/기획실/"* ]] || [[ "$CWD" == *"/기획실" ]]; then
|
||||
ROLE="기획실"
|
||||
DEPT_AGENTS="$REPO_ROOT/기획실/.claude/agents"
|
||||
elif [[ "$CWD" == *"/개발실/"* ]] || [[ "$CWD" == *"/개발실" ]]; then
|
||||
ROLE="개발실"
|
||||
DEPT_AGENTS="$REPO_ROOT/개발실/.claude/agents"
|
||||
else
|
||||
# PM(루트) 세션은 복제 대상 아님 — 루트 .claude/agents/ 그대로 사용
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 부서 원본 디렉토리 없으면 종료 (이례적)
|
||||
[ ! -d "$DEPT_AGENTS" ] && exit 0
|
||||
|
||||
WT_AGENTS=".claude/agents"
|
||||
mkdir -p "$WT_AGENTS" 2>/dev/null
|
||||
|
||||
COPIED=0
|
||||
SKIPPED=0
|
||||
for f in "$DEPT_AGENTS"/*.md; do
|
||||
[ -e "$f" ] || continue
|
||||
BASENAME=$(basename "$f")
|
||||
DEST="$WT_AGENTS/$BASENAME"
|
||||
if [ ! -f "$DEST" ] || ! cmp -s "$f" "$DEST" 2>/dev/null; then
|
||||
cp "$f" "$DEST"
|
||||
COPIED=$((COPIED + 1))
|
||||
else
|
||||
SKIPPED=$((SKIPPED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $COPIED -gt 0 ]; then
|
||||
echo "🔧 [agent_sync:$ROLE] 부서 에이전트 $COPIED 개 신규 동기화 (다음 세션부터 유효)"
|
||||
[ $SKIPPED -gt 0 ] && echo " (이미 동일: $SKIPPED 개)"
|
||||
else
|
||||
echo "✅ [agent_sync:$ROLE] 부서 에이전트 동기화 상태 (동일 $SKIPPED 개)"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
@ -81,6 +81,10 @@
|
|||
"type": "command",
|
||||
"command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/agent_sync.sh 2>/dev/null || true"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/inbox_scan.sh 2>/dev/null || true"
|
||||
|
|
|
|||
|
|
@ -81,6 +81,10 @@
|
|||
"type": "command",
|
||||
"command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/agent_sync.sh 2>/dev/null || true"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash scripts/inbox_scan.sh 2>/dev/null || true"
|
||||
|
|
|
|||
Loading…
Reference in New Issue