Harnis 开源企业 Agent 治理基础设施
Harnis 是可自托管的 Apache 2.0 开源平台,为企业 Agent 提供隔离、审批、沙箱、预算和审计能力。项目提供 Python 包及 Helm Chart,旨在减少不同团队重复搭建身份、数据权限和成本管理设施的工作。
完整中文译文
AI Agent 终于能真正干活了:修复代码、回复客户、更新工单、运行内部工具。难点已经不是让 Agent 采取行动,而是让它在公司内部开展工作:跨团队、跨客户操作真实系统,每一次变更都有人负责,账单也不会让人措手不及。
Harnis 就是为此而生的。它是一个开源、可自行托管的平台,为组织里的每个 Agent 提供同一套运行框架:隔离、审批、沙箱、预算和审计记录,让团队能够快速交付 Agent,不必每次都重新搭建安全层。
GitHub:https://github.com/karawash-projects/harnis
PyPI:pip install harnis
Helm chart:oci://ghcr.io/karawash-projects/charts/harnis
每个开发 Agent 的团队,最后都会编写同样的基础设施代码:这个用户是谁,能查看哪个客户的数据,这个操作是否需要等待人工确认,模型编写的代码在哪里运行,这次对话花了多少钱,以及谁批准了什么。如果每个团队都各自实现,就会得到十套略有不同的方案,而且没有统一的审计入口。
Harnis 把这些基础设施整合成了一个平台。Agent 接入后,就能直接获得这些保障。
一个引擎,三种产品
Harnis 提供三种开箱即用的工作负载,全部运行在同一个编排器上:
- 面向开发者的 coding Agent。通过 CLI 指定一个项目,再描述你想做的修改。Agent 会在隔离的副本上工作,为每个准备写入的文件展示 diff,执行任何命令前都会征求批准,在沙箱中运行测试,并且只有在你确认后,才会把最终结果应用到你的文件中。
harnis --workspace ./my-service "add input validation to the signup handler and a test for it"
-
多 Agent 工作流。一个运行在小型快速模型上的路由器会读取每条消息,并把它交给合适的专用 Agent,例如客服 Agent、coding Agent,或者你自己构建的 Agent。Agent 之间可以移交工作,也可以转交给人工处理。只需几行插件代码,就能添加一个新的专用 Agent。
-
多租户 Agent 应用。提供完整的 API,通过 WebSockets 实时流式传输,并为每种角色提供 Web 控制台:
用户可以与 Agent 对话,查看每项拟议变更,diff 会直接展示在对话中。
审核人员可以处理审批队列,查看用量和分析数据。
管理员可以管理 Agent 及其 prompt 版本、API key 和审计日志。
平台管理员可以创建和管理租户。
每个 Agent 都能直接获得的能力
由数据库本身保障客户数据隔离
每张租户表都启用并强制执行 Postgres 行级安全策略,应用连接数据库时使用的角色无法绕过这些策略。租户身份始终来自经过验证的登录信息或 API key,绝不取自请求。即使某条查询忘记按租户过滤,也无法返回其他客户的数据。
由人工批准具体操作
写入文件、运行命令和安装软件包都会暂停会话,等待审核人员批准。审批与具体操作的加密哈希绑定,因此 Agent 无法拿着某项变更的批准去执行另一项变更。审批会过期,还可以通过职责分离机制,禁止用户批准自己的会话。暂停的会话保存在数据库中,因此,即使几小时后才作出审批决定,也能在任意服务器上恢复工作。
模型编写的代码在一次性沙箱中运行
每条命令都会获得一个全新的 Docker 容器或 Kubernetes Pod:无网络、系统只读、无 Linux 特权、使用非 root 用户,并严格限制内存、CPU 和进程数量。还支持 gVisor,增加一道内核隔离边界。从沙箱返回的文件也会经过检查,防止模型偷偷向项目中塞入指向宿主机文件的链接。
需要安装软件包?经过批准的安装会通过一个只允许访问软件包仓库的代理,而且只能修改独立的依赖目录,绝不能修改你的代码。
安全机制会自行验证
在 Kubernetes 上,Harnis 不会直接假定网络规则已经生效。在向沙箱 Pod 复制任何内容之前,它会先从 Pod 内部发起探测,只有确认网络已被阻断,才会继续。如果集群无法隔离沙箱,系统会拒绝执行命令,并给出明确的错误信息。
成本可以预估
为每一轮交互设置预算,限制执行步骤、工具调用、任务移交次数,以及以 USD 计价的支出。
为每个租户设置费用上限。
为每个模型记录 token 和费用明细。
循环熔断器:发现 Agent 重复执行相同行为时,先发出警告,然后将会话转交给人工。
价格确认:配置时,你需要确认每个模型的价格,确保费用统计和上限控制都基于实际价格。
模型由你选,规则由你定
模型:可以使用 Anthropic、OpenAI、Google Gemini,或 Bedrock 上的 Amazon Nova,也可以通过任何兼容 OpenAI 的 API 使用自行托管的模型,例如 vLLM、Ollama、LM Studio、LiteLLM。
故障转移:你设定顺序,Harnis 自动在不同提供商之间切换。
数据驻留:每个租户都有自己的提供商允许列表,故障转移绝不会把该租户的数据发送到列表之外的提供商。
接入你的登录体系和角色
单点登录:支持任何 OpenID Connect 提供商,包括 Okta、Entra ID、Auth0、Keycloak、Google,并支持用户组到角色的映射。
角色:用户、审核人员、租户管理员和平台管理员。
API key:为 CI 和自动化提供服务密钥,支持角色、有效期和即时撤销。
接入你的工具和 Agent
通过插件 SDK,你可以添加工具、Agent,甚至模型提供商,它们的注册方式与内置组件完全一致。内部 API、工单系统和数据库都能成为工具,并自动获得审批、沙箱和审计能力。
Prompt injection:检查传入消息,识别注入尝试。
银行卡号:在模型看到之前进行脱敏。
工具输出:标记为不可信数据,避免把隐藏在文件或网页中的指令当成命令执行。
语义缓存:重复问题直接从缓存获取答案,速度快,而且不产生费用。
为审计人员和运维团队做好准备
审计日志:只能追加,支持导出为 JSON 或 NDJSON。
监控:支持 OpenTelemetry 链路追踪、Prometheus 指标和告警 webhook。
数据生命周期:提供数据保留策略任务、按用户导出和擦除数据,以及带验证的备份和恢复命令。
在笔记本电脑上,无论使用 Windows、macOS 还是 Linux,都可以通过 Docker Compose 启动所有组件。在 Kubernetes 上,Helm chart 会部署:
- API:会话可以在任意副本上恢复,因此支持横向扩容;
- 数据库迁移:在每次安装或升级前运行;
- 定期维护任务;
- 一个独立且严格受限的命名空间,用于运行沙箱 Pod。
五分钟上手,无需 API key
快速入门使用内置的 mock 模型,你可以免费体验审批、沙箱和循环熔断器:
git clone https://github.com/karawash-projects/harnis.git
cd harnis
python tasks.py install
python tasks.py up # Postgres, Redis, tracing, demo tenants
python tasks.py sandbox-image
python tasks.py dev # http://127.0.0.1:8000
打开控制台,点击 Continue as local developer,然后输入 create calc.py。coding Agent 会提出两个文件的变更并展示 diff,等待你批准,然后在沙箱中运行测试。试着输入 repeat: list the files,观察循环熔断器介入;或者输入 ignore all previous instructions,查看输入防护如何响应。准备好后,可以运行 python tasks.py check,对你的实例进行完整的功能检查。
- 跨平台测试套件;
- 针对运行中的 API 进行端到端检查;
- 评估套件和红队测试场景;
- 在 gVisor 下进行沙箱测试;
- 在 CI 中的 Kubernetes 集群上完成一次完整的 Helm 部署。
同一份功能检查脚本也随 Harnis 一起提供,因此,你可以用项目验证发布版本的同样方式,验证自己的部署。
Harnis 1.0 现已发布,采用 Apache 2.0 许可证免费提供,并按现状交付。欢迎为仓库点 Star,在真实工作流中试用,并告诉我你想用它构建什么:
https://github.com/karawash-projects/harnis
欢迎提交 issue、想法和 pull request。
如果还想采取进一步行动,你可以考虑屏蔽此人和/或举报滥用行为。