KA

kelvinschen/acpus

Developer tools
40 stars Качество 40 Тренд 40

Orchestrate Claude, Codex, Pi & other ACP agents in dynamic, durable workflows — survive crashes, pause/resume, and retry, all in TypeScript.

Обзор

English  ·  官网  ·  迁移指南 让你的 Agent 以 Dynamic Workflow 编排 ACP Agent 安装 @acpus/dsh 后,可以在 DSH 中选择 。 查看插件的安装和使用说明 → Acpus 可以调用任何已配置且支持 ACP 协议的 Agent, 包括但不限于: ***。 使用 Acpus 时,你的 Agent 根据目标**生成的 TypeScript Workflow: 通过 step.agent 来程序化地调用其他 ACP Agent,通过组织 等控制结构来实现一个复杂的长程任务。 Acpus 运行时负责调度并持久化每个运行的节点的状态、Artifact 和结果。 一个节点失败后,可以只重试该部分,不必重跑整个任务,已有的运行结果不会丢失。 一个 Agent 能稳定完成的小任务,直接交给一个 Agent 更省事。Acpus 更适合工作量大、容易漏项,或需要独立复核的任务: - 在多个模块中修改同一类代码,逐项运行测试并审查结果,避免漏掉调用点。 - 为偶发故障、线上事故或数据异常提出几种可能原因,再用日志、代码和数据逐一验证。 - 从网页、协作记录或代码库收集材料,核对关键结论,并整理成带来源的报告。 - 对大量工单、简历、候选方案或历史记录做分类、去重、排序,并复核最重要的结果。 - 从用户、投资人、竞争对手、安全或实现风险等角度检查同一个方案,再汇总成一份结论。 - 从历史会话和代码审查意见中找出重复问题,整理成规则,再验证这些规则能否防止真实错误。

README

acpus

English  ·  官网  ·  迁移指南

让你的 Agent 以 Dynamic Workflow 编排 ACP Agent

[!TIP] 使用 DeepSeek Harness? 安装 @acpus/dsh 后,可以在 DSH 中选择 Acpus 模式。 查看插件的安装和使用说明 →

Acpus 可以调用任何已配置且支持 ACP 协议的 Agent, 包括但不限于: Claude Code、Codex、OpenCode、Pi、Kimi、Trae。

使用 Acpus 时,你的 Agent 根据目标动态地生成的 TypeScript Workflow: 通过 step.agent 来程序化地调用其他 ACP Agent,通过组织 串行、并发、条件分支、循环 等控制结构来实现一个复杂的长程任务。

Acpus 运行时负责调度并持久化每个运行的节点的状态、Artifact 和结果。 一个节点失败后,可以只重试该部分,不必重跑整个任务,已有的运行结果不会丢失。

什么时候用 Acpus

一个 Agent 能稳定完成的小任务,直接交给一个 Agent 更省事。Acpus 更适合工作量大、容易漏项,或需要独立复核的任务:

  • 大型迁移和重构。 在多个模块中修改同一类代码,逐项运行测试并审查结果,避免漏掉调用点。
  • 调查疑难问题。 为偶发故障、线上事故或数据异常提出几种可能原因,再用日志、代码和数据逐一验证。
  • 深入研究和事实核查。 从网页、协作记录或代码库收集材料,核对关键结论,并整理成带来源的报告。
  • 批量处理待办。 对大量工单、简历、候选方案或历史记录做分类、去重、排序,并复核最重要的结果。
  • 从多个角度评审。 从用户、投资人、竞争对手、安全或实现风险等角度检查同一个方案,再汇总成一份结论。
  • 把反复纠正变成规则。 从历史会话和代码审查意见中找出重复问题,整理成规则,再验证这些规则能否防止真实错误。

这些任务通常会持续很多轮,容易漏项或偏离目标,也需要独立复核。Acpus 保存运行状态,方便中途检查,并在失败后继续。

工作方式

你描述目标
  → Orchestrator Agent 生成 TypeScript Workflow
  → Acpus 检查 Workflow,并按依赖和控制流运行节点
  → Worker Agent 或 Task 执行节点
  → Acpus 保存状态、Artifact 和结果
  → Orchestrator Agent 检查运行状态,并处理需要判断的情况
  → Orchestrator Agent 返回结果

Orchestrator Agent 负责拆分任务、定义节点和依赖、启动 Run,并查看运行状态。 需要人工判断时,它可以暂停 Run、重试节点、创建新 Run 或请求输入。

快速开始

