<h1 align="center">claude-audit</h1>
<p align="center">
명령줄(command-line) 코드 감사 도구: 빠른 정적 분석(static checks)과, 선택적으로 Claude가 읽기 전용 도구를 사용하여 코드를 조사하는 기능.
</p>
<p align="center">
<a href="https://www.npmjs.com/package/claude-audit"><img alt="npm" src="https://img.shields.io/npm/v/claude-audit"></a>
<a href="https://github.com/itsmesherry/claude-audit/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/itsmesherry/claude-audit/actions/workflows/ci.yml/badge.svg"></a>
<a href="https://www.npmjs.com/package/claude-audit"><img alt="Node" src="https://img.shields.io/node/v/claude-audit"></a>
<a href="https://www.npmjs.com/package/claude-audit"><img alt="Downloads" src="https://img.shields.io/npm/dm/claude-audit"></a>
<a href="https://github.com/itsmesherry/claude-audit/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-blue"></a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/itsmesherry/claude-audit/HEAD/media/demo.gif" alt="claude-audit --static run on a sample project" width="800" />
</p>
프로젝트를 카테고리별로 점수화하며, 발견된 각 문제점(finding)을 파일, 줄 번호 및 제안된 수정 사항과 함께 나열합니다. 보고서는 터미널에서, 그리고 Markdown, HTML 또는 JSON 형식으로 출력됩니다. API 키가 없으면 정적 분석만 실행되며, 데이터는 기기 외부로 전송되지 않습니다.
사용법 (Usage)
npx claude-audit --static
...
Node 18 이상 버전이 필요합니다. npx 사용 대신 설치하려면: npm install -g claude-audit.
보고서 파일은 감사된 프로젝트 내의 .claude-audit/ 디렉토리에 작성되므로, 해당 디렉토리를 .gitignore에 추가해야 합니다.
검사 항목 (What it checks)
세 가지 모드가 있습니다.
| 모드 | 실행 방법 | 동작 내용 |
|---|
| Static | --static, 또는 API 키 미사용 시 | 패턴 기반 규칙만 적용됩니다. 밀리초(milliseconds) 단위로 오프라인에서 실행됩니다. |
| ... | | |
- 보안(Security): 하드코딩된 API 키, 비밀번호, JWT 시크릿, AWS, GitHub, Anthropic 및 OpenAI 키, 개인 키 블록, 자격 증명이 포함된 데이터베이스 URL,
eval(), 문자열 연결로 생성된 SQL, dangerouslySetInnerHTML, 비활성화된 TLS 검증(disabled TLS verification), shell=True, 보안 목적으로 사용된 Math.random().
- 의존성(Dependencies): 알려진 취약하거나 사용 중단된 패키지(lodash, axios, minimist, moment, request 등)의 작고 내장된 목록과 매우 많은 의존성 개수.
- 품질, 테스트, 문서화(Quality, testing, documentation): 매우 긴 파일, 깊은 중첩 구조(deep nesting), 배포 코드에 남겨진 디버그 출력, 중복 임포트(duplicate imports), 누락된 테스트, 크고 문서화되지 않은 파일.
성능(Performance)과 아키텍처(architecture)에는 정적인 규칙이 없습니다. 이들은 AI 감사가 실행될 때만 점수가 매겨집니다.
API 키를 사용하면 Claude가 보안(security), 품질(quality), 성능(performance), 아키텍처(architecture), 의존성(dependencies), 테스트(testing), 문서화(documentation)의 일곱 가지 모든 카테고리를 검토합니다.
이것이 아닌 것 (What it is not)
정적 규칙(static rules)은 정규 표현식(regular expressions)입니다. 이들은 일반적인 실수를 빠르게 포착하며, 예를 들어 주석 내에 있는 eval(과 같은 오탐지(false positives)도 생성합니다. 의존성 목록은 짧고 수동으로 유지되므로, npm audit나 실제 취약점 스캐너를 대체할 수는 없습니다. AI 감사는 모델로부터 얻는 두 번째 의견이며, 잘못될 수 있다는 일반적인 주의사항이 따릅니다. 알려진 누락 사항은 TODO.md에 나열되어 있습니다.
샘플 출력 (Sample output)
이 저장소에 있는 샘플 프로젝트를 사용하여 npx claude-audit --static examples/shop-api로 실행한 경우:
shop-api examples/shop-api
5 files, 64 lines · JSON, JavaScript, Express · static analysis only
...
모든 보고서에서 비밀 정보(secrets)는 마스킹됩니다.
옵션 (Options)
Usage: claude-audit [options] [path]
path 감사할 프로젝트 (기본값: ".")
...
종료 코드 (Exit codes)
AI 단계가 실패하거나 예산이 소진되면, 보고서는 정적 결과로 대체됩니다. 이는 stderr의 경고 메시지와 JSON 보고서의 warnings 필드에 명시되며, 이때 aiPowered는 false입니다.
에이전트 기반 감사(The agentic audit)
Claude는 결과를 제출하기 위해 고정된 읽기 전용 도구 세트(get_project_summary, get_static_findings, read_dependency_manifest, list_files, search_code, read_file, finalize_audit)를 사용합니다. 관련 제한 사항은 다음과 같습니다:
- 모든 경로는 프로젝트 루트와 비교됩니다.
.., 절대 경로, 그리고 프로젝트 외부로 연결되는 심볼릭 링크는 거부됩니다.
- 어떤 도구도 파일을 쓰거나, 명령을 실행하거나, 네트워크에 접근할 수 없습니다.
- 실행은
--max-turns 턴 또는 --max-budget 토큰이 지나면 중단되거나, Claude가 동일한 도구 호출을 반복하는 경우 중단됩니다.
- 도구 결과는 16 KB로 제한되며 파일 읽기는 200 KB로 제한됩니다.
- 정적 발견 사항은 정규 표현식이므로, Claude는 해당 코드를 읽은 후 이를 무시할 수 있습니다. 무시된 발견 사항은 사유와 함께 모든 보고서에 나열되며 점수 계산에서 제외됩니다. 심각한 발견 사항은 무시될 수 없습니다.
- 보고서는 Claude가 검사한 내용과 도달하지 못한 내용을 모두 나열합니다.
--no-trace를 전달하지 않는 한, 모든 도구 호출은 .claude-audit/agent-trace.jsonl(턴, 입력, 출력 미리 보기, 지속 시간)에 기록됩니다.
사용자의 코드는 두 가지 AI 모드에서 Anthropic API로 전송됩니다. --static 모드에서는 어떠한 경우에도 전송되지 않습니다.
CI
GitHub Action으로 사용 시:
- uses: itsmesherry/claude-audit@v0
with:
api-key: ${{ secrets.ANTHROPIC_API_KEY }}
...
이 액션은 score, grade, critical-count, high-count, total-findings, report-json, report-sarif 출력을 설정하고 워크플로우 실행에 요약 테이블을 추가합니다. @v0는 최신 0.x 버전을 따르며, 선호하는 경우 @v0.5.0과 같은 전체 버전을 고정할 수 있습니다.
결과를 코드 스캐닝 알림 및 풀 리퀘스트 내에 표시하려면, upload-sarif: true로 설정하고 작업(job)에 permissions: security-events: write 권한을 부여해야 합니다. 비공개 저장소(private repository)에서 코드 스캐닝을 사용하려면 GitHub Advanced Security가 필요합니다.