bourne44/agenstral

GitHub: bourne44/agenstral

面向 AI 编程代理的本地安全审计与治理工具,提供仓库风险扫描、tool call 策略管控和防篡改审计日志。

Stars: 0 | Forks: 0

# Agenstral 让 AI agent 在真实的代码库中自由运行是一件让人捏把汗的事,这并非因为它 带有恶意,而是因为当出现问题时,你并不总是能解释清楚到底 发生了什么。当别人问起具体是哪些代码行、什么时候以及为什么被修改时,一句*“agent 改了我们的部署脚本”*是交代不过去的。而*“相信我,日志没问题”*也绝对不是你想给合规审查人员的那类回答。 Agenstral 是一个轻量级的本地 CLI 工具,它能帮你在将代码库交给 agent 运行的前后,回答以下三个问题: - **代码库里到底有哪些真实风险?** 硬编码的机密信息、`curl | bash` 脚本、未锁定的 actions、连接到不可信触发器的 AI agent 工作流(即 GitLost 类问题)、游离的 MCP 配置。 - **这个 agent 被允许做什么?** 一份清晰易读的纯 JSON 策略,且每次都以相同的方式进行评估。 - **到底发生了什么?** 每一条记录都与上一条进行哈希链式绑定的审计日志,任何篡改都会破坏链条,从而被 `audit verify` 发现。 所有的运行都在你的本地机器上完成。没有云端,没有遥测,不需要账号,也不存在供应商锁定,日志完全归你所有。它是免费且开源的 (Apache-2.0):一个严格的 TypeScript CLI,并且具有**零运行时依赖**。 ## 30 秒上手 本代码库附带了一个刻意包含风险的示例项目,位于 [examples/demo](examples/demo) 中。将扫描器指向它: ``` npm install npm run build node dist/cli.js scan --workspace examples/demo ``` 你会看到真实的扫描结果: ``` Agenstral Scan Workspace: .../examples/demo MCP servers: 0 Guidance files: 1 Findings: 13 - [high] AI agent workflow can be triggered by untrusted input (issue_comment -> agent) - [critical] Secret-looking value in package script (AWS key in a deploy script) - [high] Command downloads and executes remote code (curl | bash in postinstall) - [high] Command can destroy repository state (rm -rf ./ in a script) - [high] GitHub Actions workflow uses pull_request_target - [high] GitHub Actions workflow grants write-all permissions - [medium] GitHub Actions workflow uses unpinned actions - [medium] Command uses an unpinned package runner (npx ...@latest) - [medium] Agent guidance is missing safety-critical sections ... ``` 在 CI 环境中,你可以添加 `--fail-on medium` 参数,这样当扫描发现问题时,命令将以非零状态码退出。 ## 安装 从源码安装(目前可用): ``` git clone https://github.com/bourne44/agenstral.git cd agenstral npm install npm run build npm link # makes `agenstral` available on your PATH ``` 一旦发布到 npm: ``` npm install -g agenstral # 或者,无需安装: npx agenstral scan --workspace . ``` ## 日常命令 请在你要让 agent 工作的代码库目录中运行以下命令。 ``` # 1. 在 agent 启动前查看风险项 agenstral scan --workspace . agenstral scan --workspace . --fail-on medium # gate for CI agenstral scan --workspace . --sarif --out .agenstral/scan.sarif # for GitHub code scanning # 2. 设定规则,然后针对它们测试单个 tool call agenstral policy init agenstral check --call examples/dangerous-tool-call.json # -> Decision: DENY # 3. 让 agent 通过 Agenstral 执行操作(对每个 action 执行 policy + audit) agenstral run --approve-ask -- node --version # a shell command agenstral proxy -- # an MCP server # 4. 证明发生了什么 agenstral audit verify .agenstral/audit.jsonl # verifies the hash chain agenstral report # local HTML report agenstral bundle # portable evidence bundle for handoff agenstral state # one-shot summary of everything ``` 审计日志是纯粹的追加式 JSONL 文件,没有什么花哨的,也没有用到什么区块链。每条 记录只是携带了前一条记录的哈希值。如果你编辑或删除了任何过去的记录行,`audit verify` 就会失败并报出 `hash mismatch`。这就是它的全部原理,但这足以证明历史记录在事后没有被篡改过。 ## 命令参考 - `scan`:发现 MCP 配置、agent 指导文件、有风险的 package 脚本、有风险的 GitHub Actions 工作流(包括连接到不可信触发器的 AI agent)、暴露的机密信息,以及缺失的项目控制措施。 - `doctor`:跨清单、必要文件、CI、scan、audit、Git 状态以及被忽略的生成路径,检查发布和交接的准备就绪情况。 - `policy init`:创建一个初始的 `.agenstral/policy.json`。 - `check`:根据策略评估单个 tool-call JSON 文件。 - `run`:通过 Agenstral 策略和审计日志执行本地 shell 命令。 - `proxy`:在 Agenstral 策略和审计日志的约束下运行 stdio MCP server。 - `audit view` / `audit verify`:打印紧凑的时间线 / 验证哈希链。 - `map`:为贡献者打印项目组件映射图。 - `report`:生成包含扫描结果、审计时间线、Git 状态和系统映射的本地 HTML 报告。 - `bundle` / `bundle verify`:生成 / 验证可移植的 JSON 证据包以及同步的 HTML 报告。 - `state`:打印紧凑的项目状态。 ## 状态 这是一个处于早期的项目,我宁愿坦诚相待。目前我认为比较可靠的部分是 **scan** 和 **tamper-evident audit**。它们现在已经非常稳定且实用了。 通过 `proxy` 进行的运行时中介目前有意设计得比较保守,并且仍在不断完善中;我宁愿发布一个言出必行的小工具,也不愿发布一个虚张声势的大而全的玩意。 [Roadmap](docs/ROADMAP.md) 中规划了它未来的发展方向。 如果你克隆了它并把它指向一个真实的代码库,我非常乐意听听你的 期望与实际发现之间的差异。欢迎提交 Issues 和反馈粗糙的边缘问题。 ## 设计原则 - **本地优先**:无需账号、云服务或遥测即可发挥作用。 - **确定性**:策略决策是可解释且可测试的。 - **小而精的核心**:策略、扫描、审计和代理代码相互分离。 - **默认安全**:除非策略另有规定,否则未知的 tool calls 需要经过批准。 - **朴素的接口**:JSON 策略、JSONL 审计、CLI 命令以及可预测的输出结果。 ## 文档 - [项目映射图](docs/PROJECT_MAP.md):为贡献者提供的简洁导航。 - [架构](docs/ARCHITECTURE.md):各个层级、契约以及扩展路径。 - [威胁模型](docs/THREAT_MODEL.md):Agenstral 能防护什么,不能防护什么。 - [工作流](docs/WORKFLOW.md):本地开发循环与发布关卡。 - [发布](docs/RELEASE.md):本地发布流程和发布检查清单。 - [路线图](docs/ROADMAP.md):短期与长期的发展方向。 - [项目定位](docs/POSITIONING.md):本项目是什么,以及刻意不去碰什么。 - [更新日志](CHANGELOG.md):按版本记录的显著变更。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。完整的本地检查流程命令为 `npm run release:check`。 ## 许可证 Apache-2.0。请参阅 [LICENSE](LICENSE)。
标签:AI编程代理, DevSecOps, Homebrew安装, TypeScript, 上游代理, 多模态安全, 安全合规, 安全插件, 文档结构分析, 时序数据库, 网络代理, 自动化攻击