@agent_forge/forge-darwin-x64 1.83.0 → 1.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/README.md +16 -13
- package/bin/forge +0 -0
- package/package.json +1 -1
package/bin/README.md
CHANGED
|
@@ -62,7 +62,7 @@ forge trace feat/demo # 查看任务的完整证据链
|
|
|
62
62
|
<table>
|
|
63
63
|
<tr>
|
|
64
64
|
<td width="50%" valign="top"><strong>🚦 任务级门禁</strong><br/>每个开发任务走 3 道门禁:实现 → 验证 → 完成,门禁之间有活动检查防止跳阶段。</td>
|
|
65
|
-
<td width="50%" valign="top"><strong>🪝 实时 Hook 拦截</strong><br/>
|
|
65
|
+
<td width="50%" valign="top"><strong>🪝 实时 Hook 拦截</strong><br/>27 个内置 Hook,在 AI 写代码的同时自动检查质量、防止绕过(读改前置 / 文件监控 / 高危拦截)。</td>
|
|
66
66
|
</tr>
|
|
67
67
|
<tr>
|
|
68
68
|
<td valign="top"><strong>🛡️ 安全纵深防御</strong><br/>三层防御架构:工具拦截 → 文件监控 → 自身保护。Agent 无法经 bash 绕道篡改。</td>
|
|
@@ -197,7 +197,7 @@ Layer 1: PreToolUse 快速拦截
|
|
|
197
197
|
└─ bash-guard: Bash → 检测写文件模式
|
|
198
198
|
|
|
199
199
|
Layer 2: PostToolUse 文件监控
|
|
200
|
-
└─ file-sentinel: Bash → 对比执行前后 git
|
|
200
|
+
└─ file-sentinel: Bash → 对比执行前后 git 状态,未授权变更隔离到 DataDir/quarantine/(可恢复)
|
|
201
201
|
|
|
202
202
|
Layer 3: 会话结束验证
|
|
203
203
|
└─ task-verify: 检查任务完成度 + 主分支保护 + 自身版本
|
|
@@ -206,7 +206,7 @@ Layer 3: 会话结束验证
|
|
|
206
206
|
Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑 task JSON 等方式绕过——bash-guard 拦截工具层,file-sentinel 监控文件层,task-guard 保护配置层。
|
|
207
207
|
|
|
208
208
|
<details>
|
|
209
|
-
<summary><b>📖 内置 Hook 完整清单(
|
|
209
|
+
<summary><b>📖 内置 Hook 完整清单(27 个)</b></summary>
|
|
210
210
|
|
|
211
211
|
| Hook | 触发时机 | 功能 |
|
|
212
212
|
|------|----------|------|
|
|
@@ -216,7 +216,8 @@ Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑
|
|
|
216
216
|
| **assertion-check** | Write/Edit 前 | 检测断言弱化(t.Fatal → t.Log、assert! 被删除等),advisory 提醒不阻塞(agent 自检) |
|
|
217
217
|
| **bash-guard** | Bash 前 | 检测命令中的写文件模式(writeFile、cat >、sed -i 等),无任务时 WARN(源码随后被 file-sentinel 隔离) |
|
|
218
218
|
| **gate-cmd-form** | Bash 前 | 门禁命令嵌组合形态(分号续行/截断管道/grep 掩蔽/\|\| 链/多门禁连刷)时 **BLOCKED 拦截**——分号让前一门禁 BLOCKED 后链条照走、截断管道吞掉 BLOCKED 文本面,退出码契约被系统性削弱(设计 C;delivery-hardening 墙-1a:1.67 机械版本门 ratchet 生效,会话阻断上限 5 有界;逃生 FORGE_GATE_CMD_FORM=0 落 checklog 审计;重发为单条门禁命令或仅用 && 串联) |
|
|
219
|
-
| **
|
|
219
|
+
| **task-drift** | Bash 前(活跃任务内) | git 边界命令(commit/merge/建分支)发生在任务分支之外时拦截——自 1.66 起由 advisory 转 BLOCK(机械版本门),会话阻断上限 5 次后回落 advisory;逃生 `FORGE_TASK_DRIFT=0`(落 checklog 审计);出口:回任务分支提交、推进门禁或 `forge task abort` |
|
|
220
|
+
| **hazard-guard** | Bash 前 | 高危命令(`rm -rf`、`git push --force`、`DROP TABLE/SCHEMA`、`TRUNCATE`、`GRANT ALL`、`kubectl delete`、`docker system prune`、无 WHERE 的 `DELETE/UPDATE`、解释器内联删除如 `python -c "os.remove(...)"` 等)human-in-the-loop 拦截:block + 指引 agent 向用户说明风险 → 用户在自己的终端运行 `forge hazard confirm --last` 登记 5min 限时标记(confirm 只接受真人终端)→ 重试放行(confirm 链是唯一放行路径,`FORGE_ALLOW_HAZARD` 已移除) |
|
|
220
221
|
| **auto-compile** | Write/Edit 后 | advisory 提醒用对应技术栈编译命令自检(go build / cargo check / mvn / tsc 等),不强制编译 |
|
|
221
222
|
| **workflow-test-guard** | Write/Edit 后 | 改 `.github/workflows/*.yml` 后自动跑 `internal/ci` 守护测试,把"沙盒异常"即时反馈给 agent(不依赖 CI 兜底),是 release.yml test→goreleaser→npm needs 链的实时守护层 |
|
|
222
223
|
| **file-sentinel** | Bash 后 | 监控文件变更,未授权修改隔离到 DataDir/quarantine/(`forge data-dir` 查看路径,可恢复,不删除) |
|
|
@@ -224,7 +225,7 @@ Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑
|
|
|
224
225
|
| **failure-track** | 命令失败后(PostToolUseFailure) | 记录 CheckToolFailure 观察;失败文本命中编译/测试类指纹(`undefined:`/`error TS`/`error[E`/`--- FAIL` 等)时注入 compile-fix-loop skill 事实性指针(advisory 不阻断——失败已发生) |
|
|
225
226
|
| **subagent-track** | 子 agent 结束(SubagentStop) | 记录 agent_id/agent_type/交付长度+首行摘要到 checklog(归因数据——此前子 agent 活动 forge 侧零记录);纯观察,无输出无阻断 |
|
|
226
227
|
| **test-nudge** | Write/Edit 后(活跃任务内) | 事中测试提醒:连写 ≥3 个源码文件且无配对测试写入时注入一次 test-discipline skill 事实性提示(advisory,每连写只提示一次);测试写入重置计数;无任务静默;执法仍在 task-verify 门禁 |
|
|
227
|
-
| **task-verify** | 会话结束 |
|
|
228
|
+
| **task-verify** | 会话结束 | 任务门禁/主分支保护到 stderr+checklog(advisory);活跃任务 + 未提交代码变更时有界阻断 Stop(每会话最多 3 次,超限回落 advisory;逃生 `FORGE_TASK_VERIFY_STOP=0`) |
|
|
228
229
|
| **review-stop** | 会话结束 | code-review-gate 自动挡:未审源码变更 block 会话结束。task 模式不重复拦(task-complete 门禁 ReviewPassed 硬前置已强制),非 task 模式按 diff stamp 决策;并发会话检测——其他 session 有活跃任务时放行(调研 session 不被拦) |
|
|
229
230
|
| **skill-scan** | 会话开始 | advisory:扫描 ~/.claude/skills 安全性(`forge skills audit`,21 条安全规则),补 install 门控缺口(手动 clone/junction/git pull 进入的 skill),全局 hook 不依赖 forge project |
|
|
230
231
|
| **mcp-scan** | 会话开始 | advisory:扫描项目级 `.mcp.json` 的 server 配置(管道执行/任意包执行 npx·uvx·dlx·bunx/内联代码/非 https URL/env 明文凭证),补 skill-scan 盲区(攻击者可经 PR 植入恶意 server,clone 即自动连接);只审 config 层,runtime tool description 注入(Tool Poisoning)不在能力内,全局 hook |
|
|
@@ -232,8 +233,10 @@ Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑
|
|
|
232
233
|
| **task-resume** | 会话开始 | advisory:只输出 `[forge-session]` 管理横幅一行(用户级 CLAUDE.md 据此判断是否启用 forge 协议)。不注入接续视图、不锚定 session、不推送待认领任务——接续按需拉取:用户说「继续某某任务」走 `forge task resume --match`,说「还有哪些任务没完成」走 `forge task list --open`;项目级 hook |
|
|
233
234
|
| **compact-resume** | 压缩后(claude-code / codex) | PostCompact 时设 `ResumeStale=true` 标志(PostCompact 不在 additionalContext 注入点,只设标志等下个 prompt 重注入),context-rot 抗机制根治层·设标志半边 |
|
|
234
235
|
| **resume-reinject** | 用户提交时(claude-code / codex) | 检测 `ResumeStale=true`(刚压缩过)→ 输出当前任务的完整接续上下文并清标志;未压缩时静默。压缩只丢当前 session 的工作记忆,补回它不打扰用户,context-rot 抗机制根治层·重注入半边 |
|
|
236
|
+
| **conventions-context** | 会话开始 + 压缩后 | advisory:`forge conventions init` 建档后每会话注入 ≤15 行规范摘要(stack/lint 命令、规范声明文件、惯例要点),压缩后重注入;无档案但仓库已有 AGENTS.md 等规范时每会话一次建档建议 |
|
|
237
|
+
| **conventions-write** | Write/Edit 前 | advisory:写源码或测试文件时注入本仓库规范声明文件指针与同目录范例文件(每目录每会话一次);无档案时静默 |
|
|
235
238
|
| **doc-lint** | PostToolUse(Write\|Edit) | advisory:被写的 .md 命中 D1-D11 L1 规则时注入命中清单(规则/行号/修复方向,按命中签名会话内去重),写时反馈提前于 complete 的 doc gate(output-readability-gates-v2.md P1-C),Go 原生实现 |
|
|
236
|
-
| **skill-trigger** | 多事件(Pre/PostToolUse、SessionStart、Stop、UserPromptSubmit,按宿主能力接线) | 通用声明式 skill 触发判定:按各 skill `metadata.triggers` 的 event/when 条件(coding_intent / source_changed_uncommitted / test_command_failed / task_active_no_review / skill_file_touched)匹配上下文,advisory 注入 skill 加载指引;Go 原生实现(failure-track
|
|
239
|
+
| **skill-trigger** | 多事件(Pre/PostToolUse、SessionStart、Stop、UserPromptSubmit,按宿主能力接线) | 通用声明式 skill 触发判定:按各 skill `metadata.triggers` 的 event/when 条件(coding_intent / source_changed_uncommitted / test_command_failed / task_active_no_review / skill_file_touched)匹配上下文,advisory 注入 skill 加载指引;Go 原生实现(Go 原生共 9 个:本 hook 与 failure-track、subagent-track、test-nudge、doc-lint、gate-cmd-form、task-drift、conventions-context、conventions-write;其余 18 个为内嵌 bash 脚本) |
|
|
237
240
|
|
|
238
241
|
</details>
|
|
239
242
|
|
|
@@ -330,15 +333,15 @@ Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑
|
|
|
330
333
|
| `forge init --profile <lite\|standard\|full>` | W0.3 接线档位:lite=拦截+管线+状态最小集(12 hook/6 事件),standard=完整现行(默认),full=预留位;持久化 `~/.forge/profile`,FORGE_PROFILE env 可覆盖,运行时门即时生效 |
|
|
331
334
|
| `forge eval dashboard [--dry-run] [--json]` | Track B 遥测(C4/C7):escape 率/off_churn/自举通过率(Wilson 95% CI + 误用注记;样本低于字典下限只出 INSUFFICIENT)。快照落 `~/.forge/evals/forge/snapshots/` |
|
|
332
335
|
| `forge eval harness-audit [--json]` | A–G harness 修复的事前/事后度量(docs/design/harness-fixes-a-g-2026-09.md M):checklog × toollog(2s 双记去重)× 任务 × hazard 一次算出 skill-trigger 日均触发/按通道转化/inline 跟随/verification-driver 精度、next-hint 采纳、门禁命令形态 C1–C3、refs-critical 下钻(按 host)、封印后归因泄漏、hazard 双投递、coverage 拦后转 pass;`--json` 带口径字段,两机回测只比同口径基线(`evals/harness-audit-*-baseline-*.json`) |
|
|
333
|
-
| `forge eval golden run [--dir <dir>] [--repeats N] [--rewrite-manifest] [--json]` | 门禁 golden 标注集重放:precision/fpr(Wilson 区间)+ 确定性重放一致率;用例集指纹钉在 `evals/forge/golden/MANIFEST.sha256`,不符拒绝运行(`--rewrite-manifest`
|
|
336
|
+
| `forge eval golden run [--dir <dir>] [--repeats N] [--rewrite-manifest] [--release] [--json]` | 门禁 golden 标注集重放:precision/fpr(Wilson 区间)+ 确定性重放一致率;用例集指纹钉在 `evals/forge/golden/MANIFEST.sha256`,不符拒绝运行(`--rewrite-manifest` 仅限显式轮换)。用例 `layer: test` 只在 `--release` 时运行,每次给 test 层查询计数 +1 并落 `eval-golden-test-query` 行 |
|
|
334
337
|
| `forge eval golden private-init` / `rotate [--max-cases N]` | 私有 golden 子集(0700,永不进 VCS)与季度轮换(oracle 复验 + 最老优先淘汰 + 审计行) |
|
|
335
338
|
| `forge eval traps run [--dir <dir>]` | 对抗陷阱重放(14 用例:测试削弱/伪造审计证据/虚假完成 + cheat-scan 七模式族 11 例——type-suppression/error-swallow/dead-branch/comment-only-fix/comment-as-debt/phantom-import/path-assumption,经 gate push --dry-run 推送边界探测;ImpossibleBench 思想);capture 率与行动清单 |
|
|
336
339
|
| `forge eval redteam` | seeded-bug 红队演练(oracle-pipeline L6):对验证链自身注入五类雷(零验收交付/internal 零引用导出/吞错/类型抑制/heldout gap),逐颗用既有检查函数判定拦截——escaped 或设施故障即如实披露(exit 非 0 供 CI 门禁);与 traps 互补:traps 回放过去,redteam 注入现在 |
|
|
337
340
|
| `forge eval oracle run [--suite evals/oracle] [--arm both\|scanner\|acceptance] [--repeats N] [--image <img>] [--json] [--out <md>]` | 变更级沙箱考卷(v0,docs/design/sandbox-oracle.md):每条用例在临时 git 仓库里回放一次变更——扫描臂调与被测门禁同一函数 `ScanCheatPatternsRange` 量 cheat 召回/类别准确率/误报(known_fp 不进分母),验收臂在 `docker run --network none` 里先跑可见测试(OFF)再挂 held-out(ON)量逃逸率;套件指纹(用例 sha256)写进报告可复算,`--repeats` 检出确定性漂移(flips)。实测 v0:召回 86%(6/7,唯一漏网是无机械签名的语义 stub——盲区被记录而非漏测)、误报 0/3、逃逸 100%→0% |
|
|
338
|
-
| `forge eval judge-audit --scores <file>` | 判分器受审:重放极差 + 与人工标注 Cohen's κ;κ<0.6 该判分器 BLOCKED 决策降级 ADVISORY |
|
|
341
|
+
| `forge eval judge-audit --scores <file>` | 判分器受审:重放极差 + 与人工标注 Cohen's κ;κ<0.6 该判分器 BLOCKED 决策降级 ADVISORY。分数可带 `pair_original`/`pair_swapped`(a\|b\|tie)做成对位置交换审计,翻转率 >10% 判 high systematic bias |
|
|
339
342
|
| `forge eval resume-drill [--dir <dir>]` | 接续演练(C3):脚本化断点续做断言(仅回归对比,绝对值不外宣) |
|
|
340
|
-
| `forge eval run --manifest <file> --profile <off\|gates-only\|full> --model <m> [--repeats N] [--wallclock <d>] [--forge-ref <ref>]` | Track A 端到端基准运行(四元组 scorecard + pass^k 曲线 + 预算截断披露;`--forge-ref` 标注被测 forge 版本,四元组之一);真实执行需 `FORGE_EVAL_SMOKE=1`,否则确定性 scripted
|
|
341
|
-
| `forge eval decompose --manifest <file> --models <a,b> [--profiles off,gates-only,full] [--repeats N]` | 方差分解大体检:HV̄/MV̄ + 排名翻转数 + η²_p + 三档差值(full−off 整体贡献 / full−gates-only 注入层 / gates-only−off
|
|
343
|
+
| `forge eval run --manifest <file> --profile <off\|gates-only\|full> --model <m> [--repeats N] [--wallclock <d>] [--forge-ref <ref>] [--variants a,b,c]` | Track A 端到端基准运行(四元组 scorecard + pass^k 曲线 + 预算截断披露;`--forge-ref` 标注被测 forge 版本,四元组之一);真实执行需 `FORGE_EVAL_SMOKE=1`,否则确定性 scripted 替身。开跑前 preflight:带 `test_cmd` 的容器任务须声明 `oracle_cmd`,oracle 臂须全过、只跑判分的 do-nothing 臂须全败,否则 BLOCKED exit 2(`FORGE_EVAL_PREFLIGHT=skip` 逃生,证据封顶 Weak);`leakage_cmd` 声明时 leakage 分数与 pass@1 并列,高分任务列入需复核。`--variants` 声明 ≥3 个语义等价 prompt 变体时计入 CI 的扰动方差源 |
|
|
344
|
+
| `forge eval decompose --manifest <file> --models <a,b> [--profiles off,gates-only,full] [--repeats N] [--variants a,b,c]` | 方差分解大体检:HV̄/MV̄ + 排名翻转数 + η²_p + 三档差值(full−off 整体贡献 / full−gates-only 注入层 / gates-only−off 纯门禁代价);三档差值带分层 bootstrap 95% CI,跨零时固定表述「在 n=X 次运行下未检测到显著差异;最小可检测效应 Y pp」 |
|
|
342
345
|
| `forge eval report [--quarter 2026-Q3]` | 季度自评测报告(汇编已落盘证据;缺失如实标注,绝不补造) |
|
|
343
346
|
| `forge eval otel [--out <file>] [--limit N]` | checklog → OTLP/JSON 导出(OpenTelemetry 通道:审计行进企业 SIEM/APM;scope=forge.checklog versioned mapper,`--limit` 只导最新 N 条) |
|
|
344
347
|
| `forge eval aat [--out <file>] [--limit N]` | checklog → IETF agent-audit-trail 形状 JSONL(链式 prev_hash + trust_level L0-L3;versioned mapper,meta 头声明全部有意偏离——标准卡位,见 docs/compliance/standards-crosswalk.md) |
|
|
@@ -388,12 +391,12 @@ Agent 无法通过 `node -e "fs.writeFileSync()"`、`cat > file`、直接编辑
|
|
|
388
391
|
| `forge review status` | 显示当前审查状态 |
|
|
389
392
|
| `forge enforcement [--sample N] [--json]` | 执法健康报告(只读聚合 checklog+会话 markers+野外申报):task-guard advisory/blocked 计数、无视升档会话、缓冲窗口超时违规(升档后 3 次编辑窗口内未补救——建任务或 wild 申报——则落违规记录)、无任务测试编辑、wild 申报数;双环信号(升档超阈→审查规则本身而非加码执法)与降格信号(提升规则零阻断零升档→zombie rule 复审)。`--sample N` 随机抽已完成任务 join 其会话遥测——"无视升档仍完成且未被阻断"样本标强制复盘(无灾≠安全);随机化使审计不可预演 |
|
|
390
393
|
|
|
391
|
-
**高危命令 human-in-the-loop**:`forge hazard` 让高危命令拦截从 session 级 skill 变成 always-on 自动挡——hazard-guard hook(PreToolUse Bash)检测 `rm -rf` / `git push --force` / `git reset --hard` / `DROP DATABASE|TABLE|SCHEMA` / `TRUNCATE` / `GRANT ALL` / `kubectl delete` / `docker system prune` / `shred` / 无 WHERE 的 `DELETE|UPDATE` 等 → block 并指引 agent
|
|
394
|
+
**高危命令 human-in-the-loop**:`forge hazard` 让高危命令拦截从 session 级 skill 变成 always-on 自动挡——hazard-guard hook(PreToolUse Bash)检测 `rm -rf` / `git push --force` / `git reset --hard` / `DROP DATABASE|TABLE|SCHEMA` / `TRUNCATE` / `GRANT ALL` / `kubectl delete` / `docker system prune` / `shred` / 无 WHERE 的 `DELETE|UPDATE` 等 → block 并指引 agent 向用户说明风险 → 用户在自己的终端运行 `forge hazard confirm --last` 登记 5min 限时标记(agent 自行运行会被拒)→ 重试放行。阻断但放行权在人,而非无条件硬 block:合法高危操作(删 build 产物)确认后能继续;`FORGE_ALLOW_HAZARD` env 豁免已移除(可被 agent 自我放行滥用),confirm 链是唯一放行路径。
|
|
392
395
|
|
|
393
396
|
| 命令 | 说明 |
|
|
394
397
|
|------|------|
|
|
395
|
-
| `forge hazard confirm --last` |
|
|
396
|
-
| `forge hazard confirm <命令> [--fingerprint <hex>]` | 登记一次高危命令确认(5min 内同命令重试放行;`--fingerprint` 回传 hook 输出的 hex
|
|
398
|
+
| `forge hazard confirm --last` | 确认最近一条被拦命令(从事件日志取指纹,零复制转写,推荐;须真人终端) |
|
|
399
|
+
| `forge hazard confirm <命令> [--fingerprint <hex>]` | 登记一次高危命令确认(5min 内同命令重试放行;`--fingerprint` 回传 hook 输出的 hex 指纹;须真人终端) |
|
|
397
400
|
| `forge hazard status` | 列出当前有效确认及剩余时间 |
|
|
398
401
|
|
|
399
402
|
**写入范围冻结**:`forge freeze` 把 on-demand-guards 的 /freeze 目录锁定从「agent 每回合自检」的 prompt 型护栏落地为真 hook——激活后 freeze-guard hook(PreToolUse Write|Edit,排在 task-guard 之前优先判定)硬阻断所有冻结路径之外的写入,长会话/压缩后不漂移。支持多路径、相对路径(相对当前目录归一化)、Windows 大小写不敏感比较。
|
package/bin/forge
CHANGED
|
Binary file
|
package/package.json
CHANGED