aude-workflow(7)
NAME
aude-workflow —
GitHub
工作流中由手机操控的
aude 会话
DESCRIPTION
aude 的 GitHub
操作在托管运行器上运行一个会话。每次工作流运行都是一台新机器,它生成自己的密钥。工作流列入可以通过隧道访问这台机器的设备。会话在工作流日志中打印这台机器的
URL 和二维码。
拥有已列入设备的人扫描该二维码,就能像在任何机器上 (aude-rc(7)) 一样阅读实录并操控会话。
SETUP
在仓库设置中一次性添加以下各项:
- 名为 ‘
aude’ 的部署环境,只有分支 ‘main’ 可以部署到它。 - 该部署环境的配置变量
AUDE_PEERS,即一个包含每台可以操控的设备的 peers.json (aude-rc(7) FILES) 文件。应用在它的附加表单上显示自己的指纹。机器在 ‘aude devices’ 的 ‘this machine’ 行上显示自己的指纹。 - 该部署环境的机密:claude
使用
ANTHROPIC_API_KEY或CLAUDE_CODE_OAUTH_TOKEN,codex 使用OPENAI_API_KEY。为该机密设置支出上限。
‘trycloudflare’
不需要更多设置。使用
‘tailnet’ 或
‘funnel’
时,在前面的步骤中,用一个只创建
‘tag:aude-workflow’
节点的 Tailscale OAuth
客户端运行
‘tailscale/github-action’
这个 GitHub
操作。然后运行
‘sudo tailscale set --operator=$USER’
命令。在 tailnet
的策略中,让该标签无法访问任何节点。其余内容见
aude-tunnel(7)。
THE ACTION
‘dickolsson/aude/action’
接受七个输入。只有
agent 是可选的。
version- 要安装的发布版本,例如 0.2.0。它必须与 SHA256SUMS 和它的证明相符。
harness- ‘
claude’ 或 ‘codex’ 之一。前面的步骤必须安装它并登录。 agent- aude(1) 的
--agent选项,默认使用 ‘default’ 智能体。 name- 会话的名称。
task- 会话的标准输入。每一行 (aude(1) INPUT AND OUTPUT) 都是一个轮次。
peers- 对等方列表。该操作把它写入 ~/.aude/rc/peers.json。
tunnel- ‘
trycloudflare’、‘tailnet’ 或 ‘funnel’ 之一。前面的步骤必须把它的程序放到PATH中。该操作把它写入 ~/.aude/rc/tunnel.json。然后它用 ‘aude devices’ 打印这两个文件。
该操作只在
‘schedule’ 和
‘workflow_dispatch’
工作流事件上运行。运行器上必须没有
~/.aude。然后它运行
‘aude --harness harness
’
命令,以任务作为标准输入,直到任务完成且没有等待中的行。作业的
‘--agent agent
--name nametimeout-minutes’
会停止会话。
它的输出 records
为会话及其子智能体的每个记录目录各给出一行。该操作不上传任何内容。
STEERING
在宽窗口中打开作业的工作流日志。用手机的相机扫描
aude
步骤的第一个二维码。轻点
Attach。在计算机上,把二维码上方的
URL 交给 ‘aude attach’
命令。
在应用中,每次工作流运行都是一台新机器,有它自己的 URL。应用不保留关于它的任何内容。作业结束时,应用显示该机器无法访问。关闭它。
EXIT STATUS
aude 步骤以 ‘aude
devices’
或会话的退出状态
(aude(1))
失败。出现
DIAGNOSTICS 中的
‘aude:’
行之后,它以 1
失败。
EXAMPLES
对于 claude:
on:
schedule: [{ cron: "17 3 * * *" }]
workflow_dispatch: {}
permissions: { contents: read }
jobs:
nightly:
runs-on: ubuntu-24.04
environment: aude
timeout-minutes: 120
steps:
- uses: actions/checkout@<sha>
with: { persist-credentials: false }
- run: |
curl -fsSLo cloudflared https://github.com/cloudflare/cloudflared/releases/download/<version>/cloudflared-linux-amd64
echo "<sha256> cloudflared" | sha256sum -c
sudo install -m 0755 cloudflared /usr/local/bin/cloudflared
- run: npm install --global @anthropic-ai/claude-code@<version>
- uses: dickolsson/aude/action@<sha>
id: aude
with:
version: <version>
harness: claude
name: nightly
task: Do the task in .github/aude/nightly.md.
peers: ${{ vars.AUDE_PEERS }}
tunnel: trycloudflare
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- if: always() && steps.aude.outputs.records != ''
uses: actions/upload-artifact@<sha>
with:
name: aude-nightly-${{ github.run_id }}
path: ${{ steps.aude.outputs.records }}
对于 codex,aude
步骤使用 ‘harness:
codex’ 且不使用
‘env’。在它之前登录:
- run: npm install --global @openai/codex@<version>
- run: printenv OPENAI_API_KEY | codex login --with-api-key
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
在校验和与证明的各行之后,aude 步骤的工作流日志显示:
installed: aude <version>, linux-x86_64 rc: made this device's key; no machine lists it yet this machine <fingerprint> tunnel trycloudflare my phone <fingerprint> devices reach this machine at AUDE:<name>$/<fingerprint>: my phone <the QR code>
DIAGNOSTICS
- aude: version '<version>' is not a release, such as 0.2.0
- aude: no release for a <system> <architecture> hosted runner
- aude: the workflow event <event> can put another's text in the task; aude runs on schedule and workflow_dispatch alone
- aude: <home>/.aude exists; aude runs on an ephemeral hosted runner alone
- rc could not read peers.json: <defect>
- 更正
AUDE_PEERS。 - rc could not read tunnel.json: <defect>
- 更正
tunnel输入。 - devices cannot reach this machine: the <tunnel> tunnel <finding> — see aude-tunnel(7)
- 安装或设置它的程序。
- could not attach — unauthorised: this machine does not list this device
- 把该设备添加到
AUDE_PEERS。下一次工作流运行会列入它。
SEE ALSO
CAVEATS
不要把机密或写入令牌交给 aude 之后的步骤。模型可以在运行器上使用 sudo。它可以读取作业的每个机密、工作流运行的密钥和隧道的状态。它可以更改 aude 之后的步骤。
扫描 aude 步骤的第一个二维码。模型也可以打印二维码。
AUDE_PEERS
中的设备可以在列入它的工作流的每次运行中执行
shell 命令。
任何能读取仓库的人,都能读取工作流日志和上传的记录。它们显示模型打印的内容。
该操作未在托管运行器上测试过。监听器未在 Tailscale 的隧道上测试过。