Coding Agent 下半场:从个人提效到组织级研发体系

简介: Coding Agent 下半场聚焦组织级研发体系,本文围绕 AgentScope Harness 展开了沙箱隔离、会话恢复等通用架构,为企业提供工程化解决方案参考。

作者:AgentScope 社区


当下还在古法手搓代码的开发者都是在奔着非遗传承人的目标去了,绝大多数都已经用上了 Claude Code、Cursor 这类 Coding Agent。方向对了,但场景不同,解法也不同 —— 开发者自己在本地装个 AI 助手提效,和在组织内部搭起一套 AI 驱动的研发协作体系,是完全两个维度的事情。前者已经有成熟的产品了,后者才刚刚开始。本文聊的就是后者。

什么是组织级 Coding Agent,都有谁在做?

2025 年底到 2026 年初,一件有意思的事情发生了:Stripe、Ramp、Coinbase 这三家公司几乎同时公开了各自的内部 Coding Agent —— Stripe 叫 Minions,Ramp 叫 Inspect,Coinbase 叫 Cloudbot。三家公司独立开发,没有互相参考,最终却不约而同地收敛到了几乎相同的架构上。


这不是巧合。当你把 Coding Agent 从“一个人在终端里用”升级成“整个团队通过 Slack / GitHub Issue 随时触发”,你就会被同一组工程问题逼到同一条路上去——你需要沙箱隔离执行环境,需要让 Agent 在中断后能续上之前的工作,需要让它接得住 Slack、GitHub、飞书各种入口,需要防止一个用户的失控循环把全公司的模型额度烧光。


LangChain 团队看到了这个规律。2026 年 3 月,他们发布了 Open SWE —— 一个把 Stripe/Ramp/Coinbase 的共同模式提炼成开源框架的项目。Open SWE 的 README 开头写得很直接:


Elite engineering orgs like Stripe, Ramp, and Coinbase are building their own internal coding agents — Slackbots, CLIs, and web apps that meet engineers where they already work.


"Meet engineers where they already work" —— 这句话点出了组织级 Coding Agent 的核心设计理念:不是让工程师学一个新工具,而是让 Agent 钻进工程师已经在用的 Slack 频道、GitHub Issue、IM 对话里,变成团队工作流的一部分。


AgentScope Java 2.0 的 AgentScope Harness 模块走的是同一条路。本文以官方示例 agentscope-examples/agents/agentscope-codingagent 为线索,讲清楚一个生产级 Coding Agent 是怎么用 Harness 拼出来的 —— 每一行配置解决了什么问题,怎么从本地 CLI 一路演进到挂在 GitHub Webhook 后面的企业服务。

先把定位说清楚

在往下走之前,必须把“我们要做的”和“Claude Code / Cursor 这类本地工具”区分清楚。


Claude Code 优化的是“我一个人写代码更快” —— 你打字、它干活、你看着它干活、你随时打断纠正。状态在你本机,触发者就是你自己,信任边界就是你信你自己的机器。


本文要搭的东西解决的是另一个问题:“团队里某个小任务我都不用自己看,扔给 Agent 跑完开 PR 我 review 一下就行” 。触发者可能是任何一个 Issue 评论者,Agent 在远端跑十几分钟到一小时,没人盯着。Stripe 的工程师在 Slack 里 @Minions 说句“帮我修这个 bug”,回头收到一个 draft PR —— 这就是组织级 Coding Agent 该有的样子。


这两种形态在功能集上有交集 —— 都能写代码、跑命令、改文件,但底层的工程约束完全不同。一个类比:Claude Code 是你自己的私家车,你信任驾驶员(你自己),所以不需要安全气囊以外的防护。组织级 Coding Agent 是出租车公司的运营车辆 —— 乘客(触发者)不是车主,驾驶(执行)发生在远端,你需要行车记录仪、GPS 追踪、里程限制、紧急制动,还得保证一辆车坏了不影响整个车队。


Open SWE 把这个哲学总结成一句话: "Isolate first, then give full permissions inside the boundary."  先隔离,再放权。AgentScope Harness 的设计一模一样。

那厂商的 Cloud Agent 呢?

