作者:互联网 时间: 2026-09-30 10:10:01
真正理解safe-change,要从它处理的任务开始:集中管理 AI 编码工具配置,可复用 Claude Code、OpenCode、Codex 等工具的配置、MCP 服务、插件和命令。对安全分析任务来说,授权边界、证据完整性和误报需要同时控制往往决定它能否落地,不能只用安装成功来判断。落地前可以在明确授权的样例或离线靶场中验证,用输入边界、证据链、误报率和安全中止机制判断它是否真的省事。它更像给具备授权环境和复核能力的安全人员准备的可审查方案,是否长期使用应由试跑数据决定。

为什么存在安全变更
自主 AI 编码代理正在以前所未有的速度重写生产代码库。当您将任务委派给 AI 代理时,它会涉及数十个文件、改变依赖关系并重构关键架构边界。该应用程序可能仍然可以编译并启动,但微妙的逻辑已被颠倒,授权保护被删除,或者默默地引入回归 - 让开发人员猜测什么出了问题以及原因。
没有权威的基线和可验证的执行门:
safe-change是自主AI开发的可验证执行哨兵和高保证安全平面。
它在 AI 代理接触您的代码之前锁定加密基线,隔离 OS- 支持的沙箱内的执行,验证 AST 语义完整性,强制执行企业变更预算,并生成完整的 RFC 8785 Ed25519 签名证明 - 完全气隙,零云依赖,100% 确定性。
它是如何运作的
# Step 1 — Before the agent: lock in a verified baseline
safe-change save "auth and dashboard both passing"
# Step 2 — Let your agent do its work
# ...
# Step 3 — After the agent: detect what regressed
safe-change check
# Step 4 — See which files were touched
safe-change diff
Baseline: auth and dashboard both passing
Check Before Now Result
─────────────────────────────────────────────
build pass pass ok
unit-tests pass fail REGRESSION
e2e-auth pass pass ok
Files changed since baseline:
Modified: 8
Added: 2
Deleted: 0
Exit 1 — 1 new regression detected.
Previously passing check now fails: unit-tests
哪些文件被跟踪和散列?
安全更改记录 SHA-256 加密哈希,用于代码库验证,同时尊重存储库边界:
git ls-files) 跟踪的所有文件以及 Git (git status -uall) 识别的未跟踪工作树文件。.gitignore(e.g.、node_modules/、dist/、构建工件、缓存文件夹)匹配的任何内容都将被完全忽略,并且永远不会被散列。 .safe-change/ 目录始终被排除。lstat 检查并按其链接目标字符串 (readlink) 进行哈希处理,无需跟踪或取消引用存储库外部的路径。安装
npm install -g safe-change
# Verify
safe-change --version
Node.js ≥ 18。无构建步骤。没有编译器。没有云帐户。
快速启动
1. 1 秒初始化您的项目
safe-change init
自动检查您的存储库(Node.js、Rust、Go、Python、Makefile),使用检测到的测试运行程序生成
.safe-change.json,并可选择在指定--update-gitignore时更新--update-gitignore。
2.在代理启动之前保存基线
safe-change save "before refactor"
3.代理完成后检查回归
safe-change check
4.检查更改的内容(文件和行数)
safe-change diff --stat
命令
| 命令 | 它的作用 |
|---|---|
init |
自动检测测试运行器,创建.safe-change.json(使用--update-gitignore更新.gitignore) |
save [description] |
记录基线——运行所有检查,对所有文件进行哈希处理 |
check |
将当前状态与基线进行比较 — 如果出现回归,则退出 1 |
diff [--stat] |
列出文件的添加、修改、删除和行更改统计信息 |
assess |
对变更风险进行评分、执行策略并确定最低运营模式 |
lease acquire <session> <agent> |
原子获取存储库写租约 |
lease status |
检查有效或过期的写租约 |
lease release <session> |
仅当会话所有权匹配时才释放写租约 |
fingerprint |
捕获当前工作区身份和环境摘要 |
fingerprint check |
将当前工作空间与基线指纹进行比较 |
evidence <session> |
创建无源校验和证据包 |
audit verify |
验证防篡改会话事件链 |
authorize <capability> <resource> <agent> <session> [approval] |
通过政策决策和执行合同来评估操作 |
approval request |
创建有范围的、即将到期的批准请求 |
approval grant |
向请求添加一项独立批准 |
approval status |
检查请求完整性、授权和过期 |
policy verify |
验证配置的分离 Ed25519 策略签名 |
semantic-diff [--base <ref>] |
AST 语义差异分析,用于重大更改和逻辑突变 |
| `重播记录<session> | 验证` | 跨环境记录或确定性重播执行会话 |
| `证明创建 <manifest> | 验证` | 创建或以加密方式验证完整的 RFC 8785 Ed25519 证明 |
| `身份注册机 | 注册 | 列表` | 管理信任注册表中授权的 Ed25519 批准者密钥 |
| `批准标志<req> | 验证` | 使用 Ed25519 对功能请求进行加密签名或验证 |
log |
基线和检查结果的完整历史记录 |
dashboard |
在 localhost:4242 打开可视化企业仪表板 |
rules list |
显示主动安全规则 |
rules add <id> |
添加内置安全规则 |
rules remove <id> |
删除安全规则 |
| `安装<代理 | 全部>` | 为特定代理或所有检测到的代理安装技能 |
| `更新<代理 | 全部>` | 将已安装的技能更新到最新 |
| `卸载<代理 | 全部>` | 删除已安装的技能 |
status [agent] |
显示安装状态、检测到的代理、偏差 |
mcp |
在stdio上启动MCP服务器 |
所有命令都接受 --json 以获取结构化输出,并接受 --help 以获取使用详细信息。
安装程序命令接受 --scope <project|全局>, --dry-run, and --overwrite.
支持代理
# Detect which agents are installed and set up all of them at once
safe-change install all
| 代理 | ID | 项目范围 | 全球范围 |
|---|---|---|---|
| 谷歌反重力 | antigravity |
.agents/skills/safe-change/ |
~/.gemini/config/skills/safe-change/ |
| 克劳德·科德 | claude-code |
.claude/skills/safe-change/ |
~/.claude/skills/safe-change/ |
| 光标 | cursor |
.cursor/skills/safe-change/ |
~/.cursor/skills/safe-change/ |
| OpenAI 法典 | codex |
.codex/skills/safe-change/ |
~/.codex/skills/safe-change/ |
| 克莱因 | cline |
.cline/skills/safe-change/ |
~/.cline/skills/safe-change/ |
| 基米密码 | kimi-code |
.kimi-code/skills/safe-change/ |
~/.kimi-code/skills/safe-change/ |
| 放大器 | amp |
.agents/skills/safe-change/ |
~/.config/agents/skills/safe-change/ |
| OpenCode | opencode |
.opencode/skills/safe-change/ |
~/.config/opencode/skills/safe-change/ |
| 双子座 CLI | gemini-cli |
.gemini/skills/safe-change/ |
~/.gemini/skills/safe-change/ |
| GitHub 副驾驶 | github-copilot |
.github/skills/safe-change/ |
~/.github/skills/safe-change/ |
有关验证状态的说明: 目前,所有代理均附带
filesystem-validated状态,这意味着安全更改已被验证可以在每个代理的预期路径上正确安装、读取和删除技能文件。每个代理都会跟踪完整的运行时验证(确认每个代理在实时会话期间主动发现并调用技能),并将在后续版本中进行跟踪。如果您遇到代理无法获取已安装的技能,请 打开问题。
企业技能政策
每个安装都确定性地将规范安全合同与所选代理的经过验证的配置文件结合起来。该策略包括标准、高保证和事件模式;微观语法边界审查;失败关闭证据规则;即时注射边界;并发漂移检测;测试完整性控制;释放门;以及所需的验证报告。
所有权清单记录规范、配置文件和组合的 SHA-256 值。因此,safe-change status 检测共享策略或特定于代理的配置文件中的偏差。请参见 docs/enterprise-skill-policy.md。
MCP 服务器
支持模型上下文协议的代理可以将安全更改作为本机工具调用 - 无需 SKILL.md,无需手动设置,无需 PATH 配置。
safe-change mcp
将其添加到代理的 MCP 配置中:
{
"mcpServers": {
"safe-change": {
"command": "safe-change",
"args": ["mcp"]
}
}
}
暴露的工具:
| 工具 | 描述 |
|---|---|
safe_change_save |
编辑前记录基线 |
safe_change_check |
检测编辑后的回归 |
safe_change_diff |
获取文件级变更摘要 |
safe_change_status |
显示当前基线元数据 |
safe_change_log |
检索项目安全历史记录 |
docs/mcp-setup.md 中的完整每个代理设置。
安全规则
自动在每个 safe-change check 上强制实施护栏。
safe-change rules add no-delete-migrations
safe-change rules add no-modify-lockfile
safe-change rules add max-files-changed
safe-change rules add require-tests-pass
| 规则 ID | 它强制执行什么 |
|---|---|
no-delete-migrations |
阻止删除 <strong>/migrations/</strong>(严重性:错误) |
no-delete-env |
阻止删除 **/.env*(严重性:错误) |
no-modify-lockfile |
阻止锁定文件修改(严重性:警告) |
max-files-changed |
当更改的文件超过阈值时失败或发出警告(默认值:50,警告) |
max-deleted-files |
阻止批量意外删除(默认值:10,错误) |
require-tests-pass |
强制配置中名为 "test" 的检查通过(退出代码 0,错误) |
severity: error 的规则违规设置退出代码 1,与回归相同。内置规则提供生产默认值。可以通过编辑 .safe-change/rules.json 或通过 safe-change rules add <file.json> 传递 JSON 规则文件来配置自定义阈值、自定义目标模式或自定义检查名称。有关完整规则条件规范,请参阅 docs/rules.md。
本地仪表板
safe-change dashboard
# Dashboard running at http://localhost:4242
# Press Ctrl+C to stop.
完全离线。仅绑定到 127.0.0.1 — 从未暴露于网络。
端口配置:
# Override via CLI flag
safe-change dashboard --port 8080
// Or set in .safe-change.json
{ "dashboardPort": 8080 }
如果配置的端口已被使用,服务器将退出并出现错误。选择一个可用的端口并重试。
企业架构及特点:
/SAFE-CHANGE:极简开发级排版,与 Apple Liquid Glass 设计系统相匹配。Overview & Baseline:基线状态、活动规则、交互式回归时间线和持久日志历史记录。Enterprise Risk & Budget:风险评分计量表、实时信号分类和差异边界检查。AST Semantic Security:深层 AST 语法检查、破坏导出检测和公共 API 表面保护。Verifiable Replay & Attestations:RFC 8785 Ed25519 签名的证明信封和确定性重播会话简介。Identity & Trust Registry:授权批准者身份、公钥和多重签名仲裁状态。Tamper-Evident Audit Chain:SHA-256 密码链完整性验证和不可变审计事件流。/api/status、/api/log、/api/config、/api/rules、/api/enterprise、 /api/lease、/api/audit、/api/identity、/api/verifiable)。安全模型
safe-change 的构建永远不会成为回归的原因。
| 保证 | 详情 |
|---|---|
| 没有静默的 Git 突变 | 从不运行 git commit、git stash、git reset 或 git clean |
| 没有工作树写入 | 仅读取和散列文件 - 从不修改您的项目文件 |
| 无遥测 | 零出站网络呼叫。完全离线。 |
| 无外壳膨胀 | 命令是直接生成的。无壳插值。 |
| 没有 AI 依赖性 | 无型号,无 API 密钥,无需帐户 |
| 有限执行 | 所有检查过程的可配置超时 |
安全警告 - 配置信任边界:
.safe-change.json指定在save和check期间安全更改调用的可执行命令和参数。虽然 safe-change 使用直接进程生成而无需 shell 扩展(减轻 shell 注入),但命令会以您当前的用户权限执行。对.safe-change.json进行与Makefile、package.json脚本或 CI 工作流程相同的审查 — 切勿在来自第三方拉取的不受信任或未经审核的配置上运行safe-change save或safe-change check请求。
有关信任边界和漏洞报告,请参阅 SECURITY.md。
退出代码
| 代码 | 含义 |
|---|---|
0 |
干净——没有新的回归 |
1 |
回归——至少一项之前通过的检查现在失败了 |
2 |
未找到基线或基线已损坏 |
3 |
配置错误 |
4 |
不是 Git 存储库 |
5 |
内部错误 |
6 |
已被用户取消 |
7 |
碰撞 — 使用 --overwrite 继续 |
8 |
所有权冲突 |
9 |
不支持的代理或不兼容的目标 |
文档
| 文件 | 内容 |
|---|---|
| GUIDE.md | 完整的设置、使用和故障排除 |
| ROADMAP.md | 已实现的里程碑以及下一步计划 |
| CONTRIBUTING.md | 如何贡献 |
| SECURITY.md | 信任模型和漏洞报告 |
| docs/mcp-setup.md | 每个代理的 MCP 配置 |
| docs/rules.md | 安全规则参考 |
| docs/dashboard.md | 本地企业仪表板参考 |
| docs/verifiable-execution.md | 可验证的执行指南(AST 语义差异、重播、证明、沙箱、身份) |
| docs/verifiable-execution-architecture.md | 高保证可验证执行架构规范 |
| docs/persistent-log.md | 持久安全日志 |
| docs/runtime-verification.md | 多智能体运行时验证矩阵 |
| docs/enterprise-rollout.md | 企业上线及验收指南 |
| docs/enterprise-skill-policy.md | 规范策略、组合、保证模式和配置文件不变量 |
| docs/operations-runbook.md | 操作、事件和回滚操作手册 |
| SUPPORT.md | 支持和严厉政策 |
| SECURITY.md | 安全政策和报告 |
| skills/safe-change/SKILL.md | 规范代理技能 |