Drisp CLI 软件
对非定型剂的定型管弦乐.
AI编码代理商在推理上越来越好——但长视距任务仍然中断. 快速漂移,结果因跑步而异, 没有任何好的方法可以将有效的东西 包装成你整个团队可以重复使用的东西。 经纪人不再是瓶颈了 绳子是.
雅典娜流是一个 工作流程运行时间 页:1 克劳德代码 财务报告和审定财务报表 OpenAI 代码它增加了结构化的工作流程、实时可观察性、会话持续性以及插件系统 -- -- 因此,代理驱动的任务产生贯穿运行、团队和模型的一致结果.
npm install -g @drisp/cli && drisp
读取文件 - 指南、工作流程编写、插件 API 等.
为什么是雅典那流?
编码人员在一次性任务上运作良好. 需要的时候 可重复的多步骤执行 -e2e测试生成,迁移计划,发布工作流程 - 事情会分崩离析:
| 疼痛点 | 发生什么事了 |
|---|---|
| 无可复制性 | 相同的即时, 相同的模型, 不同的输出 |
| 长相漂移 | 没有检查站,特工们就会把小错误加成大错误 |
| 提示是无法携带的 | 开发者的工作不能转移给团队 |
| 黑盒执行 | 你看到最后的输出,而不是40个工具呼叫到达那里 |
| CI作为后想 | 大部分吊带是用于交互用途,而不是管道 |
雅典娜流引入 工作流程层 在你和内衣之间. 工作流程具有声明性,版本性,可共享性--它们定义了即时模板, 多会场循环,包含完成跟踪,插件捆绑,隔离政策, 和模式偏好。 跑步时间处理剩下的.
工作流程编码 - 不仅仅是一个快速的, 而是循环逻辑, 进度跟踪, 和工具配置 使它可靠。 定义一次,到处跑.
代理工作流程市场 --浏览,安装,并更新社区所建的工作流程,如软件包等.
实时观察 ——每一次工具调用,许可决定的终端直播,并随其发生而产生结果.
持续开会和复会 – 每跑被保存到 SQLite. 捡起你离开的地方 与完整的状态.
策略-不可知论 - 相同的工作流程,相同的UI,相同的会话模型跨越克洛德代码和Codex.
CI - 本地 - 说吧 drisp run 以安全默认操作、 JSONL 输出和结构化退出代码运行.
开始
1. 安装 - 需要20+节点和至少一个接头(claude 或者说 codex在你的路径.
npm install -g @drisp/cli
2. 运行 ——设置向导处理主题,调用校验,以及您的第一个工作流程.
drisp
3. 探索
drisp resume # Pick up where you left off
drisp sessions # Browse past sessions
drisp workflow install e2e-test-builder # Install a workflow from the marketplace
策略
| 节奏 | 状态 | 一体化 |
|---|---|---|
| 克劳德代码 | 支助 | 通过本地 Unix 套接字传输的 Hook 事件 |
| OpenAI 代码 | 支助 | 通过 codex app-server 协议 |
| 打开代码 | 计划 | 适配器占位符; 尚未启用 |
工作流量
Workflows 包即时模板,循环策略,插件依赖性,隔离政策,模型配置为单一可移植单元. 任何人都可以编剧和分享.
drisp workflow list # See what's installed
drisp workflow search # Browse available workflows
drisp workflow install e2e-test-builder # Install from the marketplace
drisp workflow use e2e-test-builder # Set as the active workflow
drisp workflow upgrade # Re-sync all from source
管理市场来源 :
drisp marketplace add owner/repo # Add a marketplace source
drisp marketplace add ./local/path # Add a local marketplace
drisp marketplace refresh # Refresh configured remote sources
drisp marketplace refresh owner/repo # Refresh one remote source
drisp marketplace list # List configured sources
drisp marketplace remove owner/repo # Remove a source
从本地文件或特定市场中安装 ref:
drisp workflow install ./path/to/workflow.json
drisp workflow install e2e-test-builder@lespaceman/athena-workflow-marketplace
CI / 自动化
drisp run 为输油管而建 默认安全 —— 允许和询问钩失败, 除非你选择加入 .
人间大门
在 " 工作流运行 " 中,有四项行动停止了对一个成员的会议:计划批准、合并、象征性预算以及不可逆转的行动(部署、发布、出版、破坏性的git)。 设定每个 ask 或者说 auto 内 .athena/config.json 下级 "gates",或用于运行 --gate merge=ask. 合并和不可逆转的行动由会话和每个子代理人的PreToolluse钩规则执行。 见 文件/人行道 给火柴的规则.
权限未附加中枢
drisp有一个单门。 许可请求或问题由"跑道"的附属者回答:交互式终端,或通过"跑道"传送决定的中枢. 无接通枢纽( 无头) drisp run没有人可以问,所以在 guarded 财务报告和审定财务报表 standard 请求 等待时间: 运行维持了待定的决定, 没有任何东西是代表它自动批准或自动拒绝的. 持取止有二道一. 如果你准备好了 --timeout-ms,运行退出时带有超时退出代码. 如果运行属于工作流程,则请求是 保持,然后停放,然后重放数字 :
- 别动. 许可请求中没有规则解答 优雅窗口 —— 说
permissionGraceMs内~/.config/athena/config.json或者说.athena/config.json(项目胜出),--permission-grace-ms每跑道,默认为60000毫秒——这样一个接通的中枢就可以接通. 由于没有中心,没有人可以等待,请求立即被推迟. - 公园. 当窗口出现未回答时,工具呼叫被拒绝 推迟 结果,转弯结束,跑步公园在
awaiting_attention在《日刊》和运行记录中记录了请求——其编号、工具和一行输入摘要.drisp runs显示待决问题,中心作为needs_human边框. - 重弹.
drisp run --continue=<session> --answer=allow|deny "<reply>"(或一个answer中枢在"跑"停放时发送)根据请求存储答案. 在继续时,代理重新发出相同的呼叫,存储的答案被重放到其中,没有提示;没有提示,请求再次被持有. 见 人类简历。 。 。 .
--isolation autonomous 运行与没有人看. 许可提示否 问规则 索赔得到答复 允许 根据预设策略,在工具内显示预设已经授予,工作流程运行到 WORKFLOW_COMPLETE正好有两件事情把跑步作为需要的人类: 要求开火的规则,或者结束的转弯 <!-- NEEDS_HUMAN: reason -->中。询问规则是工具名称模式的暂定、每行流程列表 workflow.json 他的动机必须总是传达到一个人身上—— "askRules": ["Bash", "mcp__github__*"] - 还有停放的"跑步"节目 drisp runs 作为 已停放 使用发射的规则(或标记的理由); drisp run --continue 唤醒它.
工作流可以允许本地子代理工具不预设赠款. "allowedTools": ["SendMessage", "ToolSearch", "Monitor", "TaskStop", "ListAgents"] 内 workflow.json 回答这些许可提示 允许 在任何预设下 drisp run 以及互动会议。 只有这五个名字和准确的MCP工具名称(mcp__<server>__<tool>,没有通配符)被接受;其他任何失败的验证. 单位 drisp run 一个命名同一工具的询问规则仍然主张它;交互式会话不适用询问规则。 预设自身所住.
drisp run "summarize risk in this PR" # plain text
drisp run "run checks" --json --on-permission=deny --on-question=empty # JSONL
drisp run "write release notes" --output-last-message release-notes.md # artifact
GitHub 动作
name: drisp-run
on: [pull_request]
jobs:
drisp:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx @drisp/cli run "summarize risk in this PR" \
--json --on-permission=deny --on-question=empty \
--output-last-message drisp-summary.md
- uses: actions/upload-artifact@v4
with:
name: drisp-summary
path: drisp-summary.md
GitLab CI 语录
drisp_run:
image: node:20
script:
- npm ci
- npx @drisp/cli run "summarize pipeline status" \
--json --on-permission=deny --on-question=empty \
--output-last-message drisp-summary.md
artifacts:
paths:
- drisp-summary.md
退出代码
| 代码 | 含义 |
|---|---|
0 | 执行返回;检查工作流程结果以完成或暂停 |
2 | 用法/ 校验错误 |
3 | 启动/ 配置失败 |
4 | 运行时间/ 处理失败 |
5 | 保留遗产政策守则(不再发布) |
6 | 超时 |
7 | 输出写入失败 |
运行者
drisp runner 是将机器与Hub上的团队连接起来,接收其运行并执行它们的长期过程。 它的状态是一 execution.sqlite 存储在已配置的数据目录中.
连接机器 设置 → 运行者 在网络控制台。 它显示一个单用 Connect 代码,有效期为10分钟,在命令内粘贴在机器上:
drisp runner connect K7QF-M2PX --hub https://hub.example.com # join the Team and start the Runner as a background service
drisp runner connect --hub https://hub.example.com # or print a code to approve in the web console
drisp runner status # the saved identity, without its credential, and the service's state
drisp runner restart # refresh the service definition and restart it, e.g. after npm install -g @drisp/cli@latest
drisp runner disconnect [<team>] # leave a Team: stop its Runs there and delete that Team's credential
drisp runner recover <run-id> confirmed-stopped # record a failed outcome after an uncertain crash
要从机器开始,运行 drisp runner connect 没有密码 它打印一个Connect代码和批准它的页面,并等待. 一名签约成员打开页面,检查机器主机名"OS"和"Drisp"版本,选择了"Team",并与之相接. 代码工作一次,10分钟后到期;如果被拒绝或过期,则连接出站处与出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出站出.
一台机器是每组一个跑者。 Connect 写下 Team 的 Runner 身份和证书 ~/.config/drisp/runners/<hub>/<team>.json (在Hub的主持下,因为两个Hubs可以服务同一个组织),只有你才能读取,除了机器的安装身份 ~/.config/drisp/installation-id。再次连接到一个团队,机器已经为报告服务 This machine is already connected to this Team as <name> 并离开证书独自一人, 一旦Hub接受该证书。 当机器无法再为Runner服务时(其身份文件已消失,属于另一个Runner,或者其证书失效),Connect出口1并说为什么没有使用代码; drisp runner connect <code> --hub <url> --replace 然后将新的运行者连接到它的位置,而旧的运行者则会保持列表,离线,直到运行者可以断开连接. 中心不再识别的身份(安装身份重置,新的中心时代)被移到 <team>.json.replaced-<time> 当Connect写出新的。 机器可以服务于多个团队,每个团队有一个跑者:背景服务和 drisp runner 全部运行 drisp runner status 列出每个小组。 任何秘密都不会在机器之间下载或复制. DRISP_HUB_URL 能够站出来 --hub,以及 DRISP_RUNNER_CONFIG 命名一个单独安装的身份文件.
团队的任何成员都可以连接自己的机器. 它会像一个 个人 以主机名命名的运行者, 它只运行其所有者的运行; 团队管理者批准一个打印代码可能使它成为 团队 径行者取而代之.
连接后安装并启动用户级服务, 因此当终端关闭时, 运行器会继续运行, 并在登录时重新开始: a Launch Agent com.drisp.runner.<installationId> 在 macOS (登录于 ~/Library/Logs/drisp/runner-<installationId>.log),一个系统化用户单元 drisp-runner-<installationId>.service 有关 Linux (登录于 journalctl --user -u drisp-runner-<installationId>) (中文(简体) ). drisp runner status 打印服务的名称. drisp runner restart 重写现在安装的 CLI 的服务定义( 新的节点版本或全局前缀) 并重新启动它( 在 Linux 上, 它也会重新启动登录, 与 systemctl --user enable);它从不安装服务,并且像任何运行者重启一样,它失败了运行中(运行中)ADR-0021 (英语)),所以在没有"跑"执行时运行. 服务运行此 drisp 安装, 并保存身份和 PATH 您连接到这里,所以它找到同样的绳子; 没有单位文件可以写入。 每次安装(a) DRISP_RUNNER_CONFIG 身份文件是单独的)获得自己的服务,因此连接一个永远不会停止另一个. 在Linux服务器上, loginctl enable-linger 保持运行时,你被登录。 在已存在身份文件的地方再次运行 Connect 在使用代码前被拒绝, 并按原样离开服务 。 因此, 如果服务无法安装或启动, 连接会以出错退出, 但保留身份: 运行 drisp runner 运行在前方的跑者。 在 macOS 上, 一个已安装但不会在下次登录时启动的启动代理 .
在容器或CI中,或在未发射或系统化的平台上(如果Connect说而且无论如何这样做),将跑道机保留在前地:
drisp runner connect K7QF-M2PX --hub https://hub.example.com --foreground # join the Team, then run in this terminal (Ctrl-C stops it)
drisp runner # run it in the foreground again later
跑者证书每次连接时都会更新,因此一个在周末睡觉的机器会自己重新加入;只有30天没有联系就失效了,然后它又需要Connect. 跑者只离开团队 断开连接数字 : drisp runner disconnect 在机器上,或由连接它的成员在网络控制台上断开连接(管理员可以断开任何运行器). "Hub"停止了上面的每次跑步("已停止:跑步者已断接"),而机器则删除了"Team"的证书,一次从盒子中取出,或下一次从控制台断接时到达"Hub". 一旦机器没有为Team服务,这项服务就被取消;在此之前,它将继续为其他人服务。 在一台服务于多个团队的机器上, 以 ID 或 Runner 名称命名要离开的团队 drisp runner status 显示.
recover 永远不要重试执行:先停止服务并停止每个被套用,再开始跑者发布结果.
drisp dashboard <sub> 是一个已贬值的别名,其名称是: drisp runner,在0.7.0中被删除.
配置
配置合并顺序 : 全球-项目-CLI旗。 。 。 .
~/.config/athena/config.json # Global defaults
{projectDir}/.athena/config.json # Project overrides
{
"harness": "claude-code",
"model": "sonnet",
"plugins": ["/path/to/plugin"],
"activeWorkflow": "e2e-test-builder"
}
CLI 旗帜
| 旗帜 | 说明 |
|---|---|
--project-dir | 项目目录( 默认: cwd) |
--plugin | 插件目录路径( 可重复) |
--isolation | guarded (默认) standard • 妇女 autonomous |
--theme | dark (默认) light • 妇女 high-contrast |
--ascii | 仅 ASCII 的 UI 格言 |
--verbose | 额外的渲染细节 |
只运行 :
| 旗帜 | 说明 |
|---|---|
--continue | 恢复最近运行的会话(或) --continue=<id>(中文(简体) ) |
--steer | 为下个转弯排队(可重复) |
--json | JSONL 在 stdout 上的生命周期事件 |
--output-last-message | 将最后的助理信件写入文件 |
--ephemeral | 禁用此运行的会话持久性 |
--on-permission | allow • 妇女 deny • 妇女 fail (默认) |
--on-question | empty • 妇女 fail (默认) |
--timeout-ms | 运行困难超时 |
图标
| 命令 | 说明 |
|---|---|
| (默认) | 在 cwd 中启动交互式会话 |
setup | 重新运行设置向导 |
sessions | 交互式会话拾取器 |
resume [id] | 恢复最近一届会议或特定届会 |
run "<prompt>" | 无头运行 CI / 脚本( E)exec 是一个已贬值的别名) |
workflow <sub> | install • 妇女 list • 妇女 search • 妇女 remove • 妇女 upgrade • 妇女 use |
marketplace <sub> | add • 妇女 refresh • 妇女 remove • 妇女 list |
发展
npm install && npm run build # Build
npm test # Test
npm run typecheck # Type-check
npm run lint # Lint
npm run dev # Watch mode
编码协议约束
文件在 src/harnesses/codex/protocol/generated 自动生成自 codex app-server schema - 不要手动编辑 。 刷新方式 :
scripts/update-codex-protocol-snapshot.mjs
提交输出, 这样其他人可以构建没有生成器 .