事实上很多厂商也在提供 SaaS 的产品服务,比如 GitHub Copilot Coding Agent 已经可以在 Issue 上 assign 触发,在云端跑完自动开 draft PR;Claude Code 也有 headless 模式,能在 CI 里被程序化调用。


理念上没有本质区别 —— 沙箱隔离、异步触发、PR 驱动产出 —— 厂商是把头部公司验证过的模式产品化了,做成了开箱即用的 SaaS 服务。而 Stripe、Ramp、Coinbase 这些公司选择自建,更多是出于自身工程体系的特殊性:内部系统的深度集成、数据合规的要求、工作流的定制程度,这些因素让它们走了自建这条路。


两条路不矛盾,哪条更合适,取决于组织自身的约束和需求。AgentScope Harness 要做的事情是把实现这套系统的工程问题(如沙箱、会话恢复、多通道接入、长期记忆等)抽象成可组合的基础能力,让选择自建的团队不用从零开始。

5 分钟跑通:先有感性认识

最快的体验路径 —— 一个环境变量、一个 Maven 命令,本地文件系统上跑一个交互式 REPL。无需 Docker、无需 webhook、无需 GitHub App。

# 1. 设置模型 key(默认 DashScope;OpenAI / Anthropic 也支持)
export DASHSCOPE_API_KEY=sk-...
# 2. 在仓库根目录构建依赖(之后跑可以省略)
cd agentscope-java
mvn install -pl agentscope-examples/agents/agentscope-codingagent -am -DskipTests -q
# 3. 启动 CLI
mvn exec:java -pl agentscope-examples/agents/agentscope-codingagent

启动后会出 banner,然后到 You> 提示符。Agent 工作在自己的 workspace ~/.agentscope/codingagent/workspace/ —— 标准玩法是把目标仓库克隆进来再操作:

You> write hello.txt with a haiku about Java
You> clone https://github.com/owner/repo into the workspace and tell me what it does
You> review https://github.com/owner/repo/pull/42
You> /exit

什么都没配,跑起来就有完整的工作区、会话持久化和长期记忆。这是 AgentScope Harness 价值的第一层。


想让每个 session 隔离到 Docker 沙箱?多一步:

docker build \
  -t agentscope/coding-sandbox:latest \
  agentscope-examples/agents/agentscope-codingagent/src/main/docker/coding-sandbox/
export SANDBOX_TYPE=docker
mvn exec:java -pl agentscope-examples/agents/agentscope-codingagent

这就引出了组织级 Coding Agent 真正的工程核心。

真正的难题:从“能跑一次”到“7×24 服务一个团队”

跑通一个 demo 很快。难的是让它在生产环境里稳定地服务一整个团队,一天接几十个 Issue、几十个 PR,每个都跑到底、不串台、不爆内存、不烧穿额度。


这些工程难题,Stripe、Ramp、Coinbase 各自踩了一遍坑,Open SWE 在框架层做了一层抽象,AgentScope Harness 也给出了自己的解法。下面我们按问题域展开。

沙箱:让 Agent 可以放心 rm -rf

Coding Agent 最大的工程矛盾是:你要让模型有真正的执行能力——git clone、npm install、mvn test、任意 shell 命令 —— 但又不能让它误伤宿主。


Coinbase 用自建的沙箱基础设施解决这个问题。Ramp 用 Modal 的云端容器。Open SWE 做了一层抽象,支持 Modal、Daytona、Runloop 等多种后端。AgentScope Harness 也做了同样的抽象 —— FilesystemSpec 是统一接口,Docker 容器、远端 KV、本机文件系统都是可插拔的实现。以 Docker 后端为例:

HarnessAgent agent = HarnessAgent.builder()
    .name("coding")
    .model(model)
    .workspace(workspace)
    .filesystem(new DockerFilesystemSpec()
        .image("agentscope/coding-sandbox:latest")
        .isolationScope(IsolationScope.SESSION))
    .build();

只要这一行 .filesystem(...)read_filewrite_fileexecute 等所有内置工具自动改走沙箱后端,Agent 代码完全不用动。IsolationScope.SESSION 保证每个 GitHub Issue / PR / IM 对话各跑各的——最自然也最安全。

跨调用恢复:第二轮 call() 才是真考验

用户在 PR 上评了一条“再补个测试”。Agent 必须能接着上一轮的环境继续干——重新 git clone + npm install 等五分钟,谁也受不了。


