msradam/xanthe-incident-agent
GitHub: msradam/xanthe-incident-agent
一个基于状态机门控的事件响应 Agent 框架,通过约束 AI 操作顺序来确保事件处置流程合规且全程可审计。
Stars: 0 | Forks: 0
# Xanthe 事件 Agent
一个在**既定轨道上**驱动 runbook 的事件响应 Agent。流程是一个普通的
[XState](https://stately.ai/docs/xstate) 状态机,作为 MCP server 由
[Xanthe](https://github.com/msradam/xanthe) 挂载,而 Agent 只能执行状态机
允许的操作。分工如下:
- **状态机**拥有流程(你不能在诊断前进行缓解,在恢复验证前解决,或者在撰写事后复盘之前关闭事件),
- **Agent**提供判断(假设、根本原因、缓解措施),
- **账本**是审计跟踪(每一步和每一个被拒绝的步骤,通过哈希链串联)。

过早的 `resolve` 会被服务器拒绝,而不是听凭模型的判断,并且该拒绝会被记录下来。当事件被 `closed` 时,状态机的上下文就是一份完整的
事后复盘,这是作为强制执行正确顺序的副作用而生成的。
## 运行它
```
npm install
```
### 离线(确定性策略,无需 API key)
```
npm start
```
脚本化策略会遍历相同的门控 runbook 直至解决,并验证账本。
### 配合 Claude
```
npm run agent # or: MODEL=claude-opus-4-8 npm run agent
```
使用 [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/overview),
通过你现有的 Claude Code 登录进行身份验证(无需 API key)。Xanthe 服务器被
注册为 MCP server,因此 Claude 只能通过门控的 `step` / `state`
工具进行操作:它读取状态,描述每一步操作,从拒绝中恢复,并撰写事后复盘。
它始终受到 runbook 的约束。
## 运行效果
```
gate check: resolve before mitigating -> refused (legal here: triage)
driving the runbook:
detected triage -> triaged
triaged page_oncall -> engaged
engaged form_hypothesis -> investigating
...
resolved write_postmortem -> closed
final state: "closed" (terminal: true)
postmortem assembled by being forced through the runbook: { ...severity, rootCause, ... }
ledger: intact (10 entries, including the refused gate check)
```
## 运行手册
`machine/incident-runbook.ts` 是普通的 XState。你可以编辑它,或者将 Agent 指向你自己的
runbook。Xanthe 在挂载时会对其进行验证,并拒绝会自动推进的机器,因此它始终是一个
由 Agent 逐个决策驱动的门控流程。
## License
Apache-2.0。
标签:AI智能体, MITM代理, 库, 应急响应, 状态机, 自动化攻击, 自动化运维