支持全局配置一次的 MCP 接入,无需安装 Skill,调用时选择项目。

CLI 和 MCP 默认共享 ~/.acpus。设置 ACPUS_HOME=/绝对路径 可隔离 ACPUS 的全局配置、运行状态和全局 Workflow 库;该路径直接作为数据根目录,不再追加 .acpus。

1. 安装 CLI 和 Skill

[!TIP] 安装的是稳定路由 Skill;它会让 Agent 通过当前版本 CLI 动态读取完整指南和 authoring context。比如你可以和 Agent 说: “使用 acpus cli 工具来启动一个 workflow,判断这个 release 是否可以发布”

npm install -g acpus
npx skills add kelvinschen/acpus

2. 描述目标

[!TIP]

/acpus 启动一个 Workflow,判断这个 release 是否可以发布

Orchestrator Agent 会选择 Workflow 结构和 Worker Agent。 你也可以指定角色,例如让 Claude 审查,让 Codex 汇总结果。

为什么使用 TypeScript Workflow

  • 可以审查。 Workflow 是真实的 TypeScript 模块,可以直接查看和修改。
  • 可以混用 Agent。 同一 Workflow 可以为不同角色配置不同的 ACP-compatible Agent,你可以让 Claude Code 来写代码,让 Codex 来 review。
  • 运行前会检查。 Acpus 会先检查类型和 Workflow 结构,再创建 Run。
  • 源码位置灵活。 一次性 Workflow 可以从 stdin 传入;需要修改或复用时,可以保存为文件。

一个完整示例

下面的 Workflow 并行运行两次审查,再由第三个 Agent 汇总结果。

acpus workflow run --input '{"topic":"release readiness"}' - <<'WORKFLOW'
import { defineWorkflow, z } from "acpus/core";
import { md } from "acpus/expression";

const Review = z.object({
  summary: z.string(),
  ready: z.boolean(),
});

export default defineWorkflow({
  name: "quick-review",
  inputSchema: z.object({ topic: z.string() }),
  agents: {
    implementation: { use: "codex" },
    risk: { use: "claude" },
    synthesizer: { use: "codex" },
  },
}).build(({ input, agents, meta, step }) => {
  const reviews = step("reviews").parallel({
    branches: {
      implementation() {
        const review = step("implementation_review").agent({
          agent: agents.implementation,
          cwd: meta.workspaceDir,
          outputSchema: Review,
          prompt: md`Review implementation readiness for: ${input.topic}`,
        });
        return review.output;
      },
      risk() {
        const review = step("risk_review").agent({
          agent: agents.risk,
          cwd: meta.workspaceDir,
          outputSchema: Review,
          prompt: md`Challenge hidden risks for: ${input.topic}`,
        });
        return review.output;
      },
    },
  });

  const decision = step("synthesize").agent({
    agent: agents.synthesizer,
    cwd: meta.workspaceDir,
    outputSchema: Review,
    prompt: md`Synthesize these independent reviews: ${reviews.output}`,
  });

  return {
    reviews: reviews.output,
    decision: decision.output,
  };
});
WORKFLOW

运行与控制

[!TIP] 通常不需要你来执行这些命令。你的 Agent 会帮你检查和运行 Workflow,并查看和控制 Run。

检查和运行 Workflow

一次性 Workflow 适合使用带引号的 heredoc。 如果源码包含本地 Task/helper 模块,或需要继续修改和复用,请保存为 workflow.ts。 临时源码也可以放在项目目录之外。

# 检查 Workflow,但不创建 Run
acpus workflow check workflow.ts --input '{"topic":"release readiness"}'

# 在终端查看静态工作流树
acpus workflow viz workflow.ts

# 生成自包含的 HTML 工作流图
acpus workflow viz workflow.ts --out workflow.html

# 创建 Run
acpus workflow run workflow.ts --input '{"topic":"release readiness"}'

# 查看 Run
acpus runs inspect 

workflow check 会执行类型检查、编译和验证,但不会创建 Run。 workflow viz 默认在终端显示工作流树;--out 会生成 HTML 文件。 workflow run 创建 Run,并输出简短的 inspect/follow 提示。 runs inspect 显示 Run 的持久化状态。

查看和控制 Run

查看状态

acpus runs inspect 
acpus runs inspect  --forensics
acpus runs inspect  --target  --forensics
acpus runs inspect  --await-decision
acpus runs inspect  --follow

--forensics 显示冻结的定义、实际调用值和调度器接受的结果。 省略 --target 时,它默认检查 root。