这是 Open SWE 用“persistent sandbox”解决的问题 —— 同一个 thread 的 follow-up message 复用同一个沙箱。AgentScope Harness 的方案更精细,沙箱在每次 call() 结束时把工作区状态打包成快照存起来,下次按需恢复:


  • 容器还在 → 直接接着用(最快)。
  • 容器没了 → 拿快照重新起一个,恢复工作区。
  • 没快照 → 全量初始化(冷启动)。


快照后端可选 LocalSnapshotSpec(本地单机)、OssSnapshotSpec(S3 兼容,多副本场景)、RedisSnapshotSpec(低延迟,小工作区),生产环境加一行配置就够了:

.filesystem(new DockerFilesystemSpec()
    .image("agentscope/coding-sandbox:latest")
    .snapshotSpec(new OssSnapshotSpec(ossClient, "my-bucket", "agentscope/")))

长会话记忆:上下文窗口不是无限的

一个长 Issue 跑几十轮对话,git diff 输出上万字符,mvn test 日志几十 K——模型的上下文窗口很快就撑爆。


AgentScope Harness 的解法是四套独立可组合的机制。对话摘要压缩在消息条数过多时自动触发,保留尾部原文、前面的压缩成摘要。大工具结果卸载把超过 80K 字符的输出写到工作区文件,上下文里只留首尾各约 2K + 一个 read_file 路径提示 —— Agent 想看全文自己再读一遍。参数截断write_file 的大入参也截掉,因为这些内容已经写进文件了,后续对话不需要再看。溢出兜底在真的撞到 context_length_exceeded 时做紧急压缩后重试。

HarnessAgent.builder()
    .compaction(CompactionConfig.builder()
        .triggerMessages(50)
        .keepMessages(20)
        .truncateArgs(CompactionConfig.TruncateArgsConfig.builder()
            .maxArgLength(2000).build())
        .build())
    .toolResultEviction(ToolResultEvictionConfig.defaults())
    .build();

这不是可选项。Coding Agent 一定会跑长会话,一定会输出大 diff,不开这两个早晚撞墙。


同时,MEMORY.md 会从每天的对话流水账里周期性合并出长期事实。Coding Agent 跑久了,MEMORY.md 里可能就长出这样的内容:

- 仓库 owner/repo 的测试命令是 `mvn -pl module test`,根目录 `mvn test` 太慢不要用
- main 分支受保护,必须通过 PR 合并;feature 分支命名约定为 `feat/`
- CI 用 GitHub Actions,配置文件在 .github/workflows/ci.yml

Agent 自己学会了团队的规矩,下次就不用再问了。所有用同一 workspace 的对话都受益。

会话持久化:节点挂了对话不能断

组织级 Coding Agent 是个长生命周期的应用。一个 Issue 可能从早上聊到晚上,期间服务可能滚动发布、扩缩容、副本切换——但用户感知到的应该是“对话不会断”。

默认模式下 AgentScope Harness 用本地文件存储状态,够开发用。多副本生产切 Redis,一行配置:

HarnessAgent.builder()
    .stateStore(RedisAgentStateStore.builder().lettuceClient(redisClient).build())
    .build();

切到 Redis 之后:节点崩了会话漂到另一个节点,滚动发布时旧 pod 自动保存、新 pod 自动恢复,甚至在 GitHub Issue 里聊到一半切到钉钉继续——只要 sessionId 一致,记忆都在。

组织级特有的工程问题

上面讲的沙箱、恢复、记忆、持久化,是让一个 Coding Agent“能在生产环境跑住”的基础设施。但组织级的场景还有一些独有的问题需要解决。

多通道接入:同一个 Agent 接得住所有入口

Stripe 的 Minions 走 Slack,Coinbase 的 Cloudbot 也走 Slack,Open SWE 同时接 Slack + Linear + GitHub。组织级 Coding Agent 的一个共识是:不要让用户换到一个新的界面去找 Agent,让 Agent 出现在用户已经在用的地方。


Coding Agent 在 AgentScope Harness 之上加了一层通道适配器,把不同入口的事件统一映射到(threadId, message):

