langchain-ai/open-swe

GitHub: langchain-ai/open-swe

一个基于 LangGraph 和 Deep Agents 构建的组织级异步编程 Agent 框架,帮助团队在 Slack/Linear/GitHub 中自动化处理代码任务并提交 PR。

Stars: 7242 | Forks: 886

Open SWE Logo

用于构建组织内部编程 Agent 的开源框架。

License GitHub Stars Built on LangGraph Built on Deep Agents Twitter / X

像 Stripe、Ramp 和 Coinbase 这样的顶尖工程组织正在构建它们自己的内部编程 Agent —— Slackbots、CLIs 和 Web 应用程序,这些工具在工程师已经工作的场景中为他们提供服务。这些 Agent 连接到内部系统,拥有正确的上下文、权限和安全边界,以便以最少的人工监督运行。 Open SWE 是这一模式的开源版本。它基于 [LangGraph](https://langchain-ai.github.io/langgraph/) 和 [Deep Agents](https://github.com/langchain-ai/deepagents) 构建,为你提供了与那些公司内部构建的相同架构:云沙箱、Slack 和 Linear 调用、子 Agent 编排以及自动创建 PR —— 随时可以根据你自己的代码库和工作流进行定制。 ## 架构 Open SWE 做出了与最佳内部编程 Agent 相同的核心架构决策。以下是它如何映射到 [这篇文章](https://x.com/kishan_dahya/status/2028971339974099317) 中描述的 Stripe 的 Minions、Ramp 的 Inspect 和 Coinbase 的 Cloudbot 的模式: ### 1. Agent Harness — 组合于 Deep Agents 之上 Open SWE 不再分叉现有的 Agent 或从头开始构建,而是**组合**了 [Deep Agents](https://github.com/langchain-ai/deepagents) 框架 —— 类似于 Ramp 在 OpenCode 之上构建的方式。这为你提供了一条升级路径(拉取上游改进),同时允许你为组织定制编排、工具和中间件。 ``` create_deep_agent( model="anthropic:claude-opus-4-6", system_prompt=construct_system_prompt(repo_dir, ...), tools=[http_request, fetch_url, commit_and_open_pr, linear_comment, slack_thread_reply], backend=sandbox_backend, middleware=[ToolErrorMiddleware(), check_message_queue_before_model, ...], ) ``` ### 2. Sandbox — 隔离的云环境 每个任务都在其自己的**隔离云沙箱**中运行 —— 一个具有完整 Shell 访问权限的远程 Linux 环境。Repo 被克隆进去,Agent 获得完全权限,任何错误的爆炸半径都被完全控制。没有生产环境访问权限,没有确认提示。 Open SWE 开箱即支持多个沙箱提供商 —— [Modal](https://modal.com/)、[Daytona](https://www.daytona.io/)、[Runloop](https://www.runloop.ai/) 和 [LangSmith](https://smith.langchain.com/) —— 你也可以插入自己的提供商。有关详细信息,请参阅 [定制指南](CUSTOMIZATION.md#1-sandbox)。 这遵循了三家公司都遵循的原则:**先隔离,然后在边界内给予完全权限。** - 每个线程获得一个持久的沙箱(在后续消息中重用) - 如果沙箱变得不可达,会自动重新创建 - 多个任务并行运行 —— 每个任务都在自己的沙箱中,无需排队 ### 3. Tools — 精选而非堆砌 Stripe 的关键洞察:*工具的筛选比数量更重要。* Open SWE 遵循这一原则,提供了一小套专注的工具集: | Tool | Purpose | |---|---| | `execute` | 在沙箱中执行 Shell 命令 | | `fetch_url` | 以 Markdown 格式获取网页 | | `http_request` | API 调用 (GET, POST 等) | | `commit_and_open_pr` | Git commit + 打开一个 GitHub draft PR | | `linear_comment` | 在 Linear tickets 上发布更新 | | `slack_thread_reply` | 在 Slack threads 中回复 | 加上内置的 Deep Agents 工具:`read_file`、`write_file`、`edit_file`、`ls`、`glob`、`grep`、`write_todos` 和 `task` (子 Agent 生成)。 ### 4. Context Engineering — AGENTS.md + Source Context Open SWE 从两个来源收集上下文: - **`AGENTS.md`** — 如果 repo 在根目录包含一个 `AGENTS.md` 文件,它会从沙箱中读取并注入到 system prompt 中。这是你仓库级别的 Stripe rule files 等价物:编码约定、测试要求和架构决策,每个 agent 运行都应遵循。 - **Source context** — 完整的 Linear issue (标题、描述、评论) 或 Slack thread 历史记录被组装并传递给 agent,因此它以丰富的上下文开始,而不是通过工具调用发现一切。 ### 5. Orchestration — Subagents + Middleware Open SWE 的编排有两个层级: **Subagents:** Deep Agents 框架原生支持通过 `task` 工具生成子 agent。主 agent 可以将独立的子任务分发到隔离的子 agent —— 每个子 agent 都有自己的中间件堆栈、todo 列表和文件操作。这类似于 Ramp 用于并行工作的 child sessions。 **Middleware:** 确定性中间件钩子在 agent 循环周围运行: - **`check_message_queue_before_model`** — 在下一次 model 调用之前注入后续消息(运行期间到达的 Linear 评论或 Slack 消息)。你可以在 agent 工作时给它发消息,它会在下一步接收你的输入。 - **`open_pr_if_needed`** — 后置 agent 安全网,如果 agent 自己没有提交并打开 PR,该中间件会自动完成。这是 Stripe 确定性节点的轻量级版本 —— 确保关键步骤无论 LLM 行为如何都会发生。 - **`ToolErrorMiddleware`** — 优雅地捕获和处理工具错误。 ### 6. Invocation — Slack, Linear, 和 GitHub 文章中的所有三家公司都一致认为 **Slack 是主要的调用界面**。Open SWE 也是如此: - **Slack** — 在任何 thread 中提及 bot。支持 `repo:owner/name` 语法来指定要处理的 repo。Agent 会在 thread 内回复状态更新和 PR 链接。 - **Linear** — 在任何 issue 上评论 `@openswe`。Agent 会读取完整的 issue 上下文,用 👀 反应以确认,并将结果作为评论回传。 - **GitHub** — 在 agent 创建的 PR 上标记 `@openswe`,让它处理审查反馈并将修复推送到同一分支。 每次调用都会创建一个确定性的 thread ID,因此同一 issue 或 thread 上的后续消息会路由到同一个正在运行的 agent。 ### 7. Validation — Prompt-Driven + Safety Nets Agent 被指示在提交前运行 linters、formatters 和 tests。`open_pr_if_needed` 中间件充当后盾 —— 如果 agent 结束时没有打开 PR,中间件会自动处理。 这是你可以为组织扩展 Open SWE 的一个领域:添加确定性 CI 检查、视觉验证或审查关卡作为额外的中间件。具体方法请参阅 [定制指南](CUSTOMIZATION.md#6-middleware)。 ## 对比 | Decision | Open SWE | Stripe (Minions) | Ramp (Inspect) | Coinbase (Cloudbot) | |---|---|---|---|---| | **Harness** | Composed (Deep Agents/LangGraph) | Forked (Goose) | Composed (OpenCode) | Built from scratch | | **Sandbox** | Pluggable (Modal, Daytona, Runloop, etc.) | AWS EC2 devboxes (pre-warmed) | Modal containers (pre-warmed) | In-house | | **Tools** | ~15, curated | ~500, curated per-agent | OpenCode SDK + extensions | MCPs + custom Skills | | **Context** | AGENTS.md + issue/thread | Rule files + pre-hydration | OpenCode built-in | Linear-first + MCPs | | **Orchestration** | Subagents + middleware | Blueprints (deterministic + agentic) | Sessions + child sessions | Three modes | | **Invocation** | Slack, Linear, GitHub | Slack + embedded buttons | Slack + web + Chrome extension | Slack-native | | **Validation** | Prompt-driven + PR safety net | 3-layer (local + CI + 1 retry) | Visual DOM verification | Agent councils + auto-merge | ## 功能 - **Trigger from Linear, Slack, or GitHub** — mention `@openswe` in a comment to kick off a task - **Instant acknowledgement** — reacts with 👀 the moment it picks up your message - **Message it while it's running** — send follow-up messages mid-task and it'll pick them up before its next step - **Run multiple tasks in parallel** — each task runs in its own isolated cloud sandbox - **GitHub OAuth built-in** — authenticates with your GitHub account automatically - **Opens PRs automatically** — commits changes and opens a draft PR when done, linked back to your ticket - **Subagent support** — the agent can spawn child agents for parallel subtasks ## 快速入门 - **[Installation Guide](INSTALLATION.md)** — GitHub App creation, LangSmith, Linear/Slack/GitHub triggers, and production deployment - **[Customization Guide](CUSTOMIZATION.md)** — swap the sandbox, model, tools, triggers, system prompt, and middleware for your org ## 许可证 MIT
标签:AI编程助手, Deep Agents, DLL 劫持, LangChain, LangGraph, Linear集成, LLM应用开发, Python, Slack机器人, 云端沙箱, 企业级AI, 内部工具, 大语言模型, 子代理编排, 开发效率工具, 开源SWE, 异步编程代理, 数据管道, 无后门, 智能体框架, 自动化代码生成, 软件工程, 轻量级, 逆向工具