cottage 是一款 GitOps 工具,供团队在 git 仓库中管理 age 加密的机密信息。
它提供了一套简单的工作流,用于加密/解密机密、管理接收者,并将机密排除在仓库之外,同时仍能通过 VCS 轻松共享。cottage 还会为加密机密生成脱敏预览,以提高可见性,并支持持久化和临时解密工作流,同时确保机密绝不会以明文形式提交。

.gitignore,将未加密的机密排除在仓库之外。ctg diff 显示本地修改的机密与已跟踪的加密对应文件之间的差异。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 代理时少一分担忧。ctg init 可将任意目录变为机密存储库。git pull/diff/push 一样开始使用 ctg pull/diff/push。# 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 下载最新版本。
使用 Cottage VS Code 扩展来安装 ctg、添加 Copilot 安全钩子、从资源管理器加密文件,并通过编辑器工作流打开 .cott.age 文件。
从 Visual Studio Marketplace 安装,或从 vscode-plugin-cottage 本地构建并安装。
下载 VSX 文件并在你的 Cursor 或 Eclipse IDE 中安装。其工作方式与 VS Code 扩展类似。
使用 cottage.vim 插件从 Vim 或 Neovim 加密/解密机密。
以下所有集成都会阻止 AI 代理直接运行 ctg/ctgx,以及查看或编辑机密文件:.cottage/ 内的任何内容、任何 *.cott.* 文件(加密的 *.cott.age 二进制块和脱敏的 *.cott.toml 预览),以及磁盘上仍存在 *.cott.age 对应文件的任何已解密文件。
如果你使用 Claude Code,请将 .claude/settings.json 和 .claude/hooks/deny-secrets.py 添加到含有密机的仓库中,以便 Claude Code 会话安全地处理机密,或安装 claude-plugin-cottage 插件。
如果你在 VS Code 中使用 GitHub Copilot,请将 .github/hooks/ctg-policy.json 和 .github/hooks/scripts/deny_ctg_command.py 添加到含有密机的仓库中,以便 Copilot 会话清理解密文件、阻止直接的 ctg shell 命令,并阻止访问机密文件,或安装 vscode-plugin-cottage 扩展以从 VS Code 进行设置。
VS Code 也会加载 .claude/settings.json 钩子定义。如果你在同一仓库中同时保留 Claude 和 Copilot 钩子文件,请确保不要意外运行两次相同的清理钩子。
如果你使用 Codex,请将 .codex/hooks.json 和 .codex/hooks/deny-ctg.py 添加到含有密机的仓库中,以便 Codex 会话安全地处理机密,或安装 codex-plugin-cottage 插件。
Codex 要求本地钩子在运行前经过审查。添加文件后,在仓库中启动 Codex 并使用 /hooks 审查并信任项目钩子。
如果你使用 Antigravity(agy),请将 .agents/hooks.json 和 .agents/scripts/deny-ctg.py 添加到含有密机的仓库中,以便 Antigravity 会话安全地处理机密,或安装 agy-plugin-cottage 插件。
如果你使用 Cursor,请将 .cursor/hooks.json、.cursor/hooks/deny-ctg.py、.cursor/hooks/deny-read-secrets.py、.cursor/rules/deny-ctg.mdc 和 .cursorignore 添加到含有密机的仓库中,以便 Cursor 会话安全地处理机密。
Cursor 要求先启用钩子。打开 Cursor 设置 > 钩子并启用钩子,然后重启代理会话以使项目钩子生效。.cursorignore 还会将机密文件排除在 Cursor 的索引和代理上下文之外。
初始化项目:
mkdir project && cd project
git init # Optional, cottage works better with git but it's not required
ctg init # Sets up the .cottage directory and necessary files