github:issue:owner/repo#42   → SHA-256 → UUID → coding agent thread
dingtalk:<appKey>:<staffId>  → SHA-256 → UUID → coding agent thread
feishu:<tenantKey>:<chatId>  → SHA-256 → UUID → coding agent thread

这个确定性映射保证同一个 Issue 的所有评论都路由到同一个 Agent session —— 对话历史自动恢复,不用用户操心。

多租户隔离:谁和谁不能串

个人工具不需要考虑这个问题——只有一个用户,所有状态天然是隔离的。组织级服务从第一天起就是多租户的:几十个 Issue、几十个 PR、几十个 IM 对话同时在跑,每个都有自己的代码仓库、依赖目录、对话历史和长期记忆,绝不能串台。


AgentScope Harness 用 IsolationScope 控制隔离粒度。SESSION(默认)让每个 sessionId 独立一个沙箱 —— 对 Coding Agent 来说就是每个 Issue / PR / IM 对话各跑各的,最自然也最安全。USER 让同一用户的多个对话共享同一份仓库克隆,适合“个人工作台”场景。隔离不只是沙箱层面的 —— 会话状态、记忆、子 Agent 任务也都按同样的粒度隔离,不用开发者自己操心。

并发控制:一个 thread 同一时间只跑一个推理

Coding Agent 用 RunDispatcher + MessageQueueHook 强制保证这一点。用户在 Agent 跑着的时候又评了一条,新消息不会打断当前推理,而是入队等下一轮开始前注入 —— 就像 Open SWE 的 check_message_queue_before_model middleware。


同时 ThreadBudgetHook 管住每个 thread 的模型调用上限,ModelCallLimitHook 管住全局 —— 一个用户的失控循环不能把全公司的额度烧光。

工作区:人格、记忆、技能都是文件

AgentScope Harness 把所有跨调用、跨重启需要保留的东西组织成一个目录 —— workspace。行业里现在把这类设计叫“Context Engineering”。有意思的是,几乎所有主流 Coding Agent 都独立走到了同一个模式:Claude Code 有 CLAUDE.md,GitHub Copilot 有 .github/copilot-instructions.md,Open SWE 有 AGENTS.md——repo 级别的规约不应该硬编码在 system prompt 里,而应该是文件,能版本化、能 CR、能独立更新。

~/.agentscope/codingagent/workspace/
├── AGENTS.md            ← 人格 + 行为约定
├── MEMORY.md            ← 长期记忆
├── skills/              ← 可复用技能(提交规范、测试规范等 SOP)
├── subagents/           ← 子 agent 声明
├── knowledge/           ← 领域知识(API 文档、代码规范)
└── plans/               ← Plan Mode 计划文件

三个工程价值:

团队规范以文件形式生效。

想让所有 PR 遵循 commit message 规范?写成一份 skill 放进 skills/commit-style/SKILL.md,所有 Agent 实例下次 call() 就生效,不用重启、不用改代码。

Agent 在用的过程中越来越懂团队。

第一次它问“我们用哪个测试框架”,你告诉它“JUnit 5 + Mockito”。下次 call() 它就记得了 —— 所有用同一 workspace 的对话都受益。

workspace 当 Git 管理。

AGENTS.md + skills/ + subagents/ + knowledge/ 是 Agent 的“配置仓库” —— 用 Git 管理,CI 验证,部署时 hydrate 进所有副本。频繁变化的应该是 workspace 里的内容,而不是 Java 代码。

子 agent:把独立任务委派出去

Open SWE 用 Deep Agents 的 task tool 做子 Agent 派发,Stripe 的 Minions 用 Blueprints 编排,Ramp 的 Inspect 用 Sessions + Child Sessions。AgentScope Harness 也支持子 Agent,而且用法很轻量 —— 在 workspace 里写一个 markdown 文件就行:

# workspace/subagents/researcher.md
---
description: 调研子 agent。当需要先了解一个外部仓库或文档再做修改时使用。
workspace:
  mode: isolated
tools: [read_file, grep_files, fetch_url, web_search]
---
你是调研助手。fetch_url / web_search 收集材料,read_file / grep_files 看代码,
给主 agent 一份带要点和引用的简报。

