关于 occasio
Occasio 是面向开发者和合规团队的本地代理与审计工具,用于 AI 编码 Agent。它按可配置策略控制 Agent 流量,并生成哈希链日志和可验证的证据包。
主要功能
- 01按策略控制 Agent 操作
- 02阻止读取机密并限制身份使用
- 03在本地查看外发流量
- 04验证防篡改审计链
- 05生成可移交的证据包
- 06扫描机密和策略违规
适用场景
- 01检查 Agent 发往 LLM 的内容
- 02要求 SSH 或云访问经人工批准
- 03离线验证 Agent 的 CI 运行记录
- 04在 CI 中检测策略变更
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 要读取的文件路径 |
| end_line | any | 否 | 要读取的最后一行(从 1 开始,包含该行) |
| start_line | any | 否 | 要读取的第一行(从 1 开始,包含该行) |
详细介绍
Occasio
面向 AI 编码 Agent 的本地优先审计链和身份门禁。你的提示词、工具调用和审计日志都留在你的机器上,以后还可通过密码学手段验证——Agent 可以请求身份(ssh / cloud / root),但不能悄悄假定自己拥有该身份。
Occasio 是一个本地代理,位于你的 AI 编码 Agent(Claude Code、Cline,或任何与 Anthropic API 通信的程序)和你配置的大模型端点之间。每次工具调用都会经过一个由你控制、易于阅读的策略文件。你可以实时查看哪些内容正在离开你的机器,阻止不应发生的操作,并生成一份防篡改的哈希链日志。数月后,第三方仍可离线验证这份日志,以便在你需要时证明 Agent 做过什么。
Occasio 不会向第三方发送任何数据。没有 Occasio 云服务,没有 Occasio 账户,也没有遥测。有关架构,请阅读 docs/WHY-LOCAL.md;有关它与云托管 AI 可观测性工具的区别,请阅读 docs/COMPARE.md;有关本地优先产品如何在 Apache 2.0 许可下获得资金支持,请阅读 docs/SUSTAINABILITY.md。

