Aude Code

aude-workflow(7)

NAME

aude-workflow — GitHub 工作流中由手机操控的 aude 会话

DESCRIPTION

aude 的 GitHub 操作在托管运行器上运行一个会话。每次工作流运行都是一台新机器,它生成自己的密钥。工作流列入可以通过隧道访问这台机器的设备。会话在工作流日志中打印这台机器的 URL 和二维码。

拥有已列入设备的人扫描该二维码,就能像在任何机器上 (aude-rc(7)) 一样阅读实录并操控会话。

SETUP

在仓库设置中一次性添加以下各项:

  1. 名为 ‘aude’ 的部署环境,只有分支 ‘main’ 可以部署到它。
  2. 该部署环境的配置变量 AUDE_PEERS,即一个包含每台可以操控的设备的 peers.json (aude-rc(7) FILES) 文件。应用在它的附加表单上显示自己的指纹。机器在 ‘aude devices’ 的 ‘this machine’ 行上显示自己的指纹。
  3. 该部署环境的机密: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 是可选的。

要安装的发布版本,例如 0.2.0。它必须与 SHA256SUMS 和它的证明相符。
‘claude’ 或 ‘codex’ 之一。前面的步骤必须安装它并登录。
aude(1) 的 --agent 选项,默认使用 ‘default’ 智能体。
会话的名称。
会话的标准输入。每一行 (aude(1) INPUT AND OUTPUT) 都是一个轮次。
对等方列表。该操作把它写入 ~/.aude/rc/peers.json。
‘trycloudflare’、‘tailnet’ 或 ‘funnel’ 之一。前面的步骤必须把它的程序放到 PATH 中。该操作把它写入 ~/.aude/rc/tunnel.json。然后它用 ‘aude devices’ 打印这两个文件。

该操作只在 ‘schedule’ 和 ‘workflow_dispatch’ 工作流事件上运行。运行器上必须没有 ~/.aude。然后它运行 ‘aude --harness harness --agent agent --name name’ 命令,以任务作为标准输入,直到任务完成且没有等待中的行。作业的 ‘timeout-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

aude(1), aude-rc(7), aude-tunnel(7)

CAVEATS

不要把机密或写入令牌交给 aude 之后的步骤。模型可以在运行器上使用 sudo。它可以读取作业的每个机密、工作流运行的密钥和隧道的状态。它可以更改 aude 之后的步骤。

扫描 aude 步骤的第一个二维码。模型也可以打印二维码。

AUDE_PEERS 中的设备可以在列入它的工作流的每次运行中执行 shell 命令。

任何能读取仓库的人,都能读取工作流日志和上传的记录。它们显示模型打印的内容。

该操作未在托管运行器上测试过。监听器未在 Tailscale 的隧道上测试过。