--await-decision 会等待下一处需要判断的输入、暂停或终态。 --follow 只等待 Run 进入终态。

运行控制

acpus runs pause 
acpus runs resume 
acpus runs retry  --target 
acpus runs steer  --target  --instruction ''
acpus runs signal  --target  --payload '{"approved":true}'
acpus runs fork  --workflow workflow.ts

retry 可以重试失败或超时的 Task、Agent 和 frame。local Agent Retry 会先清理并放弃受影响 的 Session generation,再以 authored prompt 创建下一代;若范围碰到显式共享 Session, Runtime 会拒绝并给出对应的 fork --target 命令。steer 采用 Interrupt & Continue:先 fence 并 drain 当前 Turn,再在同一 Session 的 replacement Turn 中使用新指令。 fork 创建新 Run。 新 Run 只会复用与新 Workflow 兼容、且依赖未变化的已完成工作。

Hook

通过 Hook 在 Workflow 执行的特定生命周期执行本地命令,例如:

  • 运行启动时和完成后,执行特定的环境准备和清理工作
  • 运行等待 Signal 输入时,发送通知给你
  • 执行到特定类型节点前,记录执行信息到特定日志文件

Hook 命令失败或超时不会改变 Workflow 的状态和输出。

Acpus 通过统一配置管理 Hook。文件位置、完整结构、事件、筛选、验证命令、输入格式和加载时机见 Acpus 配置。

你也可以让你的 Agent 来配置 Hook。

配置 Agent

Acpus 通过 @acpus/acp 使用稳定的 ACP v1 会话接口。具名 Agent、Preset、项目/全局作用域、解析优先级和加载时机统一见 Acpus 配置。显式 { command: "..." } 会绕过具名解析。

Workflow Agent profile 还可声明 model 和字符串到字符串的 config 选项,例如 { use: "my-agent", model: "model-id", config: { reasoning_effort: "high" } }。 Acpus 将它们作为 ACP 会话的期望 model 和 options 应用,并在恢复会话时重放。

Skill 安装的补充说明

标准 Skills 工具负责安装、更新和移除 Acpus 路由 Skill:

npx skills add kelvinschen/acpus

这个无版本路由只要求 Agent 每个任务运行一次 acpus skill read。该命令从当前 CLI 版本读取完整 Skill,并注入当前 workspace 的 Preset 和 authoring scale context。因此升级 CLI 后,完整指南会自动更新,无需重新安装路由 Skill。

不安装路由 Skill 也可以直接运行 acpus skill read 获取相同的完整指南。

核心概念

执行单元

元素 用途
Agent 让 ACP-compatible Agent 执行研究、实现、审查或汇总。
Task 使用 JS 代码执行文件操作、命令和验证、生成 Artifact。
Signal 等待用户或外部控制者提交类型化 Payload。等待状态会持久保存。
控制流 if、switch、parallel、fanout 和 loop 组合节点;assert 检查条件。

持久化对象

Acpus 将 Run 状态保存在当前 Workspace。

概念 含义
Workflow module 从 stdin 或文件路径提供的 TypeScript 模块。它声明 Agent、节点、值流和输出。
WorkflowIR Acpus 检查并编译 TypeScript 后生成的冻结、可序列化工作流图。
Run 一次已创建的执行。它包含冻结的 Workflow 数据、输入和 Agent 映射。
Node Workflow 中稳定的执行单元。每个 Node 在运行时有 Attempt;动态控制流还会生成可寻址实例。
Artifact Task 或 Agent Attempt 注册的持久化文件。Artifact 与 Run 关联。

从旧版本迁移

Acpus 0.5 使用 YAML Workflow Spec,并采用不同的节点模型和 CLI。 当前版本使用 TypeScript 模块、Expr 值流、Agent、Task、Signal、新的控制面和新的持久化 Runtime。 当前版本不提供兼容层(compatibility shim)。

迁移指南 说明概念对应关系和重写步骤。 旧版文档见 Acpus 0.5.2 中文 README。

文档

当前实现机制以代码、导出类型和可执行帮助为准;跨实现保持的稳定产品合同见 specs/。 未来工作放在 docs/roadmap/。 旧版本保留在 Git Tag 历史中。

开发

pnpm install
pnpm build
pnpm typecheck
pnpm test

许可证

MIT

View this README on GitHub

Рекомендуемые инструменты

Попробуйте другой запрос или уберите фильтр.

Установка

npx skillfish add kelvinschen/acpus