onecli/onecli

GitHub: onecli/onecli

OneCLI 是一个凭证网关,通过在 AI agent 和外部服务之间透明地注入真实密钥,让 agent 无需直接接触 API 凭证。

Stars: 2741 | Forks: 159

OneCLI

专为 AI agent 打造的机密保险库。
一次存储,随处注入。agent 永远不会接触到密钥。

官网 · 文档 · Discord

How OneCLI works ## 什么是 OneCLI? OneCLI 是一个开源网关,位于您的 AI agent 和它们调用的服务之间。您无需将 API 密钥硬编码到每个 agent 中,只需在 OneCLI 中存储一次凭证,网关就会透明地注入它们。agent 永远不会看到这些机密。 **我们为什么开发它:** AI agent 需要调用数十个 API,但将原始凭证直接提供给每个 agent 会带来安全风险。OneCLI 通过一个统一处理身份验证的网关来解决这个问题,让您只需在一个地方管理访问权限、轮换密钥,并监控每个 agent 的操作。 **工作原理:** 您将真实的 API 凭证存储在 OneCLI 中,并给您的 agent 分发占位符密钥(例如 `FAKE_KEY`)。当 agent 通过网关发起 HTTP 调用时,OneCLI 网关会将请求匹配到正确的凭证,将 `FAKE_KEY` 替换为 `REAL_KEY`,对其进行解密,并注入到出站请求中。agent 永远不会接触真实的机密。它只是像往常一样发起普通的 HTTP 调用,而由网关在后台处理替换。 ## 架构 OneCLI Architecture - **[Rust 网关](apps/gateway)**: 快速的 HTTP 网关,负责拦截出站请求并注入凭证。agent 通过 `Proxy-Authorization` header 使用 access token 进行身份验证。 - **[Web 仪表盘](apps/web)**: 基于 Next.js 构建的应用程序,用于管理 agent、机密和权限。它提供了网关所调用的 API,用于解析每次请求需要注入哪些凭证。 - **机密存储**: 采用 AES-256-GCM 加密的凭证存储。机密仅在请求发起时被解密,通过 host 和 path 模式进行匹配,并由网关作为 header 或 URL 查询参数注入。 ## 快速开始 在本地运行 OneCLI 的最快方式: ``` curl -fsSL https://onecli.sh/install | sh ``` 或者,如果您希望手动运行: ``` git clone https://github.com/onecli/onecli.git cd onecli docker compose -f docker/docker-compose.yml up -d --wait ``` 打开 **http://localhost:10254**,创建一个 agent,添加您的机密,然后将您 agent 的 HTTP 网关指向 `localhost:10255`。 ## 功能 - **透明凭证注入**: agent 只需发起普通的 HTTP 调用,由网关处理身份验证 - **加密机密存储**: 采用静态 AES-256-GCM 加密,仅在请求发起时解密 - **Host 与 path 匹配**: 通过模式匹配将机密路由到正确的 API endpoint - **多 agent 支持**: 每个 agent 都拥有具备独立作用域权限的专属 access token - **设置简单**: `curl -fsSL https://onecli.sh/install | sh` 即可一键启动所有服务(应用 + PostgreSQL) - **双身份验证模式**: 适用于本地使用的单用户模式(免登录),或适用于团队的 Google OAuth 模式 - **Rust 网关**: 快速且内存安全的 HTTP 网关,支持针对 HTTPS 的 MITM 拦截 - **[Vault 集成](docs/vault-integration.md)**: 连接 Bitwarden(或其他密码管理器)以实现按需凭证注入,无需在服务器上存储机密 ## 项目结构 ``` apps/ web/ # Next.js app (dashboard + API, port 10254) gateway/ # Rust gateway (credential injection, port 10255) packages/ db/ # Prisma ORM + migrations ui/ # Shared UI components (shadcn/ui) docker/ Dockerfile # App image (gateway + web) docker-compose.yml ``` ## 本地开发 ### 前置条件 - **[mise](https://mise.jdx.dev)** (用于安装 Node.js、pnpm 及其他工具) - **Rust** (用于网关) - **Docker** (用于 PostgreSQL) ### 设置 ``` mise install pnpm install cp .env.example .env pnpm db:generate pnpm db:up # Start PostgreSQL pnpm db:migrate # Apply migrations pnpm dev ``` 仪表盘地址:**http://localhost:10254**,网关地址:**http://localhost:10255**。 ### 命令 | 命令 | 描述 | | ------------------ | -------------------------------- | | `pnpm dev` | 以开发模式启动 Web 应用和网关 | | `pnpm build` | 生产环境构建 | | `pnpm check` | Lint + 类型检查 + 格式化 | | `pnpm db:up` | 启动 PostgreSQL (Docker) | | `pnpm db:down` | 停止 PostgreSQL | | `pnpm db:generate` | 生成 Prisma client | | `pnpm db:migrate` | 执行数据库迁移 | | `pnpm db:studio` | 打开 Prisma Studio | ## 配置 在本地开发中,所有的环境变量都是可选的: | 变量 | 描述 | 默认值 | | ----------------------- | --------------------------------- | ------------------ | | `DATABASE_URL` | PostgreSQL 连接字符串 | 参见 `.env.example`| | `NEXTAUTH_SECRET` | 启用 Google OAuth(多用户模式) | 单用户模式 | | `GOOGLE_CLIENT_ID` | Google OAuth client ID | — | | `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | — | | `SECRET_ENCRYPTION_KEY` | AES-256-GCM 加密密钥 | 自动生成 | ## 贡献 我们欢迎您的贡献!在开始之前,请阅读我们的[贡献指南](CONTRIBUTING.md)和[行为准则](CODE_OF_CONDUCT.md)。 ## 许可证 [Apache-2.0](LICENSE)
标签:AI代理, API网关, SOC Prime, 代码分析, 凭证管理, 可视化界面, 大语言模型安全, 开发工具, 机密管理, 测试用例, 自动化攻击, 请求拦截