截图:使用合成数据运行 occasio eyes --demo——不包含真实路径,也没有真实流量。演示模式下始终显示左上角的“(demo)”徽章。
npm install -g @occasiolabs/occasio
occasio demo audit # Auditor scenario: signed attestation + cross-verifier proof (10s, no API key)
occasio demo attest # End-to-end attestation pipeline against a synthetic chain
occasio demo anomalies # Live EDR detection on a synthetic adversarial chain
occasio harness # Real Claude Code attacking a denied path — defense holds
前三个演示使用合成数据运行,因此你可以在几秒钟内查看完整流程,且无需外部依赖。第四个演示会在你的 Anthropic 登录下启动一个真实的 Claude Code 从属进程(内置身份验证——无需 API 密钥),并端到端验证防护机制。请从 demo audit 开始——它能回答唯一真正重要的问题:“证明你的 AI Agent 在 CI 中做了什么。”
身份门禁——请求,而非假定
构建此工具是为应对这样一种事件:Agent 只被要求执行部署命令,却自行通过 ssh 登录服务器并读取 env。strict 策略会精准阻止这种行为——AI Agent 可以请求身份,但不能悄悄假定自己拥有身份。
- 拒绝数据外泄,与工具无关。
printenv、cat .env、/proc/self/environ、读取私钥、通过grep搜索机密名称——无论使用哪种命令或工具读取,都会被阻止;输出绝不会到达模型。 - 借用身份需要人工介入。
ssh/scp、az/ 云控制平面、sudo/systemctl——这些操作会被默认拒绝,并返回“需要人工批准”的拒绝响应,Agent 无法自行满足审批要求。 - 握手过程会区分各方身份。 Agent 发起请求;你从自己的终端通过带外方式授权一次:
occasio init --template strict # the identity-gated posture
# agent runs `ssh deploy@host` → BLOCKED, pending apr_…
occasio approvals approve apr_… --once # you, single-use, short TTL
# the agent's retry passes through once — then it's blocked again
Agent 无法自行批准:审批控制平面位于其拒绝区内,令牌由 HMAC 签名。链中会记录 actor=ai_agent · delegator=you · approved_by=you。另有一个非代理的执行强制机制——PreToolUse 钩子(occasio hook --install)——用于覆盖未经过代理的执行。
完整设计、威胁模型和诚实说明的剩余风险(运行时间接访问、出站流量):docs/identity-gate.md。
两种使用方式
大多数人来到这里,都是为了其中一种需求——选择适合的列,然后按需浏览。
| 日常开发工作 | CI / 合规 | |
|---|---|---|
| 你想了解的问题 | “Agent 实际向 Anthropic 发送了什么?这让我花了多少钱?” | “证明 Agent 在这次运行期间做了什么。” |
| 主要命令 | occasio eyes、occasio dashboard、--budget N、--eyes、occasio scan、occasio preflight simulate | occasio attest、occasio bundle → occasio verify、occasio policy lock/diff、occasio anomalies、occasio audit verify |
| 你将获得 | 在 127.0.0.1 上运行的实时浏览器界面——查看每个出站负载、字节数明细和完整显示的脱敏内容;还可预览策略会允许或拦截的操作 | 一个便携的证据文件,第三方可通过一条命令离线验证;已签名/批准的策略锁定,以及每轮的用量限制 |
| 跳转到 | 实时可见性 · 扫描器与预检 | 证据工作流 · 策略工作流 |
两种视图读取相同的底层日志。你不必二选一——运行代理即可免费获得两者。
快速入门
初次使用? 5 分钟入门指南 将带你完整走一遍身份门控流程——安装 →
init --template strict→ 运行 Agent → 批准借用 → 验证日志。指南中的每条命令都经过测试,适用于已发布版本。
需要 Node.js ≥ 18。支持 Windows、macOS 和 Linux。
npm install -g @occasiolabs/occasio # Install
occasio doctor # Verify setup (Node, claude CLI, port, profile)
occasio init # Write ~/.occasio/policy.yml (dev-default)
occasio init --template strict # …or the identity gate: deny secrets, gate ssh/cloud/root behind approval
occasio register # Add 'claude' shell alias (one-time)
claude "read package.json and tell me the version"
注册别名后,每次调用 claude 都会透明地通过 Occasio 路由。审计链记录会累积写入 ~/.occasio/pipeline-events.jsonl。
检查运行情况:
occasio status # Session totals
occasio replay --detail # Run-level audit
occasio audit verify # Re-walk the hash chain end-to-end
occasio anomalies # Run EDR detectors over the last 15 minutes
occasio attest --run-id <uuid> # Build a behavioral attestation for one session
occasio explain <event-id> # Why was this blocked? — the matched policy rule + how to unblock
命令矩阵
按操作类型分组。(stable) = 核心功能,且有测试覆盖;(beta) = 端到端可用,但适用范围较窄;(alpha) = 脚手架。完整列表:occasio help。
| 命令 | 用途 | |
|---|---|---|
claude [args] | 通过本地代理启动 Claude Code | (stable) |
status · ledger · replay · boundary · inspect | 检查成本 / 令牌 / 单次运行审计 / 云端边界 | (stable) |
eyes · dashboard | 实时查看出站流量的浏览器/终端视图 | (beta) |
scan --file|--stdin | 可解释的机密扫描(前缀/jwt/env-key/熵),发现问题时退出码为 1 | (stable) |
preflight simulate | 预测候选操作相对于当前策略会被允许还是拦截 | (stable) |
preflight | 回溯挖掘过去开场操作模式的工具 | (beta) |
audit verify · attest [verify] | 验证哈希链 · 构建/验证已签名证明 | (stable) |
bundle --run <id> → verify <file> | 将一次运行打包为便携证据文件 · 离线验证 | (stable) |
policy show/validate/lock/diff | 检查 · lint · 记录已批准策略 · 检测偏移 | (stable) |
explain <event-id> | 将 BLOCK 与导致它的规则及解除阻止的方法关联起来 | (stable) |
anomalies | 对链进行窗口化 EDR 检测 | (beta) |
doctor [--paranoid] | 设置健康检查 · 本地优先的自审计 | (stable) |
证据工作流
生成一个文件,供审计员或 CI 接收并通过一条命令完成检查:
occasio attest --run-id <uuid> --sign # behavioral attestation (Sigstore optional)
occasio bundle --run <uuid> --out run.occasio.json # pack attestation + chain slice + policy + manifest
occasio verify run.occasio.json # 6 offline checks; exit ≠ 0 on tamper
verify 会检查架构、清单哈希、链切片完整性、策略绑定、git 状态与链的交叉核对,以及存在时的 Sigstore 签名——所有检查均依据文件中嵌入的数据进行(绝不依赖生成者的机器)。通过 git_state 行(HEAD + 差异哈希 + 已更改文件),将运行与它实际触及的代码绑定。签名是可选的;未签名的 bundle 仍会验证其他所有内容。Bundle 会嵌入生成者的绝对路径——这是一种内部审计制品;公开分享前请先审查。→ docs/VERIFY.md
策略工作流
~/.occasio/policy.yml 管理 Occasio 控制的路径:机密处理、deny_paths/allow_paths、自定义 deny_patterns、每轮 limits 以及工具路由。批准该文件并固定其状态,以防配置漂移:
occasio policy init # starter policy.yml
occasio policy validate # lint before you rely on it
occasio policy lock --sign --out policy.lock.json # record the approved policy
occasio policy diff --since policy.lock.json # CI gate: exit 1 if the policy drifted
扫描器和预检
occasio scan --file .env # explainable secret findings (masked, exit 1)
occasio preflight simulate --read ~/.ssh/id_rsa --bash "npm test" --strict # would the policy block this?
scan 绝不会以明文形式打印机密(会显示遮蔽后的片段和 SHA-256)。preflight simulate 会使用运行时所用的同一策略引擎检查候选操作,并显示匹配的规则,以及如何解除阻止。→ docs/SCAN.md · docs/PREFLIGHT.md
验证本地优先声明
occasio doctor --paranoid
扫描已安装的源代码,查找所有出站网络原语,对每个调用点进行分类,检查遥测 SDK 特征,并显示审计链状态。如果出现任何严重发现,则以非零状态码退出。使用 --paranoid --json 输出 JSON。有关此验证所依据的架构,请参阅 docs/WHY-LOCAL.md。
了解 Occasio 与 SLSA Provenance 和 CycloneDX AI-BOM 的关系:docs/SUPPLY-CHAIN-TRIANGLE.md。Occasio 负责运行时行为这一环。
实时可视化——面向开发者
审计链和签名证明回答的是审计人员的问题:“Agent 做了什么?拿出证据。” 有时,你可能也想了解一个更简单的问题:“Agent 此刻正在做什么?” 这条 HTTP 请求中有哪些内容正在离开你的设备。本次会话中有哪些文件已经发送给 Anthropic。系统提示词是什么样的。哪些内容在发送前被删去了。
occasio eyes 是一个本地浏览器 UI,地址为 http://127.0.0.1:3002,会准确展示这些信息。通过代理上的 --eyes 启用捕获(默认关闭);数据不会离开设备,所有内容都存储在 ~/.occasio/eyes/ 下。
occasio eyes --demo # synthetic data, no proxy needed (10-second tour)
occasio claude --eyes # then in another terminal:
occasio eyes # browser tab opens automatically
你可以看到:
- 按用户提示词分组的侧边栏——展开一条“读取 readme”,即可查看它实际触发的 3–6 次 HTTP 往返(让 Claude Code 的 Agent 循环一目了然)。
- 会话迷你折线图和文件汇总——查看出站数据大小随时间的变化,以及哪些文件已发送到云端、发送了多少次。
- 每次交互的字节拆分——堆叠条显示 system / 历史记录(重放)/ 本轮新增内容 / 工具封装。原本“很小”的请求竟有 124 KB,这下就说得通了:其中 108 KB 是每次都会重复发送的同一份系统提示词。
- 选项卡:Request · Response · Tools(完整的本地工具输出——由拦截器在本地处理、从未发送出去的 Read/Glob/Grep/Bash 字节)· Diff(转换前与发送内容的对比——在本地清晰查看被删去的原始机密)· Headers · Raw SSE 字节 · Stats。
- 新出站请求到达时的实时闪现提示——既便于了解情况,也适合演示。
适合屏幕录制的视图 — --sanitize
使用真实会话录制 occasio eyes 演示或截图时,通常会泄露你的身份信息:主目录路径(C:\Users\<you>\...)、操作系统用户名、Git 邮箱、真实姓名和主机名。--sanitize 标志只会在显示内容中将这些信息替换为确定性的化名,不会更改 ~/.occasio/eyes/ 下的磁盘内容,因此审计记录仍然是真实的。
occasio claude --eyes --sanitize # capture as normal
occasio eyes --sanitize # view with identity scrubbed
在浏览器 UI 中,青色圆点和 (sanitized) 徽标表示该功能已启用。类似 C:\Users\<you>\Desktop\proj 的路径会变为 /home/user-7c/Desktop/proj,并在同一会话中保持一致。
--sanitize 会处理的内容: $HOME 路径、操作系统用户名、Git user.email / user.name、主机名,以及包含身份信息的环境变量(USER、USERNAME、LOGNAME、HOME、USERPROFILE)。
不会处理的内容 — 分享前请检查:
$HOME之外的项目路径(例如D:\Work\Acme\…)- 工具输出中的 Git 远程 URL(
github.com:org/repo会泄露组织名称) - 文件内容 — 注释、提交消息或 README 中的姓名不会被自动检测。Sanitize 会根据它从操作系统和 Git 中发现的身份信息进行处理,而不会搜索任意子字符串。
- Claude Code TUI 横幅(“Welcome back X”、组织名称行)— 它会在任何 HTTP 流量出现之前打印,因此 Eyes 无法拦截。请在屏幕录制中手动裁剪。
该标志是显示过滤器,不是录制模式。同一份 Eyes 捕获内容之后可以不经脱敏地重放(只需在运行 occasio eyes 时不加该标志)。
Dashboard 与 Eyes
两者都是本地浏览器 UI,但回答的问题不同:
occasio dashboard(3001) | occasio eyes(3002) | |
|---|---|---|
| 重点 | 会话级指标:费用、节省金额、令牌数 | 每次交互的流量:发送了什么、收到了什么 |
| 粒度 | 汇总计数器 + 每个请求的摘要表 | 完整 HTTP 正文、解码后的 SSE、本地工具输出 |
| 是否需要捕获 | 否 — 读取 session.json + 每日日志 | 是 — 为代理传入 --eyes(选择启用) |
| 数据范围 | 仅元数据 | 完整负载字节(保存在本地 ~/.occasio/eyes/ 下) |
| 最适用于 | “我今天花了多少钱?” | “Agent 实际向 Anthropic 发送了什么?” |
两者都仅在 127.0.0.1 上运行。不启用 CORS、无身份验证、不连接外部网络。
命令
| 命令 | 功能 |
|---|---|
occasio(无参数) | 活跃运行的统一实时快照 |
occasio claude [args] | 启动 Claude Code,并启用 Occasio 代理 |
occasio register | 注册 claude shell 别名 |
occasio doctor | 设置健康检查 |
occasio doctor --paranoid | SaaS 防护证明扫描(--watch <s>、--sign、--json) |
occasio live | 在终端监视活跃会话(按 Ctrl-C 退出) |
occasio status | 会话总量及节省明细 |
occasio explain <event_id> | 显示单个链事件记录的内容及原因 |
occasio replay | 运行级审计(--detail、--run <id>、--attribute) |
occasio inspect | 每个请求的云边界清单 |
occasio boundary | 三列视图:已生成/已重新进入/已阻止 |
occasio ledger | 每个请求的令牌账本 |
occasio distill | 检查提炼后的工具输出 |
occasio dashboard | 位于 http://localhost:3001 的实时浏览器仪表板(会话指标) |
occasio eyes | 位于 http://127.0.0.1:3002 的浏览器界面(每次交互的流量,通过 --eyes 选择启用捕获) |
occasio audit verify | 端到端重新遍历 SHA-256 审计链 |
occasio audit repair --file <path> | 截断因崩溃而不完整的末尾行(写入 .bak) |
occasio report | 导出治理摘要(--days N、--format csv) |
occasio anomalies | 对审计链进行 EDR 检测(--window 15m、--json) |
occasio attest --run-id <uuid> | 构建行为证明谓词 v1 |
occasio attest --sign | 通过 GitHub Actions OIDC 使用 Sigstore 签名 |
occasio attest verify <file> | 端到端重新验证已签名的证明 |
occasio receipt [--run <id>] [--sign] | 简短且可分享的运行摘要(--out file、--json) |
occasio bom export [--run <id>] | 从运行切片生成 CycloneDX 1.6 ML-BOM(--out file) |
occasio compliance export [--run <id>] | 审计员资料包:链 + 收据 + BOM + 框架映射 |
occasio policy [show | validate | init | doctor] | 策略编写与诊断 |
occasio harness | 针对你的策略运行脚本化对抗场景 |
occasio redteam | 自主测试器 LLM 探测目标 Claude Code 会话 |
occasio computer-use --dry-run | 将 Computer-Use 策略应用于合成的 tool_use 块 |
occasio demo attest | 针对合成链运行端到端证明流水线 |
occasio demo anomalies | EDR 冒烟测试:合成对抗链 → 全部 4 个检测器 |
occasio selftest | 在临时链上执行进程内治理自检 |
occasio baseline [learn | compare] | 按项目建立行为基线并检测漂移 |
occasio preflight | 只读挖掘近期活动并生成策略建议 |
在 policy.yml 基础上的会话级覆盖项:
| 标志 | 效果 |
|---|---|
--preset strict | 在此会话中强制启用 block_secrets_in_tool_results |
--preset off | 纯透传,仅记录 |
--budget <N> | 硬性上限:会话费用达到 $N 时返回 HTTP 402 |
--hardened | 通过统一运行时处理 Read/Glob/Grep,并进行提炼和机密扫描 |
--eyes | 捕获出站和入站载荷,供 occasio eyes 浏览器界面使用 |
它的工作原理:四层架构
底层由四层协同完成工作——每次运行都会经过第 1–2 层;只有在你请求生成证明或运行检测器时,才会经过第 3–4 层。
第 1 层——工具调用拦截。 本地代理位于 Agent 与 Anthropic API 之间。Read、Glob、Grep、TodoRead/TodoWrite 都在你的设备上进程内运行;文件字节不会进入出站请求。精选的只读 shell 命令(git status、git log --oneline -N,可带或不带 git -C <path>,以及 echo / cd 当前工作目录前缀链)也会在进程内执行。其他 shell 读取命令(cat <file> 等)会针对其中嵌入的读取路径进行策略分析,以确保 deny_paths 始终一致地生效;但命令本身会通过 Bash 工具在服务器端执行。
第 2 层——策略执行。 每次工具调用都会触发以下某个决策:LOCAL / PASS / BLOCK / TRANSFORM;决策由 policy.yml 驱动。deny_paths 会针对解析为真实路径的绝对路径生效,因此符号链接和路径遍历变体都会解析为相同的拒绝结果。block_secrets_in_tool_results 会从所有工具输出中剔除 API 密钥和 JWT,避免它们重新进入提示词。支持热重载:编辑 policy.yml 后,变更会在下一次调用时生效,并在审计链中写入一条 policy_loaded 记录。strict 模板还增加了身份门控——deny_commands 会拦截数据外泄行为(环境变量转储、搜索密钥名称),而 identity_approval 会通过一次性、经人工批准的令牌,对身份借用行为(ssh / az / sudo)进行门控(参见身份门控——请求,不要假设)。
第 3 层——行为证明。 occasio attest --run-id <uuid> 会生成一个独立的 JSON 谓词,其中包含某个 Agent 会话完整审计链片段的承诺:每次工具调用、每次拦截、每次转换、每个已剔除的机密,以及当前策略的 SHA-256 哈希和规则摘要。--sign 会将其封装为 in-toto Statement v1,并使用 GitHub Actions OIDC 通过 Sigstore 签名(无需管理密钥)。谓词类型 URI 为 agent-attestation/v1。项目附带两个独立的参考验证器——Node(occasio attest verify)和 Python(docs/attest_verify.py);测试套件会断言它们对同一载荷的验证结果逐字节一致。
第 4 层——异常检测(EDR)。 occasio anomalies 会在审计链的指定时间窗口内运行四个检测器:拒绝率激增、文件读取量骤增、此前未见的工具输入形态,以及机密剔除率激增。严重程度会根据你的历史基线逐级提升——检测器级别上,约为正常值的 ×10–×20 时会触发 HIGH;与稀疏的正常基线相比,实际观测到的倍数通常在 ×100 至 ×1000 之间。可参阅 docs/edr-demo.md,了解可复现的纵深防御演示。
架构
agent (Claude Code / Cline / MCP / Computer Use)
│
▼ tool call
┌──────────────────────────────────────────────────────────────┐
│ Occasio proxy │
│ │
│ Layer 1: adapter parse → canonical event │
│ Layer 2: policy decision (LOCAL / PASS / BLOCK / TRANSFORM) │
│ Layer 2: deny_paths + deny_patterns + secret redaction │
│ Layer 2: native dispatch for LOCAL/TRANSFORM tools │
│ ──► row appended, SHA-256-chained │
│ Layer 4: anomaly detectors (windowed, on-demand or live) │
└──────────────────────────────────────────────────────────────┘
│
▼ cloud-bound: only PASS calls, with shaped result if TRANSFORM
Anthropic API
End of session
│
▼ occasio attest --run-id … --sign
Layer 3: signed in-toto Statement → Sigstore bundle → GitHub Check Run
│
▼ independent verifier
Node / Python / cosign — all must agree
验证
要获得已验证的证明,以下三项独立检查缺一不可:
- Sigstore 签名 — Fulcio 证书链 + Rekor 包含证明。任何符合 sigstore 规范的工具均可验证(
cosign verify-blob、sigstore-js、sigstore-python)。 - DSSE 负载 ↔ 证明谓词等价性 — 重新解码 bundle 中的 in-toto Statement,通过 RFC 8785 子集规范化谓词,并与证明谓词逐字节比较(去除
signature元数据字段)。 - 审计链完整性 — 从 GENESIS 哨兵开始,沿每个
prev_hash → hash链接执行 SHA-256 遍历,然后断言证明的first_hash和last_hash按正确的相对顺序出现在链中。
随附两个并列的参考验证器:
- Node:
occasio attest verify <file> - Python:
python docs/attest_verify.py <file>— 使用标准库 + 可选的sigstore-python,并在链检查步骤中复用docs/audit_walker.py。参见docs/python-verifier.md。
跨语言不变量(在测试套件中以 xlang: 和 xlang-float: 用例断言):对于同一负载,两个验证器在谓词等价性和审计链检查步骤上逐字节一致,包括篡改检测用例。两个规范化实现都会拒绝非整数数值,避免未来的架构悄然引入差异。
Sigstore 签名步骤使用标准的 DSSE 封装 in-toto Statement 格式;任何符合 sigstore 规范的工具均可验证(cosign verify-blob、sigstore-js、sigstore-python)。测试套件会模拟签名流程;真实的 OIDC 端到端签名与验证往返需要 GitHub Actions 环境,并由 CI 中的 integrations/attest-action/ 工作流进行测试。
第三个部分验证器在浏览器中运行,位于 integrations/attest-view/,用于拖放检查。浏览器会执行谓词等价性和审计链检查步骤,但将 Sigstore 证书链验证交由两个 CLI 之一完成(有意不在浏览器中打包 Fulcio/Rekor 信任根;页面对此有明确说明)。
为什么是现在
三个监管驱动因素正汇聚到同一项要求上:AI Agent 行为的运行时证据必须可通过密码学手段验证。
- 《欧盟 AI 法案》第 12 条要求对高风险 AI 系统进行全面的自动化日志记录。该要求自 2026 年起适用于受监管行业。
- **NIST AI RMF(GOVERN、MEASURE、MANAGE 系列)**正成为美国联邦采购的要求,并影响 FedRAMP AI 控制措施。
- SOC 2 通用标准正将 AI Agent 控制措施纳入范围 — 主要事务所的审计人员在 2026 年的审计中开始询问“给我看看 Agent 的工具调用日志”。
目前没有现成产品能够为 AI 编码 Agent 在你的 CI 中执行的操作生成已签名、可由第三方验证的证明。Occasio 以开放架构(Apache-2.0)填补了这一空白,并附带该架构的参考实现。
日志格式
所有数据都存储在本地的 ~/.occasio/ 中:
~/.occasio/
pipeline-events.jsonl # tamper-evident audit chain (SHA-256 linked)
policy.yml # active policy
session.json # current run_id, totals
logs/YYYY-MM-DD.jsonl # per-request log
baseline/<cwd-hash>.json # per-project behavior baseline (opt-in)
eyes/ # `occasio eyes` capture (opt-in via --eyes)
payload-NNNNNN.json # per-exchange metadata + extracted blocks
content/<sha> # content-addressed blob store (file bytes,
# tool outputs) — dedup by SHA-256
审计链行架构记录在 docs/AUDIT.md 中。每一行都包含 prev_hash 和 hash(SHA-256 十六进制值),第一行通过固定的 GENESIS 哨兵(64 个零)接入链中。occasio audit verify 和 docs/audit_walker.py 是两个独立的遍历器实现。
演示
- 纵深 EDR 防御 — 真实的 Claude Code 在你的策略下攻击被拒绝的路径,所有拦截均被保留,EDR 触发次数达到基线的 HIGH ×100–×1000。可在 2 分钟内复现。
- 参考流水线 — 包含 AI Agent 的 PR → GitHub Action 通过 Sigstore 无密钥方式签署证明 → PR 上的 Check Run → 离线独立验证。
- 跨协议治理 — 同一条
deny_paths规则在 Claude Code 的 HTTP 代理和 MCP 服务下生成完全相同的BLOCK行。
参考
spec/agent-attestation/v1/README.md— 谓词类型规范schemas/agent-attestation-v1.json— 权威 JSON Schemadocs/AUDIT.md— 审计链行架构和规范序列化规则docs/compliance-mapping.md— SOC 2 通用标准映射docs/python-verifier.md— 独立 Python 验证器docs/edr-demo.md— 纵深防御演练docs/reference-pipeline.md— 端到端 CI 流水线integrations/attest-action/— 用于签署并发布 Check Run 的 GitHub Actionintegrations/attest-view/— 用于证明文件的静态浏览器查看器
要求
- Node.js ≥ 18
- Claude Code(
npm install -g @anthropic-ai/claude-code)——或任何遵循ANTHROPIC_BASE_URL的 Agent - Python 3(可选)——独立验证器和 LAO 上下文裁剪所需
sigstore-python(可选)——为 Python 验证器添加 Sigstore 加密步骤
许可证
Occasio 根据 Apache License 2.0 开源,其中明确授予专利许可,以支持安全的企业使用。0.6.6 及更早版本根据 MIT License 发布,并将永久沿用 MIT 许可证。
欢迎贡献,贡献内容遵循 Apache-2.0;请根据 DCO 对提交进行签署(git commit -s)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。