From candy
Claude Candy 설치 상태를 진단하고 안전한 것은 바로 고쳐주는 헬스체크 스킬. 번들 진단 스크립트로 의존성, Claude 로그인, JOBS_ROOT 파일 구조, LaunchAgent 등록/스케줄 정합성, 런타임 로그/CSV stale, optimizer gate, macOS 알림 권한까지 한 번에 점검한다. 사용자가 "candy 상태 확인", "candy 점검", "candy-doctor", "candy 진단", "candy 이상한데", "candy 왜 안 돌아", "점심 pre-warm 안 먹힘", "optimizer 왜 멈춤", "usage_snapshots.csv stale" 같은 요청을 하거나 com.claude.candy.* 관련 동작 이상을 의심할 때 반드시 이 스킬을 사용한다. 결과는 심각도(MUST/detail)로 분류되고, 수정 가능한 항목은 정책별(자동/확인/수동)로 안내되어 사용자가 위험한 변경을 모른 채 당하지 않는다.
How this skill is triggered — by the user, by Claude, or both
Slash command
/candy:candy-doctorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Candy 설치가 실제로 잘 돌아가는지 런타임 상태를 진단하고, 안전한 이상은 바로 고치고, 위험한 변경은 사용자 확인을 받아 처리한다.
Candy 설치가 실제로 잘 돌아가는지 런타임 상태를 진단하고, 안전한 이상은 바로 고치고, 위험한 변경은 사용자 확인을 받아 처리한다.
Virtual regression test (tests/virtual_time_test.sh) 는 돌리지 않는다 — 그건 코드 회귀 테스트이지 헬스체크가 아니다. 이 스킬은 지금 이 순간 Candy 가 제대로 도는가 만 본다.
scripts/candy_doctor.py 를 --json 으로 실행한다.status, fix_command, fix_policy 를 담은 JSON 리포트를 출력한다.python3 "${CLAUDE_PLUGIN_ROOT}/skills/candy-doctor/scripts/candy_doctor.py" --json
JOBS_ROOT 는 스크립트가 자동 추론한다:
JOBS_ROOT 환경변수가 있으면 그것~/Library/LaunchAgents/com.claude.candy.plist symlink 타겟에서 역산~/jobs사용자가 "다른 경로를 보고 싶다" 고 하면 --jobs-root <path> 를 붙인다.
스크립트는 read-only — 어떤 파일도 수정하지 않는다. 수정은 Claude가 이 SKILL 의 정책에 따라 직접 한다.
{
"jobs_root": "/Users/xxx/jobs",
"uid": 502,
"checks": [
{
"id": "fs.la.com.claude.candy.symlink",
"category": "filesystem",
"severity": "must", // "must" | "detail"
"status": "pass", // "pass" | "warn" | "fail" | "skip"
"message": "symlink → ...",
"fix_command": "ln -sfn ... ...", // 있을 수도 없을 수도 있음
"fix_policy": "confirm", // "auto" | "confirm" | "manual" | null
"details": { ... }
}
],
"summary": { "pass": 49, "warn": 2, "fail": 0, "skip": 0 }
}
무조건 바로 실행한다. 되돌릴 수 있고 시스템 상태에 위험을 주지 않는 것만 이 정책이 붙는다:
chmod +x (실행 비트 복구)mkdir -p (누락 디렉터리 생성)끝난 뒤에는 무엇을 고쳤는지 간단히 보고한다. 사용자 승인을 받지 않는다 — 그게 auto 의 의미다.
fix_policy=confirm 인 항목을 한 번에 묶어서 사용자에게 보여주고 전체 동의를 받는다. 각각 따로 묻지 않는다 — 질문이 5개면 사용자가 피곤하다. 예:
"다음 3개를 고쳐도 될까요?
com.claude.candy.snapshotagent 가 등록 안 돼 있어서launchctl bootstrap재실행com.claude.candy.optimizersymlink 가 대상이 없어서 재생성- (...)
yes/no 답만 주세요."
사용자가 yes 면 전부 실행, no 면 전부 스킵하고 이유만 보고한다. 개별 선택을 원하면 물어본 항목 안에서 "X 만", "Y 는 빼고" 같이 명시하게 한다.
안전 룰: confirm 항목이 3개 이상 한꺼번에 뜨면, 개별 수정보다 "/candy-setup 을 다시 돌리세요" 를 먼저 권한다. 부분 수정을 여러 번 하는 것보다 번들을 통째로 재배포하는 게 훨씬 깔끔하기 때문이다.
사용자가 직접 해야 한다. Claude 가 할 수 있는 건 정확히 어떤 설정을 어떻게 바꿔야 하는지 알려주는 것뿐이다. 흔한 케이스:
claude 실행 후 로그인"python3 / claude 설치".limit_until 살아 있음) → "해당 시간까지 기다림"스크립트가 끝나고 수정까지 마친 뒤, 다음 순서로 사용자에게 보고한다:
요약은 짧게. 전체 50개 체크 모두 나열하지 않는다 — pass 는 묶어서 "N개 통과", warn/fail 만 상세히.
사용자: "candy 상태 좀 봐줘"
Claude 는 다음 순서로 행동:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/candy-doctor/scripts/candy_doctor.py" --json 실행fix_policy=auto 인 warn/fail 이 있으면 먼저 실행 (예: chmod +x /Users/x/jobs/bin/refresh_claude.sh)fix_policy=confirm 항목이 있으면 묶어서 사용자에게 질문. 3개 이상이면 /candy-setup 재실행 권고를 먼저 제시fix_policy=manual 항목과 auto/confirm 으로 해결 안 된 warn 을 사용자에게 정리candy_doctor.py 자체는 절대 파일을 수정하지 않는다. 스크립트가 "자동으로 고쳤다" 라고 말하는 일이 있으면 그건 버그다./tmp/test-jobs) 모든 체크가 해당 경로 기준으로 돈다. 리포트 맨 위의 jobs_root 를 항상 사용자에게 같이 보여준다 — "어디를 봤는지" 가 중요하다.--json 출력이 길어진다. 전부를 사용자에게 쏟아내지 말고 요약한다.claude -p 가 45초 넘게 응답 없음): 해당 체크는 fail 로 기록되고 나머지는 진행된다.npx claudepluginhub nonsignal007/agent-candy --plugin candyGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.