主 Agent 调用 agent_spawn agent_id="researcher" task="调研 ABC 库的 v2 升级要点",子 Agent 在隔离上下文里跑完,结果返回给主 Agent。后台调用加个 timeout_seconds=0,主 Agent 不 block,跑完后框架自动把结果注入下一轮推理。

Plan Mode:大改之前先想清楚

让 Coding Agent 直接上手做“重构整个鉴权模块”是高风险的 —— 它可能边想边改、改坏一片。AgentScope Harness 的 Plan Mode 把这件事固化成“先想 → 写计划 → 人确认 → 再动手”的流程。开启后 Agent 进入只读阶段,只能调用读取工具和 plan 相关的四个白名单工具,退出 plan 需要人类确认。


这和 Coinbase Cloudbot 的“Agent Councils”理念类似 —— 在高风险操作前加入人类审批节点,用流程约束代替“祈祷模型别出错”。

工具精选与确定性兜底

Stripe 在公开分享 Minions 经验时提过一个观察:他们的 Agent 有约 500 个工具,但强调“tool curation matters more than tool quantity” —— 工具不是越多越好,精选和维护比堆数量重要。Open SWE 也跟进了这个理念,只暴露约 15 个核心工具。Harness 的做法类似,内置工具集控制在文件操作 + shell 执行 + 记忆检索这个范围内,业务工具通过 toolkit.register(...) 按需注册。


另一个行业共识是:不能只靠 prompt 告诉模型“记得跑测试”,关键步骤要用确定性逻辑保证。 GitHub Copilot Coding Agent 跑完后走 repo 现有的 CI pipeline 做验证;Open SWE 有一个 open_pr_if_needed middleware 作为兜底——Agent 忘了开 PR,middleware 自动补上。Harness 的 middleware 机制(MessageQueueHookThreadBudgetHook 等)也是同一思路:哪些事交给模型决定,哪些事用确定性代码保证,这条线要画清楚。


还有一点值得提:Draft PR 作为输出契约。无论是 Copilot Coding Agent、Open SWE 还是 Stripe Minions,Agent 的产出都是 draft PR,永远需要人类 review 后才能 merge。Agent 不直接改生产代码——这是组织级 Coding Agent 的一个基本安全假设。

从单机到企业:一条演进路线

AgentScope Harness 让你从最简的形态开始,按需切换 —— 同一份 Agent 代码逻辑,配置不同就跑出不同的能力。


Stage 1:本机 CLI。 什么都不配。execute 在宿主 sh -c 跑,状态存本地文件。只在你信任的本机环境用 —— 这就是一个能装记忆、能装技能的加强版本地 Coding Agent。


Stage 2:本机 + Docker 沙箱。 加一行 .filesystem(new DockerFilesystemSpec()...),所有执行进容器。这是给 GitHub Webhook 模式用的——每个 Issue/PR 一个临时容器,宿主不暴露攻击面。


Stage 3:多副本 + 分布式。 stateStore 换 Redis,沙箱快照存 OSS,加 executionGuard 做并发控制。到这一步 Coding Agent 就能横向扩展——挂在负载均衡器后面跑 N 个副本,任何副本都能接住任何用户的任何对话。

.filesystem(new DockerFilesystemSpec()
    .image("agentscope/coding-sandbox:latest")
    .isolationScope(IsolationScope.USER)
    .snapshotSpec(new OssSnapshotSpec(ossClient, "bucket", "prefix/"))
    .executionGuard(RedisSandboxExecutionGuard.builder(jedis)
        .leaseTtl(Duration.ofMinutes(30)).build()))
.stateStore(RedisAgentStateStore.builder().lettuceClient(redisClient).build())

Stage 4:可观测与限流。 Spring Boot Actuator 暴露健康探针和 Prometheus 指标,ThreadBudgetHookModelCallLimitHook 守住模型预算,FallbackModel 应对上游限流。这些组合在一起就是一个“上线后能跑住”的 Coding Agent 应该有的样子。

总结

回顾一下本文提到的这些项目 —— Stripe Minions、Ramp Inspect、Coinbase Cloudbot、LangChain Open SWE、GitHub Copilot Coding Agent、Claude Code,再加上 AgentScope Harness —— 它们在语言、生态、部署形态上各不相同,但在核心架构决策上高度一致:per-session 隔离沙箱、确定性的 thread ID 路由、middleware 拦截链、Agent 运行时的 message queue 注入、repo 级指令文件、draft PR 作为输出契约。


