Open-Inspect:受Ramp启发的开源编码代理,功能丰富且支持多模型!
后台代理Open-InspectOpen-Inspect是一个受Ramp的Inspect启发的开源后台代理编码系统。概览Open-Inspect提供了一个托管的后台编码代理具备以下功能当你专注于其他事务时它能在后台处理任务可访问完整的开发环境Node.js、Python、git、浏览器自动化、VS Code支持从任何地方进行连接包括Web UI、Slack、GitHub PR、Linear问题或Webhook支持多人会话多人可实时协作能创建PR并将提交正确归因于发起提示的用户可按计划运行如Cron作业、Sentry警报和Webhook触发的自动化任务能生成并行子任务这些子任务可在独立的沙箱中同时运行可选择使用不同的AI模型如Anthropic Claude、OpenAI Codex通过ChatGPT订阅或OpenCode Zen。安全模型仅单租户重要提示此系统仅设计用于单租户部署即所有用户都是同一组织的受信任成员且可访问相同的仓库。工作原理该系统使用共享的GitHub App安装来进行git操作克隆、拉取、推送。控制平面在服务器端生成短期安装令牌并根据需要通过git凭证助手将其提供给沙箱。这意味着所有用户共享相同的GitHub App凭证。GitHub App必须安装在你组织的仓库上系统的任何用户都可以访问该App有权限访问的任何仓库系统在创建会话前不会验证用户是否有权限访问特定仓库创建PR时使用GitHub用户的OAuth令牌。对于使用GitHub登录的用户会使用其GitHub OAuth令牌创建PR确保正确归因且用户只能在有写入权限的仓库上创建PR。以其他方式如Google登录的用户没有SCM令牌因此他们的PR会使用共享的GitHub App机器人。令牌架构令牌类型用途范围GitHub App令牌代理git克隆/拉取/推送认证App已安装的所有仓库用户OAuth令牌创建PR、获取用户信息用户有权限访问的仓库沙箱认证令牌沙箱到控制平面的会话调用单个会话WebSocket令牌实时会话认证单个会话为何仅支持单租户此架构遵循Ramp的Inspect设计该设计是为内部使用而构建的所有员工都是受信任的并且可以访问公司仓库。对于多租户部署你需要为每个租户安装GitHub App在会话创建时进行访问验证在数据模型中实现租户隔离。部署建议部署在你组织的SSO/VPN之后确保只有授权员工可以访问Web界面仅在预期的仓库上安装GitHub App因为App的安装范围决定了系统可以访问的内容限制登录方式配置允许的GitHub用户、电子邮件域名或活跃的GitHub组织成员身份ALLOWED_GITHUB_ORGS使用GitHub的仓库选择功能在安装App时选择特定的仓库而不是“所有仓库”。架构┌──────────────────┐│ Clients ││ ┌──────────────┐ ││ │ Web / Slack │ ││ │ GitHub / Lin.│ ││ │ Webhooks │ ││ └──────────────┘ │└────────┬─────────┘▼┌────────────────────────────────────────────────────────────────────┐│ Control Plane (Cloudflare) ││ ┌──────────────────────────────────────────────────────────────┐ ││ │ Durable Objects (per session) │ ││ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────────────┐ │ ││ │ │ SQLite │ │WebSocket│ │ Event │ │ GitHub │ │ ││ │ │ DB │ │ Hub │ │ Stream │ │ Integration │ │ ││ │ └─────────┘ └─────────┘ └─────────┘ └───────────────┘ │ ││ └──────────────────────────────────────────────────────────────┘ ││ ┌──────────────────────────────────────────────────────────────┐ ││ │ D1 Database (repo-scoped secrets) │ ││ └──────────────────────────────────────────────────────────────┘ │└────────────────────────────────┬───────────────────────────────────┘▼┌────────────────────────────────────────────────────────────────────┐│ Data Plane (Sandbox Backend) ││ ┌──────────────────────────────────────────────────────────────┐ ││ │ Session Sandbox │ ││ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ ││ │ │ Supervisor│──│ OpenCode │──│ Bridge │─────────────────┼──┼──▶ Control Plane ││ │ └───────────┘ └───────────┘ └───────────┘ │ ││ │ │ │ │ │ │ │ │ │ │ Full Dev Environment │ ││ │ │ (Node.js, Python, git, agent-browser) │ ││ └──────────────────────────────────────────────────────────────┘ │└────────────────────────────────────────────────────────────────────┘软件包软件包描述control-planeCloudflare Workers Durable ObjectswebNext.js Web客户端sandbox-runtime共享的沙箱内代理运行时modal-infraModal沙箱基础设施daytona-infraDaytona快照基础设施opencomputer-infraOpenComputer模板基础设施slack-botSlack集成通过消息启动会话github-botGitHub集成自动审查、提及linear-botLinear集成将问题转化为编码会话shared共享类型和实用工具快速开始若要获取实际的设置指南本地 贡献者 部署路径请从docs/SETUP_GUIDE.md开始部署说明请参考docs/GETTING_STARTED.md若要了解架构和核心概念请阅读docs/HOW_IT_WORKS.md若要设置定期任务请参阅docs/AUTOMATIONS.md。关键特性1.快速启动通过多层预热会话几乎可以立即启动文件系统快照每次提示后沙箱状态会被保存后续会话将恢复状态而非重新克隆预构建镜像可按仓库设置 镜像或按环境设置 环境进行切换每30分钟使用最新提交和依赖项重新构建主动预热在你开始输入时沙箱就会开始启动无需按下回车键。2.多仓库会话与环境一个会话可以在单个沙箱中处理多个仓库临时集合在新会话选择器中最多选择10个仓库每个仓库会并排克隆代理可以进行协调更改并为每个仓库打开一个PR环境将仓库集合保存为一个命名环境设置自己的密钥范围和可选的预构建镜像然后像选择任何仓库一样从选择器中启动它。模型相关内容请参阅docs/HOW_IT_WORKS.md环境预构建请参阅docs/IMAGE_PREBUILD.md。3.多人会话多个用户可以在同一会话中协作在线状态指示器显示谁处于活跃状态在git提交中提示会归因于其作者实时流式传输到所有连接的客户端。4.提交归因提交会归因于发送提示的用户// 为每个提示配置git身份await configureGitIdentity({name: author.scmName,email: author.scmEmail,});5.多供应商模型支持选择适合你任务的AI模型并可对每个会话的推理工作进行控制供应商模型AnthropicClaude Haiku 4.5、Sonnet 4.5/4.6、Opus 4.5/4.6/4.7/4.8、Fable 5OpenAIGPT 5.4、GPT 5.5、5.3 Codex、5.3 Codex SparkOpenCode ZenKimi K2.5/K2.6、MiniMax M2.5、Qwen3.7 Max、GLM 5/5.1可选加入、Z.AI Coding Plan GLM 5.2可选加入OpenAI模型可通过OAuth与你现有的ChatGPT订阅配合使用无需单独的API密钥。完整的模型列表请参阅docs/AVAILABLE_MODELS.mdOpenAI设置说明请参阅docs/OPENAI_MODELS.md。客户端集成可在团队日常工作的任何地方与代理进行交互Web UI提供完整的会话管理功能包括实时流式传输、模型/推理选择器、终端面板和多人在线状态显示Slack机器人通过提及或私信启动会话结果会以线程形式回复。可通过App Home设置每个用户的模型和分支偏好。具体请参阅Slack集成文档GitHub机器人在PR打开时自动审查或响应PR评论中的提及。可按仓库进行配置。具体请参阅GitHub集成文档Linear机器人在问题中提及或分配代理以启动编码会话发布进度活动并链接生成的PR。具体请参阅Linear集成文档Webhook通过经过身份验证的HTTP POST从任何外部系统触发会话。自动化可安排定期任务或对外部事件做出反应无需人工干预Cron调度支持每小时、每天、每周、每月或自定义的5字段Cron表达式并支持时区设置Sentry警报在出现新错误、回归或关键指标警报时自动进行分类入站Webhook使用JSONPath条件过滤器来决定哪些有效负载可以启动会话多仓库分发一个计划的自动化任务可以在最多10个仓库上运行为每个仓库打开一个单独的会话和拉取请求连续失败3次后自动暂停提供手动触发按钮并记录完整的运行历史。设置说明请参阅docs/AUTOMATIONS.md。沙箱环境每个会话都在一个隔离的沙箱后端中运行具备完整的开发环境预安装软件Node.js 22、Python 3.12、Bun、git、GitHub CLI、build-essential浏览器自动化agent-browser CLI搭配无头Chromium可用于截图、视觉差异比较和UI验证Code-server可选的基于浏览器的VS Code连接到会话工作区Web终端由ttyd驱动的终端可从会话UI访问端口隧道通过加密隧道暴露最多10个开发服务器端口。在.openinspect/start.sh运行之前URL可在沙箱内的/workspace/.tunnels.env中找到详细信息密钥管理采用AES-256-GCM加密支持全局、按仓库或按环境的作用域在启动时作为环境变量注入。支持批量粘贴导入.env文件。子任务生成代理可以将工作分解为并行的子会话spawn-task可在其自己的沙箱中创建一个子会话并立即返回父任务继续工作子任务在单独的分支上并行运行提供get-task-status和cancel-task进行协调实施深度限制和按仓库的防护措施。仓库生命周期脚本仓库可以在.openinspect/下定义两个可选的启动脚本#.openinspect/setup.sh (配置脚本)#!/bin/bashnpm installpip install -r requirements.txt#.openinspect/start.sh (运行时启动脚本)#!/bin/bashdocker compose up -d postgres redissetup.sh用于镜像构建和全新会话。在使用预构建镜像和恢复快照启动时会跳过该脚本。对于全新会话setup.sh失败不会导致会话启动失败但在镜像构建模式下失败则会导致构建失败start.sh在每个非构建会话启动时运行全新、预构建镜像、恢复快照。如果该脚本存在且失败则会话启动失败默认超时时间SETUP_TIMEOUT_SECONDS默认300秒START_TIMEOUT_SECONDS默认120秒两个钩子都会接收到OPENINSPECT_BOOT_MODEbuild、fresh、repo_image、snapshot_restore。当共享安装有权限时钩子中的git操作可以对配置的SCM主机上的其他私有仓库进行身份验证。许可证MIT致谢受Ramp的Inspect启发并使用以下技术构建Modal - 云沙箱基础设施Daytona - 云开发沙箱Vercel Sandbox - 云沙箱基础设施OpenComputer - 云沙箱基础设施Cloudflare Workers - 边缘计算OpenCode - 编码代理运行时Next.js - Web框架