Newshot

Show HN:AgentRun —— 开源、可自我改进的托管智能体

Translation(model translation, not the source's own text)
agent.run()
agent.run()

运行更聪明的 agent。使用更少的 token。

npm
npm
Package checks
Package checks

快速入门 · 导览 · 模板 · 部署 · 文档

AgentRun 是一个开源平台,能让你的 agent 如虎添翼。它在你自己钟爱的 agent harness 之上,增加了自我改进、持久化执行和一个控制平面。你的 agent 会变得更聪明、更容错,而且每次运行都使用更少的 token。

一个 agent 的 Learning 标签页:它保留了哪些内容,以及此后发生了什么变化。演示数据来自控制台记录的 fixtures。

AgentRun 控制台中一个 agent 的 Learning 标签页:自从它完成学习后,回答耗时从 10 秒降到 2 秒,一次运行的成本从 $0.05 降到 $0.0077,并保留了这两条笔记
AgentRun 控制台中一个 agent 的 Learning 标签页:自从它完成学习后,回答耗时从 10 秒降到 2 秒,一次运行的成本从 $0.05 降到 $0.0077,并保留了这两条笔记

为什么选择 AgentRun

Agent 很擅长搞清楚事情。问题在于,它们会一遍又一遍地搞清楚同样的事情。给一个 agent 一项它已经做过一百次的任务,它仍会重新发现同一个 API、重读同样的文档、重建同样的计划,而你要为其中的每一个 token 付费。

把你自己的 agent 放到它运行效果最好的 harness 上:Claude Code、Codex、OpenCode 或 pi。AgentRun 负责它周围的一切:

  • 它会学习工作内容。每次运行之后,agent 会保留对下次有帮助的东西:一条笔记、一个技能,或者一个无需循环即可完成工作的 workflow。下一次运行就从那里开始。
  • 它永远不会丢失一次运行。每一次运行都存放在同一个存储中。在运行途中杀掉服务器,再重新启动,这次运行会继续进行。为每个 agent 提供任务所需的计算机:一个 sandbox、一个 Linux 桌面、一部 Android 手机或一个浏览器。
  • 你始终掌控全局。审批、支出上限,以及面向每个 agent 的同一个控制台:哪些需要你处理、哪些失败了、哪些正在运行,以及花了多少钱。

你无需自行搭建基础设施:provider 集成、恢复、运行跟踪和学习,全都在这里。用一条命令在你的笔记本电脑上运行它,或放在一个容器里,或作为带 runner 的服务器运行。Apache-2.0。

三步开始

你需要 Node 24.22.3 或更高版本,运行于 macOS 或 Linux。

  • 启动它。npx @parcha/agentrun 会启动服务器和一个 runner,监听端口 7340(或下一个可用端口),把所有内容保存在 ~/.agentrun 中,并在浏览器中打开控制台。

        npx @parcha/agentrun
      

它会启动服务器和一个 runner,监听端口 7340(或下一个可用端口),把所有内容保存在 ~/.agentrun 中,并在浏览器中打开控制台。

  • 添加一个模型密钥。在控制台中设置一个密码,然后在 Settings → Model keys 下添加一个密钥。一个 OPENROUTER_API_KEY 就能为每个 harness 提供模型。Anthropic 密钥可运行 pi 和 Claude Code;OpenAI 密钥可运行 pi、Codex 和 OpenCode。
  • 运行你的第一个 agent。打开 Templates,应用 KYB due diligence,然后用一家公司的名称和网站启动一次运行。它除了你的模型密钥之外什么都不需要。完成后,这次运行的 Report 标签页会有一份 due diligence 报告,其中包含一个结论,并且每一项主张都附有引用。然后打开该 agent 的 Learning 标签页,看看它为下次保留了什么。

更想让你的编码 agent 来做这件事?告诉它:Read agentrun.ai/SKILL.md and set up AgentRun for me.

如果你的机器上运行着 Docker,新的 agent 会获得一个带 shell 的 Docker sandbox。它的镜像会在首次使用时构建,这需要几分钟,控制台会在就绪时提示。如果没有 Docker,agent 仍然可以读写文件,但不会获得 shell。

想要一个带 URL 的自有服务器?一键部署到 Render。

导览

做决策的 workflow。一个步骤可以提出一个快速的类型化问题,看清答案有多确定,然后选择一条路由。在这里,模型倾向于 approve,置信度为 0.61,低于该 workflow 的 0.75 门槛,因此该案例会进入复核。

Show HN: AgentRun – 开源、可自我改进的托管 Agent

AgentRun 控制台中的一个 KYB 入驻流程:注册表与证书检查并行进行,一次交叉核对,以及一个 Jev 判定,approve 0.61、review 0.33、reject 0.06,按 0.75 规则转人工审核
AgentRun 控制台中的一个 KYB 入驻流程:注册表与证书检查并行进行,一次交叉核对,以及一个 Jev 判定,approve 0.61、review 0.33、reject 0.06,按 0.75 规则转人工审核

每个 Agent 都在一个地方。最先打开的是 Mission Control:哪些需要你处理、哪些失败了、哪些正在运行、花了多少成本,按天、按 harness、按工具。

AgentRun 控制台中的 Mission Control:agents、runs、tokens、run time、成功率与成本,按天、按 harness、按工具
AgentRun 控制台中的 Mission Control:agents、runs、tokens、run time、成功率与成本,按天、按 harness、按工具

每个 Agent 都是一个 API。在 Playground 里启动一次运行,然后把同样的请求复制到你的代码里。

AgentRun Playground:左侧是用于启动运行的表单,右侧是同样的请求以 curl 形式呈现
AgentRun Playground:左侧是用于启动运行的表单,右侧是同样的请求以 curl 形式呈现

控制权始终在你手里。Agent 可以停下来问你,运行会一直等待,直到你回答。

AgentRun 控制台中一次等待人工输入的运行:Agent 询问一张发票的金额使用哪种货币
AgentRun 控制台中一次等待人工输入的运行:Agent 询问一张发票的金额使用哪种货币

会学习工作的 Agent

在 Agent 的定义里设置 "learning": true 即可开启。每次运行结束时,Agent 会多获得一轮机会,说出它想保留什么。AgentRun 会检查、评分,并把通过的内容提交到该 Agent 自己的 git 文件夹。下一次运行就从那里开始。


        flowchart LR
    start["Run starts from<br/>the agent's main"] --> work["Run does the job"]
    work --> propose["Last turn proposes<br/>notes, a skill, a workflow"]
    propose --> check["Code checks,<br/>then one grader"]
    check -->|kept| commit["Commit to main"]
    commit --> start
      
  • 笔记是简短的 markdown 文件,每条只记一个事实,采用 Claude Code 的记忆格式。
  • 技能是「如何再做一次某项工作」,只有完成了该工作的运行才能写入技能。
  • 学到的 workflow 在任何 harness 上都以单次工具调用执行,受该运行自身的额度上限和工具权限约束。当一个学到的 skill 已服务过 3 次运行后,下一次运行会被要求把该工作写成 workflow 草案,草案在保留前会先做 dry-run:不询问模型,也不运行任何工具。

Agent 的 Learning 标签页会显示每一条笔记、技能和 workflow,以及变更日志;每次运行也会显示它被给予了哪些笔记、打开了哪些笔记。可以在那里把任何内容退役,也可以用 npx @parcha/agentrun learning retire 加上该笔记的 ETag。Git 会保留历史,所以退役的笔记可以再回来。

每个 Agent 都有一个 learning 文件夹:只有一个分支 main 的普通 git。运行会在自己的指令中读取活跃笔记的索引,并在自身技能之外获得学到的技能。代码会先检查每一个提案。违反自身某条规则(大小或数量上限、名称、形状)的条目会被剔除,其余照常继续。答案中任何位置出现密钥或隐藏字符、文件夹之外的文件、删除操作或索引已满,整份答案都会被丢弃,因为其中任何一条都不可信。然后由一个 grader 判断它说了什么,AgentRun 提交通过的部分。有风险的规则会等你确认。运行从某个页面或粘贴的邮件里发现的规则,或者包含账号的笔记,都会被丢弃。

一旦 Agent 的笔记超出学习预算,每次运行都会完整获得与它第一条消息相关的那些笔记,其余的则各给一行。只运行了学到的 workflow 的运行,不会被问要保留什么。

Workflows

很多 Agent 并不需要是 Agent。把可重复的工作写成带类型的 workflow:工具调用、模型步骤和快速的类型化判定(是或否、选一个、一个分数,各自带置信度),并在情况不清晰时回退到一个 Agent。AgentRun 把它作为某个 Agent 的一个 revision 来运行,受该 Agent 的工具权限约束,并和任何运行一样有额度上限,触发器也可以启动它。

这是 examples/support-answer.mjs 中控制流程的示意图,不是模型运行的录屏。

支持工作流:搜索答案,用 Jev 检查,然后返回答案或让智能体去调查
支持工作流:搜索答案,用 Jev 检查,然后返回答案或让智能体去调查

可以逐节点观察任何工作流的运行,暂停并恢复它,并查看每一个决策及其原因:

AgentRun 控制台中一个运行中的批处理工作流:20 份证书并行展开,一个 Jev 裁判逐份检查,顶部有实时计数和暂停按钮
AgentRun 控制台中一个运行中的批处理工作流:20 份证书并行展开,一个 Jev 裁判逐份检查,顶部有实时计数和暂停按钮

工作流是一个由带类型步骤组成的 JSON 文档:


        {
  "v": 2, "name": "read-site",
  "schemas": {
    "In":   { "type": "object", "required": ["website"], "properties": { "website": { "type": "string" } } },
    "Page": { "type": "object", "required": ["ok"], "properties": { "ok": { "type": "boolean" } } }
  },
  "input":  { "schemaId": "In" },
  "output": { "schemaId": "Page", "path": "home" },
  "root": { "node": "chain", "steps": [
    { "node": "call", "label": "Read the home page", "via": "tool", "tool": "web_fetch",
      "args": { "url": "{website}" }, "out": "Page", "as": "home", "deadline_s": 60 }
  ] }
}
      

步骤可以调用工具、运行模型、提出一个快速的带类型问题、根据答案分支、并行遍历一个列表、循环有限次数、调用其他工作流,或者把困难的情况交给智能体。把一个工作流保存为智能体的 workflow 字段;npx @parcha/agentrun workflows validate 会先对其进行检查。工作流语言也可以在你的应用内独立运行,并配有 TypeScript 构建器。

经得起中断的运行

每个智能体、修订、运行和步骤都存放在同一个存储中。在运行中途停止服务器再重新启动,运行会继续。有多个 runner 时,一旦某个已死 runner 的 30 秒租约到期,另一个 runner 就会接手它的运行。已完成的步骤绝不会再次运行;因崩溃而在调用中途被切断的写入会被标记为 interrupted,而不是重试,以便你检查。

始终由你掌控

  • 审批。每个工具要么被允许、要么先询问你、要么被拒绝。需要询问的调用会停在运行页面上等待你回答。“Never ask” 可让智能体无人值守运行,而在服务器上设置的拒绝仍然对其生效。
  • 花费上限。给一次运行设置上限,到达上限时它会暂停而不是失败,并告诉你继续所需的最低限度。AgentRun 无法计价的花费读取为 “unknown”,绝不是 $0。
  • 提问。智能体可以停下来问你,运行会等你回答后再继续。
  • 一个控制台。每次运行都有一个实时 Timeline、它的文件,对于浏览器还有一个你可以接管的屏幕。

模板

五个现成的智能体。在一个屏幕中应用一个,把它变成你自己的,并用它自己的 eval 用例来衡量它。每个模板是一个文件夹:智能体的指令、它的技能、它的规则和它的 eval 用例。Templates → Apply 在你亲自勾选每个 MCP 工具之前不会授予任何权限。

模板功能
code-review审查一个 pull request 或一个 diff,对照代码检查每个发现,并以 JSON 返回这些发现。它会自行设置 GitHub 触发器
kyb对一家公司做尽职调查:注册信息、所有者、制裁名单、带日期的不良媒体,以及一个每条主张都有引用的结论
market-monitor每周一,汇总你所关注的公司发生了什么变化,每一项都带日期和链接
inbound-lead研究 webhook 发来的每个潜在客户,并对照你的理想客户画像给出 0 到 100 的评分
release-notes把自上次发布以来合并的 pull request 变成发布说明,留作草稿 issue 供人处理

npx @parcha/agentrun template eval DIR 会在一个一次性服务器上把模板的 eval 用例作为真实运行来执行并评分。Template packages 有文件夹格式说明。

触发器会自行启动有上限的运行:定时计划、带签名的 webhook 和 GitHub pull request 事件。

Harnesses 与 computers

文章标题:Show HN: AgentRun – 开源、自我改进的托管智能体

正文: Harnesses。在智能体的定义中指定一个 harness。审批、上限、计算机、触发器和学习在每个 harness 上的工作方式相同。npx @parcha/agentrun server capabilities 会显示你的服务器运行哪些 harness。

Harnessharness备注
pipi默认
Claude Codeclaude-agent首次使用时自行安装
Codexcodex首次使用时自行安装
OpenCodeopencode需要服务器旁边有它的 opencode-ai 包;AgentRun 会打印安装它的命令行

Computers。智能体通过一个设置获得一台计算机。它获得该类型的工具,仅此而已,更改计算机会改变智能体的其他任何东西。


        computer:
  kind: sandbox        # none, sandbox, desktop, phone or browser
  provider: daytona    # one you connected in Settings → Computers (none takes no provider)
      
类型智能体能做什么提供商
none在其运行文件夹中读写文件;无 shell(使用 Archil 时,命令在 Archil 的 exec 上运行)无需提供商
sandbox在 Linux 上运行代码、安装软件包、在后台保持进程Docker, Daytona, Modal, E2B
desktop查看 Linux 屏幕、移动鼠标、打字Orgo, E2B, Docker(你自己的带 X 服务器的镜像)
phone在 Android 上点击、滑动、打字、打开应用并读取屏幕手机 harness(租用的云 Android)
browser浏览网页,并随时将控制权交给你Browserbase, Kernel

除 none 外的每种类型都需要指定其提供商。没有计算机设置的智能体在服务器有 Docker 的情况下获得 Docker 沙箱,否则没有计算机。远程计算机通过你自己的供应商账户计费。

  • 密钥。在 Settings → Computers 中一次添加供应商的密钥。你的服务器会将其密封,仅显示为已设置或缺失;它永远不会进入智能体的计算机。Test connection 会在供应商处执行一次读取,不会启动任何东西。
  • 运行的文件夹。默认情况下,运行的文件夹位于你的服务器上,Docker 沙箱会挂载它。在 Settings 中开启 Archil 磁盘后,文件夹改为存放在那里,因此 Daytona、Modal 或 E2B 沙箱会挂载同一个文件夹。这三种仅在带有 Archil 磁盘时运行,并且开启 Archil 后 Docker 沙箱会被拒绝。
  • 观看和接管。浏览器运行会通过你自己的服务器流式传输到运行的 Screen 选项卡,绝不通过供应商链接。接管控制,然后交还。智能体也可以暂停并请求你接管,例如为了登录或验证码。
  • 证明。每个提供商都有针对其类型的合规性测试套件。在 npm ci && npm run build 之后,从检出目录自行对供应商运行它:npm run conformance -w @parcha/agentrun-computer -- --provider docker --kind sandbox。

@parcha/agentrun-computer 是底层的协议:每台计算机中有一个小型守护进程,每个供应商有一个提供商。

如何组合在一起


        flowchart LR
    you["Console · CLI · API"] --> server["Server"]
    server --> store["One store<br/>SQLite or Postgres"]
    runner["Runners"] -->|claim runs| store
    runner --> hands["Hands<br/>run folder + computer"]
      
  • Server。在 /v2 提供 API 和控制台。它将运行和命令写入存储,并为你读回。使用 --no-runner 启动时,它本身不运行任何智能体循环。
  • Store。智能体、修订、运行以及每次运行的日志,都在一个地方。默认在数据文件夹中使用 SQLite,或通过 AGENTRUN_STORE_URL 使用 Postgres。
  • Runners。每个 runner 从存储中认领运行,并同时运行多个。每次审批检查、上限和模型调用都在这里发生。添加 runner 以横向扩展。
  • Hands。智能体工具执行的地方。每次运行都有一个用于其文件的运行文件夹。沙箱将该文件夹挂载到 /workspace,工具在其中运行;桌面、手机或浏览器则将文件夹留在 runner 上。

从终端和从代码

npx @parcha/agentrun 同时也是服务器的 CLI。在服务器运行时,在第二个终端里执行这些命令;CLI 会自行找到服务器及其 token。该脚本会创建一个 agent,启动一次上限为 $1 的运行,让 agent 向你提一个问题,回答它,然后读取 agent 写出的文件。开启 Docker 时,首次运行会等待沙箱镜像。


        # 1. Make an agent that can write files and ask you things.
cat > agent.json <<'EOF'
{"definition": {"id": "notes", "version": 1, "name": "Notes",
  "instructions": "Do what you are asked, and write what you make to a file.",
  "skills": [], "tools": ["write", "ask_person"]}}
EOF
npx @parcha/agentrun agents create --body @agent.json

# 2. Start a capped run and wait. It stops to ask you which region (exit code 8: it waits on you).
npx @parcha/agentrun runs start notes --max-cost-usd 1 --wait \
  --body '{"input": {"content": "Ask me which region to cover, then write region.md about it."}}' > out.json

# 3. Answer, wait for it to finish, and read what it wrote.
run=$(node -p 'require("./out.json").run_id')
npx @parcha/agentrun runs message "$run" --content "Europe"
npx @parcha/agentrun runs wait "$run" > out.json
npx @parcha/agentrun runs read-file "$run" region.md
      

runs wait 在运行完成时以 0 退出,失败时以 1 退出,在等待你时以 8 退出:一个问题、它的成本上限,或一次审批。runs timeline RUN_ID --follow 会在每一步发生时实时流式输出,每次运行都带有一个指向其页面的 console_url。npx @parcha/agentrun help 列出所有命令;npx @parcha/agentrun skill install --claude(或 --codex)会教会你的编程 agent 使用这个 CLI。

使用 TypeScript 客户端(npm install @parcha/agentrun-client,无依赖)。客户端从环境变量读取服务器地址和 token;服务器启动时会打印这两者(使用 npx @parcha/agentrun 时,token 位于 ~/.agentrun/.token,地址通常是 http://127.0.0.1:7340):


        export AGENTRUN_BASE_URL=http://127.0.0.1:7340/v2
export AGENTRUN_API_KEY=$(cat ~/.agentrun/.token)
      

        import { AgentRun } from "@parcha/agentrun-client";

const client = new AgentRun(); // AGENTRUN_BASE_URL and AGENTRUN_API_KEY
const started = await client.runs.start("notes", { input: { content: "Ask me which region to cover, then write region.md about it." }, max_cost_usd: 1 });
let run = await client.runs.wait(started.run_id);
if (run.pending?.kind === "question") await client.runs.message(run.run_id, { content: "Europe" });
run = await client.runs.wait(run.run_id);
console.log(run.status, run.cost.usd);
      

Python 客户端是 pip install parcha-agentrun,方法相同(TypeScript 客户端、Python 客户端)。

部署它

Render,一键完成。

该按钮会部署 render.yaml:一个 1 CPU / 2 GB 的实例,配 10 GB 磁盘,使用已发布的镜像(无需构建),并为你生成 token 和 seal key。它需要你的 Render 工作区绑定一张卡:实例约每月 $25,磁盘 $2.50,按撰写本文时 Render 的价格。在 Render 的表单中,粘贴 OPENROUTER_API_KEY。我们建议使用带有美元上限和过期日期的 OpenRouter key。不要把这个 key 分享给任何人。上线后,打开它的 URL,从服务的 Environment 标签页粘贴 AGENTRUN_TOKEN 来设置你的密码。

在装有 Docker 的 Linux 机器上:


        git clone https://github.com/Parcha-ai/agentrun && cd agentrun/deploy
printf 'AGENTRUN_SEAL_KEY=%s\n' "$(openssl rand -base64 32)" > .env && chmod 600 .env
echo 'OPENROUTER_API_KEY=...' >> .env
docker compose up -d --build
docker compose logs server     # the console's link, the first visit's setup code and, the first time, the token
      

Show HN: AgentRun – 开源的、自我改进的托管式 Agent

端口只发布在本机的 loopback 上;在向其他人开放之前,请先在前面放一个 TLS 代理。这个 compose 文件没有 Docker socket,因此它的 agent 可以使用文件工具和 web_fetch,但没有 shell。若要用 Docker 沙箱,请使用仓库根目录下的单服务器 compose.yaml(Docker Engine 26 或更高版本),在宿主机上运行服务器,或使用带 Archil 磁盘的 Daytona 或 E2B computer。

在服务器和每个 runner 上把 AGENTRUN_STORE_URL 设为 postgres:// URL(compose 文件的 pg profile 会运行一个 runner),用 --no-runner 启动服务器,并用同一镜像以 runner --data /data --name <name> 启动每个 runner。给每个进程相同的 AGENTRUN_SEAL_KEY。本版本中 runner 仍然共享 /data 卷。

部署 AgentRun 涵盖 runner、健康检查和升级。

安全

每个保存的密钥(模型和工具密钥、MCP 凭据、登录信息、webhook 签名密钥)都由同一个密钥 AGENTRUN_SEAL_KEY 封存;要保管好它,因为一旦丢失,被封存的内容也就丢失了。密钥是只写的:控制台只显示每个密钥是已设置还是缺失,且只有控制台能粘贴、替换或移除密钥(你已登录的会话,或在关闭账号时运行在 loopback 上的启动器控制台)。在服务器启动处设置的密钥优先于粘贴的密钥。API token 不能写入密钥,也不能批准工具调用。一次运行只会拿到它自己的模型和工具所需的密钥,而一次运行所学到的任何东西都无法保住交给它的密钥。SECURITY.md 说明了如何报告漏洞。

文档

  • AgentRun Server:API、模型、工具、MCP 服务器、触发器、支出上限、学习与安全,完整说明
  • agentrun.ai 上的快速入门与文档
  • CLI 的 skill 与每一条命令
  • 部署、computers、模板
  • 工作流语言、编写、指南
  • 更新日志与贡献

接下来

  • 按每次调用选择 computer,而不只是按 agent 选择
  • 第一方 computers
  • iPhone、macOS 和 Windows computers
  • 像今天的浏览器运行那样,观看并接管桌面或手机运行
  • 把 Composio 作为工具目录
  • 基于 Agent Client Protocol 的 harnesses
  • 一个 Slack 触发器和一个 Parallel 监视器触发器

许可证与致谢

Apache-2.0。Copyright 2026 Parcha Labs, Inc. 由 Grep.ai 构建。

AgentRun 构建在 Earendil Works 的 pi(MIT)之上,即其下方的 agent loop 和持久运行时;还构建在 Stagehand 和 Browserbase Node SDK、TypeSafe JavaScript SDK、Archil 的磁盘 SDK,以及 vercel-labs/durable-harness(Apache-2.0)之上,持久 harness 的理念和代码正建立在其之上。每个项目保留自己的许可证;每个包的 NOTICE 列出了它所包含的内容。

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by Hacker News
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