Coding Agent 的上半场是个人提效 —— 模型更聪明、补全更准、本地工具更顺手。下相半场的战场转到了工程:怎么把“能跑一次 demo”变成“7×24 稳定服务一整个团队”。从 Stripe 到 GitHub,从 LangChain 到 AgentScope,大家在不同的起点上走向了同的架构。这种趋同本身就是最好的路标。


文中提到的 Coding Agent 是一个完整且可读的示例,但还远不是一个生产可用的产品,建议直接 clone 下来跑一遍再翻源码 —— 它把本文讲的这些工程问题都对应到了真实代码去完善它。


想继续深入了解,推荐大家深入了解 AgentScope 2.0 官方文档:https://java.agentscope.io

相关文章
|
2天前
|
人工智能 缓存 监控
阿里云 AI 网关 FinOps 能力正式上线丨让每一个 Token 的消耗都“看得见、管得住”
阿里云 AI 网关 FinOps 能力,从“消费者配额”切入,让企业在大模型调用的每一个环节都做到心中有数。
|
8天前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
180 20
|
8天前
|
人工智能 自然语言处理 监控
告别复杂接入流程:用 AI Agent Skill 驱动云监控可观测接入
对云原生与AI应用带来的接入复杂性,阿里云可观测团队将接入接口CLI化,并提供开箱即用的Skill,支持主流的APM和AI应用高效接入,用户仅需自然语言描述即可完成自动化接入,显著降低运维门槛。
161 15
|
2天前
|
人工智能 运维 Prometheus
从 API 到 AI Agent:阿里云云监控 CLI + Agent Skill 实战
阿里云推出云监控CLI与Agent Skill,将运维能力转化为AI可执行工作流。用户通过自然语言指令,即可由Agent自动完成资源接入、告警管理及数据查询等任务,实现可控、可审计的智能化运维自动化。
202 120
|
2天前
|
人工智能 运维 安全
阿里云 Agent Infra 上长出的约束基建
Harness = 定义约束 + 校验输出 + 建立反馈回路。
179 124
|
2天前
|
人工智能 安全 API
阿里云千问大模型入门到精通全解:核心功能、价格配置与完整实操指南
千问,官方名称通义千问,代号Qwen,是阿里云完全自主研发的全栈大模型家族,并非单一模型,而是覆盖纯文本、代码、图像、音频、视频、行业垂直场景的完整模型产品矩阵,统一依托阿里云百炼大模型服务平台对外提供能力调用、微调、智能体开发、知识库构建、应用部署等全链路服务。
2145 1
|
8天前
|
数据采集 人工智能 运维
阿里云可观测 2026 年 5 月产品动态
阿里云可观测 2026 年 5 月产品动态。
128 14
|
Java 程序员 API
Spring Boot升级到2.x,Jackson对Date时间类型序列化的变化差点让项目暴雷【享学Spring Boot】(下)
Spring Boot升级到2.x,Jackson对Date时间类型序列化的变化差点让项目暴雷【享学Spring Boot】(下)
Spring Boot升级到2.x,Jackson对Date时间类型序列化的变化差点让项目暴雷【享学Spring Boot】(下)
|
2天前
|
人工智能 缓存 API
阿里云百炼 Token Plan 三大坐席对比:Credits资费额度、Token消耗与性价比分析
阿里云百炼TokenPlan含标准版(198元/月,2.5万Credits)、高级版(698元/月,10万Credits)和尊享版(1398元/月,25万Credits)。经测算,尊享版单Credits仅0.0056元,折合百万Tokens约1.12元,显著低于按量计费(2元/百万Tokens),性价比高,值得订阅。在阿里云百炼平台:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
8天前
|
人工智能 缓存 运维
重磅发布丨云监控 AI Agent 可观测,企业生产级 Agent 首选全域观测平台
AI Agent 可观测是面向企业生产级 Agent 的全域观测平台,提供从接入、建模、分析到 Agentic Ops 的全域观测和分析能力,帮助企业彻底打开 Agent 的黑箱,实现 Agent 执行过程的可追踪、可诊断、可优化。
277 15

热门文章

最新文章