
cottage v0.7.0
팀을 위한 현대적인 git 기반 age 암호화 비밀 관리자입니다.
cottage는 팀이 git 저장소에서 age로 암호화된 시크릿을 관리할 수 있게 해주는 GitOps 도구입니다.
시크릿을 암호화/복호화하고, 수신자를 관리하며, VCS를 통한 손쉬운 공유를 허용하면서도 시크릿을 저장소 밖에 유지하는 간단한 워크플로를 제공합니다. cottage는 또한 더 나은 가시성을 위해 암호화된 시크릿의 마스킹된 미리보기를 생성하고, 영구적 및 임시적 복호화 워크플로를 모두 지원하며, 시크릿이 평문으로 커밋되지 않도록 보장합니다.

기능
- 노출 안전성: Rust의 타입 시스템을 사용하여 버그로 인해 실수로 시크릿이 노출되는 일이 없도록 보장합니다.
- 팀 친화적: 공개 키(수신자)는 저장소에 공유하고, 개인 키(아이덴티티)는 로컬에 보관합니다.
- 접근 제어: 어떤 시크릿을 어떤 수신자를 위해 암호화할지 제어하는 간단한 허용/거부 규칙을 제공합니다.
- .gitignore 관리:
.gitignore를 자동으로 업데이트하여 암호화되지 않은 시크릿이 저장소에 들어가지 않도록 합니다. - 미리보기: 더 나은 가시성을 위해 타임스탬프가 포함된 마스킹된 미리보기를 생성합니다.
- 풍부한 diff: git diff를 깔끔하고 검토 가능하게 유지하며,
ctg diff는 로컬에서 수정된 시크릿과 추적 중인 암호화된 대응 파일의 diff를 보여줍니다. - 체크섬 검증: 암호화된 시크릿과 수신자 목록이 메타데이터와 일치하는지 검증하여 변조를 방지합니다.
- Git 훅: 커밋 전에 시크릿을 자동으로 확인/암호화하고 체크아웃 후에 복호화하는 git 훅을 쉽게 설정할 수 있습니다.
- 영구 시크릿 워크플로:
ctg decrypt/sync는 복호화된 시크릿을 디스크에 유지합니다. - 스마트 정리 라이프사이클:
ctg run(단축 명령ctgx)과ctg edit는 작업 전에 시크릿을 복호화하며, 사전에 이미 존재했다면 디스크에 유지하고 그렇지 않았다면 작업 후 자동으로 정리합니다. - 완료 시 정리:
ctg encrypt --clean,ctg run --clean,ctg edit --clean은 이전에 존재했더라도 복호화된 파일이 디스크에서 정리되도록 보장합니다. - 환경 변수 주입 워크플로:
ctg env는 복호화된 시크릿을 디스크에 전혀 쓰지 않고 환경 변수로 주입하여 명령을 실행합니다. - 안전한 시크릿 파이핑:
ctg cat PATH는 메모리에서 복호화하여 stdout으로 출력하므로 다른 도구로 직접 stdin 파이핑할 수 있습니다. - 정리:
ctg clean은 로컬 저장소에서 모든 복호화된 시크릿을 삭제하여 AI 에이전트를 조금 더 안심하고 실행할 수 있게 해줍니다. - jj 및 비 git 디렉터리 지원:
ctg init은 어떤 디렉터리든 시크릿 저장소로 만들어 줍니다. - 모든 제공자와 동기화: API가 있는 모든 제공자를 업스트림으로 구성하고
git pull/diff/push처럼ctg pull/diff/push를 사용할 수 있습니다. - 모든 기기와 동기화: cottage로 암호화되어 git 저장소에서 관리되는 시크릿은 Cottage Sync를 통해 여러 기기 간에 동기화할 수 있습니다.
설치
# rust: cargo-binstall/cargo
cargo binstall --locked cottage
cargo install --locked cottage
# python: pip/uv/uvx
pip install cottage
uv pip install cottage
uvx --from cottage ctg --version
# node: yarn/pnpm/npx
yarn global add @sayanarijit/cottage
pnpm add -g @sayanarijit/cottage
npx -p @sayanarijit/cottage ctg --version
Docker 이미지로도 사용할 수 있습니다:
# Docker
docker run --rm -v $PWD:/app sayanarijit/cottage --version
# Podman
podman run --rm -v $PWD:/app quay.io/sayanarijit/cottage --version
또는 GitHub에서 최신 릴리스를 다운로드하세요.
에디터 통합
VS Code 확장
Cottage VS Code 확장을 사용하여 ctg를 설치하고, Copilot 안전 훅을 추가하며, Explorer에서 파일을 암호화하고, 에디터 워크플로를 통해 .cott.age 파일을 열 수 있습니다.
Visual Studio Marketplace에서 설치하거나, vscode-plugin-cottage에서 로컬로 빌드하여 설치하세요.
Cursor 및 Eclipse 확장
VSX 파일을 다운로드하여 Cursor 또는 Eclipse IDE에 설치하세요. VS Code 확장과 유사하게 작동합니다.
Vim 플러그인
cottage.vim 플러그인을 사용하여 Vim 또는 Neovim에서 시크릿을 암호화/복호화하세요.
AI 에이전트 통합
아래의 모든 통합은 AI 에이전트가 ctg/ctgx를 직접 실행하거나 시크릿 파일을 보거나 편집하는 것을 방지합니다. 여기에는 .cottage/ 내부의 모든 것, 모든 *.cott.* 파일(암호화된 *.cott.age 블롭과 마스킹된 *.cott.toml 미리보기), 그리고 디스크에 여전히 *.cott.age 대응 파일이 있는 모든 복호화된 파일이 포함됩니다.
Claude Code 통합
Claude Code를 사용하는 경우, 시크릿이 있는 저장소에 .claude/settings.json과 .claude/hooks/deny-secrets.py를 추가하여 Claude Code 세션이 시크릿을 안전하게 처리하도록 하거나, claude-plugin-cottage 플러그인을 설치하세요.
GitHub Copilot 통합
VS Code에서 GitHub Copilot을 사용하는 경우, 시크릿이 있는 저장소에 .github/hooks/ctg-policy.json과 .github/hooks/scripts/deny_ctg_command.py를 추가하여 Copilot 세션이 복호화된 파일을 정리하고, 직접적인 ctg 셸 명령을 차단하며, 시크릿 파일 접근을 차단하도록 하거나, vscode-plugin-cottage 확장을 설치하여 VS Code에서 설정하세요.
VS Code는 .claude/settings.json 훅 정의도 로드합니다. Claude와 Copilot 훅 파일을 같은 저장소에 모두 두는 경우, 동일한 정리 훅을 실수로 두 번 실행하지 않도록 주의하세요.
Codex 통합
Codex를 사용하는 경우, 시크릿이 있는 저장소에 .codex/hooks.json과 .codex/hooks/deny-ctg.py를 추가하여 Codex 세션이 시크릿을 안전하게 처리하도록 하거나, codex-plugin-cottage 플러그인을 설치하세요.
Codex는 로컬 훅을 실행하기 전에 검토를 요구합니다. 파일을 추가한 후 저장소에서 Codex를 시작하고 /hooks를 사용하여 프로젝트 훅을 검토하고 신뢰하세요.
Antigravity (agy) 통합
Antigravity(agy)를 사용하는 경우, 시크릿이 있는 저장소에 .agents/hooks.json과 .agents/scripts/deny-ctg.py를 추가하여 Antigravity 세션이 시크릿을 안전하게 처리하도록 하거나, agy-plugin-cottage 플러그인을 설치하세요.
