<p align="center">
<img src="https://raw.githubusercontent.com/wei18/Upkeep/HEAD/docs/assets/banner.svg" alt="Upkeep — your AI writes fast, Upkeep keeps it honest" width="100%">
</p>
Upkeep
English · 繁體中文 · 简体中文 · 日本語 · 한국어
레포지토리를 위한 AI 감사팀으로, 스킬(skill)로 설치할 수 있습니다. Upkeep은 드리프트(drift)—오래된 문서, 더 이상 코드를 반영하지 않는 명세서, 고아화된 에셋, 깨진 컨벤션—를 포착하기 위해 집중적인 AI 검토자들을 병렬로 배포하고, 이것이 심각해지기 전에 증거와 함께 보고합니다.
💳 별도의 API 청구 없음. Upkeep은 기존의 Claude Pro/Max 구독을 사용합니다. 로컬에 로그인된 claude CLI 또는 CI에서 claude setup-token을 통한 OAuth를 이용합니다. Anthropic API 키가 필요 없고, 토큰당 비용이 발생하지 않습니다. 또한 **출력 전용(output-only)**입니다: 드리프트를 증거와 함께 심각도별로 보고하지만, 파일을 수정하거나 삭제하지는 않습니다.
설치 (Install)
Claude Code — 플러그인으로 설치:
/plugin marketplace add wei18/upkeep
/plugin install upkeep@upkeep
다른 에이전트들 (Cursor, Copilot 및 skills에서 지원하는 70개 이상의 에이전트):
npx skills add wei18/upkeep --skill upkeep-audit
요구 사항: 로그인된 claude CLI (Pro/Max), Node 20+, git — 엔진은 모든 설치 모드에서 사용자의 기기에서 실행됩니다.
그 후 어떤 세션에서든 다음과 같이 요청합니다:
Run an upkeep audit on /path/to/repo
처음 사용할 때 이 스킬은 Upkeep 엔진을 ~/.cache/upkeep으로 복제하고 의존성을 자동으로 설치합니다. 채팅에서 심각도별로 분류된 발견 사항과 자체 포함형 HTML 보고서를 받게 됩니다.
기능 (What it does)
- 저장소 전체를 스캔하고 집중적인 AI 검토팀을 병렬로 배포합니다.
- 코드와 동떨어진 오래된 문서, 구현과 일치하지 않는 사양(specs), 중복되거나 고아 파일, 컨벤션 위반 사항, 동기화되지 않은 번역 문서를 포착합니다.
- 증거와 함께 불일치를 보고합니다. 특정 아티팩트가 항상 진실의 원천이라고 가정하지 않습니다.
- 절대 편집하거나 삭제하지 않으며, 출력만 합니다.
- 자체 포함형 HTML 보고서를 생성하며, CI에서 실행될 경우 지속적인 GitHub 추적 이슈 (업데이트되거나 새로 생성되며, 중복되지 않음)를 만듭니다.
비교 방법
Upkeep은 린터(linter)나 PR 봇이 아닙니다. 이는 **전체 저장소의 의미론적 드리프트 감사자(semantic drift auditor)**입니다. 도구마다 역할이 다릅니다:
| Upkeep | Danger | Copilot / Cursor PR 검토 |
|---|
| 확인 대상 | 전체 저장소 — 문서, 사양, 에셋, 컨벤션 | PR의 diff | PR의 diff |
| ... | | | |
일반 스크립트로 실행
에이전트가 전혀 없어도 됩니다? 동일한 파이프라인을 독립형 스크립트로 실행할 수 있습니다:
git clone --depth 1 https://github.com/wei18/upkeep ~/.cache/upkeep
cd ~/.cache/upkeep && npm ci
./scripts/local-audit.sh /path/to/repo --out ~/upkeep-report.html
| 플래그 | 기본값 | CI 등가물 |
|---|
--model | claude-opus-4-8 | model |
| ... | | |
필수 사항: 로그인된 claude CLI (Pro/Max; setup-token 및 GitHub 접근 필요 없음), Node 20+, git. | | |
출력: 자체 포함형 HTML 보고서 (upkeep-report.html가 기본값)와 터미널 요약입니다. 로컬 실행은 절대 GitHub 이슈를 생성하지 않습니다.
수동 스킬 설치를 선호하십니까? skills/upkeep-audit/를 ~/.claude/skills/로 복사하세요.
CI에서 자동화하기
동일한 감사팀을 일정에 따라 운영합니다. 저장소에 .github/workflows/audit.yml 파일을 생성하세요:
name: repo audit
on:
schedule:
...
필수 사항
- 위에 표시된
permissions 블록 (contents: read + issues: write + id-token: write).
출력
audit 레이블이 지정된 GitHub 이슈가 생성됩니다. 이 이슈는 실행할 때마다 업데이트(upsert)되며, 중복되지 않습니다.
report-html 워크플로우 아티팩트로 업로드되는 독립적인 HTML 보고서입니다. 추적 이슈에서 바로 연결되거나, 아니면 실행의 Artifacts (Actions → 해당 실행)에서 찾을 수 있습니다. 또는 gh run download <run-id> -n report-html 명령어로 가져올 수 있습니다. GitHub는 아티팩트를 다운로드 가능한 zip 파일 형태로 제공하며, 이는 리포지토리의 보존 설정에 따라 만료됩니다.
이미 @v1을 사용하고 계신가요? 계속 작동하지만 동결된 상태입니다. 태그를 @v2로 전환하세요. 인터페이스는 동일합니다.
또는 Marketplace 액션으로 사용하기
익숙한 - uses: 스텝 구문을 선호하거나, Upkeep이 GitHub Marketplace에 표시되기를 원한다면 Upkeep Audit 액션을 사용하는 것이 좋습니다. 동일한 엔진과 입력값을 사용하지만, 리뷰어들이 병렬로 실행되는 대신 순차적으로 실행됩니다 (재사용 가능한 워크플로우가 주 경로인 이유에 대해서는 docs/why-reusable-workflow.md를 참조하세요):
name: repo audit
on:
schedule:
...
위와 동일한 요구 사항이 있습니다: CLAUDE_CODE_OAUTH_TOKEN이라는 리포지토리 시크릿 (from claude setup-token)과, 스텝 액션은 자체 권한을 선언할 수 없기 때문에 이제 작업(job) 자체에 위치하는 permissions 블록입니다.
리뷰어 (Reviewers)
| 이름 | 기본값 | 검사 항목 |
|---|
docs_staleness | on | 코드와 동떨어진 문서; 동기화되지 않은 다국어 README 및 번역된 문서 |
| ... | | |
설정 (Configuration)
설계상 두 개의 별도 구성 인터페이스가 있습니다:
- 워크플로우 입력값 (호출자의 상단
with: 블록; 로컬에서는 이에 상응하는 스크립트 플래그)은 엔진이 어떻게 실행될지를 제어합니다: model, max_turns, issue_label, rubric_lang.
.claude/audit.yml (감사 대상 리포에 커밋됨)은 무엇이 감사될지를 제어합니다: 활성화할 리뷰어, 리뷰어별 루브릭 재정의, 그리고 report.minSeverity. 리뷰어 활성화 여부는 워크플로우 입력값이 아니라 여기에 존재하는데, 이는 리포와 함께 진화해야 하는 리포별 정책이기 때문입니다.
모든 것이 선택 사항입니다. 예를 들어, 기본적으로 꺼져 있는 i18n 리뷰어를 활성화하려면 다음과 같이 할 수 있습니다:
전체 스키마와 옵션은 docs/design.md를 참조하세요.
문서 (Docs)