동기화 전체 흐름
flowchart TD
K["keystone-hub (Git)"]
M["apply.sh --profile personal-macos"]
W["apply.sh --profile personal-windows"]
L["layers merge<br/>skills, hooks, rules, scripts, agents"]
S["settings deep merge<br/>$HOME 경로 확장"]
C["Claude commands<br/>~/.claude/commands"]
X["Codex skills<br/>~/.codex/skills 자동 변환"]
U["cc-sync upstream"]
P["/upstream-sync"]
R["flat to layered 매핑<br/>keystone-hub 흡수"]
K --> M --> L --> S --> C --> X
K --> W --> L
U --> P --> R --> K
apply.sh가 하는 일
| 단계 | 동작 |
|---|---|
| 1. Layer merge | 00-universal → 10-os-* → 20-company-* → 30-machine-local 순서로 덮어쓰기 |
| 2. Settings merge | hooks 배열은 합산, 스칼라는 상위 레이어 우선 (Python deep merge) |
| 3. Path expansion | settings.json 내 $HOME → 실제 home 디렉토리로 치환 |
| 4. Stale cleanup | 폐기된 hook 자동 제거 |
| 5. Commands sync | ai-rules/.claude/commands/ → ~/.claude/commands/ 복사 |
| 6. Codex sync | Claude skills + commands → ~/.codex/skills/ SKILL.md 변환 |
| 7. Tools check | bun, node, clawd-on-desk 설치 여부 확인 |
경로 포터블화
settings.json 소스에서 절대 경로 대신 $HOME/을 사용:
// 레이어 소스 (keystone-hub)
"command": "$HOME/.claude/hooks/qa-gate-before-push.sh"
// apply.sh 적용 후 (macOS)
"command": "/Users/choa712-mac/.claude/hooks/qa-gate-before-push.sh"
// apply.sh 적용 후 (Windows Git Bash)
"command": "/c/Users/username/.claude/hooks/qa-gate-before-push.sh"
새 사용자가 clone + apply.sh 실행만 하면 자동으로 올바른 경로가 설정됩니다.
Claude ↔ Codex 스킬 동기화
| Claude Code | Codex CLI |
|---|---|
~/.claude/skills/*/SKILL.md | ~/.codex/skills/*/SKILL.md |
~/.claude/commands/*.md | ~/.codex/skills/*/SKILL.md (디렉토리 변환) |
/skill-name으로 호출 | $skill-name으로 호출 |
apply.sh가 자동으로:
- Claude skills 디렉토리를 Codex에 복사 (SKILL.md 있는 것만)
- Claude commands (.md 단일 파일)를 Codex skills (디렉토리/SKILL.md) 구조로 변환
신규 셋업 (한 줄)
git clone <keystone-hub> ~/lucy/keystone-hub
git clone <ai-rules> ~/lucy/ai-rules
cd ~/lucy/keystone-hub && ./apply.sh --profile personal-macos
이후 업데이트:
cd ~/lucy/keystone-hub && git pull && ./apply.sh --profile personal-macos