← 返回列表

新工具 GitHub · vercel-labs/durable-harness

用 durable-harness 在 Next.js 里跑可恢复的编码 agent 会话

装好 durable-harness 与 Pi harness,给 Next.js 应用加一段 chat 路由,得到崩溃后能从同一 turn 恢复的编码 agent 会话。

开始尝试

效果

原站没有结果截图;README 中可见的是代码片段(agent 模块、chat 路由与 next.config 配置)与 harness 列表。

这是什么

新在哪里:以前编码 agent 多是本地或单机会话,进程崩溃当前 turn 就丢;现在每个会话是一次 workflow run,turn 与工具调用都在事件日志里,可在另一台机器续上。

怎么做到的:在 Next.js 项目里 npm install durable-harness @earendil-works/pi-durable @earendil-works/chord @earendil-works/pi-ai just-bash;在 lib/agent.ts 里用 createRegistry 安装 CodingTools、用 resumeWith + Harness.open 打开 World 存储上的会话;在 app/api/chat/route.ts 用 chatRoute 暴露 GET/POST 并加上自己的 authorize;在 next.config.ts 用 withDurableHarness 包住配置。本地开发默认使用 Workflow SDK 的本地 World,无需配置。

适合谁
写 TypeScript / Next.js、想让编码 agent 会话持久化的开发者
能帮你
把编码 agent 会话变成可恢复的 workflow run,崩溃后可续跑且不会重复执行不安全工具调用

评分 三项分开看,不合成总分;热度不等于好用

新颖性
全新做法 · 2026-10-16 出现
热度
未知
易上手
门槛较高
怎么评的

三项都由本站记录的事实按固定规则算出,编辑不能直接改档位;规则改动会写进更新说明。

新颖性

  • ●●● 全新做法,且有来源依据的出现时间在最近 30 天内
  • ●●○ 老工具新用法或近期刚开放,且有来源依据的时间在最近 30 天内
  • ●○○ 出现时间超过 30 天、未核实到精确日期,或已不再是新做法
  • 其他 出现时间未核实、晚于今天,或新颖类型未核实时按最低一档处理,不靠猜测加分

热度

  • ●●● 最近一次每周人工确认为“热门”:最近 14 天里独立讨论、实际案例、持续时间、传播平台、相对关注五项门槛全部满足(规则 heat-v1)
  • ●●○ 最近一次人工确认为“观察中”:前三项至少一项达到,或讨论增长 ≥ 50%,且至少 2 个独立案例
  • ●○○ 最近一次人工确认为“未进入跟踪”
  • 其他 还没有人工确认过的热度记录时显示“未知”。热度只统计本站已接入的信源,不代表全网

易上手

  • ●●● 准备门槛低且难度入门:不需要新账号或付费,首次尝试不超过 30 分钟,公开可用,会复制粘贴即可
  • ●●○ 准备门槛中等,或门槛低但需要改少量代码或配置
  • ●○○ 准备门槛高:需要商业软件或付费服务、首次尝试超过 2 小时、特殊硬件或网络、排队或邀请且无替代方案,或需要专业知识
  • 其他 只有介绍、还没有站内步骤,或关键步骤已失效时显示“暂不可试”;门槛未核实时显示“未核实”

怎么尝试

  • 时间 首次约 60 分钟
  • 费用 免费:仓库为 Apache-2.0 开源,npm 包可直接安装;模型调用费用原站未说明。
  • 账号 不需要新账号
  • 环境 Node.js + pnpm/npm 的 Next.js 项目;本地开发使用 Workflow SDK 本地 World,无需额外配置
  • 准备 Next.js 项目:安装并承载 durable-harness 与 chat 路由
  • 准备 npm 环境:安装 durable-harness、pi-durable 等包
  • 准备 模型 gateway 访问与密钥:示例使用 anthropic/claude-sonnet-4.5,需可用的模型凭据(README 未说明具体配置)
  • 准备 chatRoute 的 authorize 实现:为聊天接口做鉴权
  • 准备 Vercel 账号(选用):仅在需要托管存储、排队与扩缩或使用 Vercel Sandbox 跑 Claude Code / Codex 时需要

按下面的步骤就能做出第一个结果。复制命令不会自动执行。

  1. 安装依赖

    在 Next.js 项目根目录安装 durable-harness 与 Pi 相关包:

    bash原始来源命令
    npm install durable-harness @earendil-works/pi-durable @earendil-works/chord @earendil-works/pi-ai just-bash

    预期结果:package.json 中出现上述依赖,node_modules 里能解析到 durable-harness

  2. 编写 agent 模块

    新建 lib/agent.ts,用 createRegistry 安装 CodingTools,并用 resumeWith 与 Harness.open 打开 World 存储上的会话:

    typescript原始来源命令
    import { BACKGROUND_CONTEXT as ctx } from '@earendil-works/chord/context';
    import { createRegistry, Harness, type Storage } from '@earendil-works/pi-durable';
    import { CodingTools, GATEWAY_PROVIDER, gatewayModels, resumeWith, virtualEnv } from 'durable-harness/pi-durable';
    const models = gatewayModels();
    const registry = createRegistry();
    registry.install(CodingTools);
    export const agent = { model: { provider: GATEWAY_PROVIDER, modelId: 'anthropic/claude-sonnet-4.5' } };
    export const open = resumeWith((storage: Storage) => Harness.open(storage, { models, registry, env: virtualEnv() }, ctx));

    预期结果:agent 与 open 导出可被路由引用,类型检查通过

  3. 添加 chat 路由

    新建 app/api/chat/route.ts,用 chatRoute 暴露 GET/POST,并在 authorize 中填入自己的鉴权逻辑:

    typescript原始来源命令
    import { chatRoute } from 'durable-harness/pi-durable';
    import { agent, open } from '@/lib/agent';
    export const { GET, POST } = chatRoute({ open, agent, authorize: async (request) => { /* your auth */ } });

    预期结果:向 /api/chat 发请求能收到 agent 回复

  4. 接入 Next.js 配置

    用 withDurableHarness 包住 next.config.ts:

    typescript原始来源命令
    import type { NextConfig } from 'next';
    import { withDurableHarness } from 'durable-harness/next';
    const nextConfig: NextConfig = {
      // your existing config
    };
    export default withDurableHarness(nextConfig);

    预期结果:next dev 能正常启动,无配置相关报错

  5. 本地运行验证恢复

    本地开发默认使用 Workflow SDK 的本地 World,无需额外配置;启动应用并发起一段对话。

    bash本站编写
    npm run dev

    预期结果:会话作为 workflow run 运行,中断后再次发起可从上一次的 turn 继续

原始来源:Vercel durable-harness 持久化编码 Agent ↗