Aude Code

aude(1)

NAME

aude — 基于 claude 或 codex CLI 的编程智能体

SYNOPSIS

aude --harness name [options]

aude print --harness name [options] text

aude start name --harness name --budget duration [--on name ...] [options]

aude send target --budget duration

aude interrupt target

aude wait [target ...] --limit duration

aude attach target | url [--since sequence] [--json]

aude sessions [--all] [--json]

aude remove target ...

aude pair | devices | revoke | tunnel,参见 aude-rc(7)

aude -h | --help | --version

DESCRIPTION

aude 把一个框架(claude 或 codex)作为子进程运行。它会替换该框架的指令。模型只有这些工具:在 claude 上是 Read、Bash 和 Skill,在 codex 上是 exec、apply_patch 和 view_image。参见 CAVEATS。

会话(session)是一次对话,它有一个名称和一个目录。 宿主(host)是运行该会话的 aude 进程。 记录(record)在宿主退出后仍把会话的事实和实录保存在磁盘上。 轮次(turn)是一行输入所对应的工作。 子智能体(subagent)是由 aude start 在它自己的 git 工作树中创建的会话。 目标(target)是范围内的某个会话:它的名称、ID 或 ‘<name>#<tag>’ 形式,或者是其中之一的唯一前缀。 ‘<tag>’ 是 ID 的前 8 个字符。 范围(scope)是当前的 git 仓库,在仓库之外则是当前目录。

INPUT AND OUTPUT

当标准输入和标准输出是终端时, aude 是 aude-terminal(7) 的行编辑器。

没有终端时,标准输入的每一行是一个轮次。 aude 在该轮次完成后发送下一行。 ‘!interrupt’ 这一行会中断正在运行的轮次。标准输出是不带颜色的实录。标准错误接收诊断信息。输入结束后, aude 会把每个轮次运行到结束,然后退出。如果有轮次运行过,标准输出的最后一行是 DIAGNOSTICS 中的恢复行。

每个宿主都会与本机器的监听器建立一条链路。参见 aude-rc(7)。

The JSON entry

print 和 attach --json 为每个实录条目写入一行 JSON。每个条目都有 ‘kind’ 字段、 ‘sequence’ 字段和 ‘timestamp’ 字段。 ‘timestamp’ 是 RFC 3339 时间。 ‘sequence’ 对会话的每个事实计数。

字段 含义
user text, origin 会话读取的一行
assistant text 模型的回答
thinking 模型在思考
tool_use tool, tool_use_id, summary, input_preview 一次工具调用
tool_result tool_use_id, summary, is_ok 一次调用的结果
notice text 来自会话的一行
error text 一次失败,它使退出码为 1
cleared text /clear 结束了对话

The listing

start, send, interrupt, wait, sessions 和 remove 为每个会话打印一个列表行:

<name>#<tag> <state> exit=<n> quiet=<n>s queued=<n> commits=<n> dirty=<n> sequence=<n> <directory>

状态如下:

waiting
正在等待其 --on 子智能体的子智能体
working
有轮次在运行或在队列中
done
没有轮次在运行或等待,并且最后一个轮次(如果有)的退出码为 0
failed
没有轮次在运行或等待,并且最后一个轮次或宿主已失败。 ‘exit’ 说明原因。

‘quiet’ 统计自最后一个实录条目以来的秒数。 ‘queued’ 统计队列中的轮次。 ‘commits’ 和 ‘dirty’ 分别统计子智能体的 git 提交和未提交的路径。 ‘-’ 表示该字段不适用。

--json 给出 ‘changes’ 和记录。记录中有 ‘work.error’ 字段,最后的回答位于 ‘activity.last_assistant_text’ 中,用于 --resume 的 ID 位于 ‘facts.settings.conversation’ 中。

OPTIONS

name
claude 或 codex。 aude、print 和 start 必须带有此选项。其他命令从记录中读取它。
name
框架的一个模型,用名称或标识符指定。一个系列表示该系列最新的模型:在 claude 上是 opus、sonnet、haiku 或 fable,在 codex 上是 sol、astra、luna 或 terra。
level
low、medium、high、xhigh 或 max。
name
项目的一个智能体,或者 default,即 aude 的智能体。参见 FILES。
id
继续具有此 ID 的对话。
name
会话的名称。参见 aude-rc(7)。
duration
对于 start 和 send,表示轮次可以运行的最长时间,写成 ‘<n>s’ 或 ‘<n>m’ 或 ‘<n>h’ 的形式。
duration
阻塞的最长时间,形式相同。
name ...
此子智能体在其基础上构建的子智能体。参见 start。
, --help, --version
打印摘要或版本,然后退出。

COMMANDS

print

aude print 把文本作为一个轮次发送。它在该轮次完成后退出。它不保留记录。它不读取标准输入。标准输出是 JSON 条目。标准错误接收诊断信息,最后接收恢复行。

start

aude start name 创建一个子智能体。它的第一个轮次是标准输入,预算由 --budget 给出。它的工作树是仓库中的 .aude/worktrees/<name>,分支为 name。 如果该分支已存在, start 会使用它。该目录必须尚不存在。 aude-rc(7) 中的 --name 规则不得改变该名称。 start 在宿主收到该轮次时返回列表行。

使用 --on 时,子智能体会等待每个指定的子智能体。它的宿主按给定的顺序合并它们的分支。参见 aude-team(7)。

send

aude send target 把一个轮次交给一个会话。标准输入就是该轮次:文本、技能或斜杠命令。文本会加入正在运行的轮次。其他轮次在队列中等待。如果会话没有宿主, send 会启动一个宿主。

interrupt

aude interrupt target 中断正在运行的轮次。该轮次得到错误 ‘interrupted’ 和退出码 9。

wait

aude wait 会阻塞,直到没有指定的会话处于 waiting 或 working 状态,或者直到 --limit 结束。没有目标时,它等待范围内的每个子智能体。

attach

没有终端时, aude attach target 打印正在运行的轮次的条目,或最后一个轮次的条目。 --since sequence 打印 sequence 之后的条目。 --json 打印 JSON 条目。

有终端时, attach 在该会话上,或在 URL 所指的机器上,打开 aude-terminal(7) 的行编辑器。如果会话没有宿主,它的第一行会启动一个宿主。

sessions

aude sessions 打印范围内每个会话的列表行。 --all 打印本机器上的每个会话。

remove

aude remove target ... 移除子智能体的工作树、分支和记录。它只移除这样的子智能体:处于 done 或 failed 状态,没有未提交或未跟踪的文件,并且分支已合并。否则,它什么也不移除。

SLASH COMMANDS

aude 只接受这些命令。除了 /login 以及不带名称的 /model 或 /agent 之外,每个命令都在队列中等待它的轮次。

登录。参见 AUTHENTICATION。
开始新的对话。如果旧对话运行过轮次,打印它的恢复行。
[name]
显示模型和各个标识符,或更改模型。
[level]
显示推理强度,或更改它。
[name]
显示智能体和各个名称,或更改智能体。更改会以相同的对话重启框架。
运行项目的一个技能。

命令会以一行作答。在这些行中, ‘<what>’ 是 model、effort 或 agent:

  • ‘<what> <value> · available: <values>’
  • ‘<what> set to <value>’
  • ‘unknown <what> '<value>' — available: <values>’
  • ‘model change failed — <detail>’
  • ‘effort change failed — no response’
  • ‘effort is not supported by <model>’
  • ‘clear failed — context is unchanged’
  • ‘unknown command /<name> — aude accepts /login /clear /model /effort /agent and /<skill>’

/attach, /switch 和 /detach 是行编辑器的命令。参见 aude-terminal(7)。

AUTHENTICATION

aude 使用框架保存的登录,在 claude 上是对 Claude 的登录,在 codex 上是对 OpenAI 的登录。 aude 从不读取该登录。 aude 拒绝其他提供商。

如果登录不正确, aude 会打印像 ‘not logged in to Claude — type /login’ 这样的一行。有终端时, /login 会运行 ‘claude auth login --claudeai’ 或 ‘codex login’ 命令。

ENVIRONMENT

任何值都会去除颜色和文本样式。
aude 在其中的绝对路径条目里查找框架和隧道。
空值或 ‘dumb’ 会去除颜色和文本样式,但可达信息除外。

子进程不继承任何以 ANTHROPIC_, CLAUDE_, CCR_, OPENAI_ 或 CODEX_ 开头的名称,也不继承 CLAUDECODE 或 AUDE_DISCLAIMED。 例外是 claude 上的 CLAUDE_CONFIG_DIR 和 CLAUDE_SECURESTORAGE_CONFIG_DIR,codex 上的 CODEX_HOME,以及每个密钥: ANTHROPIC_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, AWS_BEARER_TOKEN_BEDROCK, OPENAI_API_KEY, CODEX_API_KEY 和 CODEX_ACCESS_TOKEN。 git 不获得任何密钥,也不获得任何 GIT_ 名称。

FILES

~/.aude/rc/<id>/events.jsonl
记录的每个事实,每行一个。参见 aude-wire(7) ENTRIES。
~/.aude/rc/<id>/host.lock
宿主在运行时持有这个锁。
~/.aude/rc/<id>/checkpoint.json
‘record’ 是事件文件前 ‘length’ 个字节所对应的记录。
~/.aude/run/<id>/prompt.md
子进程的系统提示词,在子进程运行期间存在。
.aude/worktrees/<name>
子智能体的工作树。
.git/info/exclude
在 git 不忽略 ‘/.aude/’ 时把它加入此文件。
.claude/settings.json, .claude/settings.local.json, .codex/config.toml
项目设置。 aude 会拒绝其中一些设置。参见 DIAGNOSTICS。
CLAUDE.md, AGENTS.md
框架会读取的项目指令。
.claude/skills, .claude/agents
 
.agents/skills, .codex/skills, .codex/agents
项目的技能和智能体,分别用于 claude 和 codex。 aude 只读取智能体文件 <name>.md 或 <name>.toml 中的名称和指令。这些指令会替换系统提示词中 aude 的角色设定。
wiki/README.md
项目 wiki。参见 aude-wiki(7)。

EXIT STATUS

aude 成功时退出码为 0,出错时退出码大于 0。如果标准输出关闭, aude 以 0 退出。TERM、HUP 或 INT 信号会先停止会话,然后 aude 因该信号结束,shell 显示 143、129 或 130。QUIT 信号会立即结束 aude。列表行的 ‘exit’ 字段使用相同的退出码。

1 出错,或者某个会话或 --on 子智能体失败
2 设置被拒绝
3 未登录,并且没有终端
4 其他提供商,并且没有终端
5 框架或宿主未能启动,或已停止
6 ~/.aude/rc 无法使用
7 无法写入指令文件
8 会话不存在或其宿主已离开,连接失败,宿主或命令拨号不到监听器(参见 aude-rc(7)),或 --on 子智能体已被移除
9 预算用完, interrupt 中断了轮次,或 --limit 结束
64 用法不正确, remove 被拒绝,或出现合并冲突
70 一次内部失败

EXAMPLES

打印一个轮次的回答:

$ aude print --harness claude 'hi' | jq -r 'select(.kind=="assistant").text'

DIAGNOSTICS

下面的每一行都是完整的。 EXIT STATUS 给出每一行的退出码:

  • ‘no input — one line on standard input is one turn’
  • ‘empty turn’
  • ‘no session matches '<target>' — try: aude sessions’
  • ‘'<target>' matches <n> sessions:’
  • ‘'<name>' would be folded to '<folded>' — use that name’
  • ‘'<name>' exists — send to it, or remove it’
  • ‘.aude/worktrees/<name> exists and is not a subagent’
  • ‘<name>: not a subagent’
  • ‘unknown agent '<name>' — available: <names>’
  • ‘<name>: interrupt it first’
  • ‘'<name>'s host is out of reach’
  • ‘'<name>' did not start — <detail>’
  • ‘'<name>' exited <code>’
  • ‘an AUDE: target needs a terminal’
  • ‘HOME is unset and the user has no home directory’
  • ‘<name>, from a newer aude’

下面这些行附有解释:

resume with: aude --harness <name> --resume <id>
结束时,该行用于继续本会话。开始时,该行用于继续本会话所替换的记录。
aude cannot start: <detail> — check <file> ...
项目或框架的设置文件设置了 <detail> 所指的内容,例如钩子、API 密钥、MCP 服务器或基础 URL。删除该设置。
a project skill named '<name>' collides with a reserved command name and is not routable
重命名该技能目录。
the harness offers the model skills the project does not hold: <names>
你无法阻止这种情况。
error: <binary> exited <code> mid-turn — reconnecting to session <id>
子进程已停止。该轮次已失败。再次发送该轮次。
aude cannot see the end of <binary> — the session has ended
持有子进程的进程已停止,没有报告。

SEE ALSO

git-merge(1), git-worktree(1), aude-rc(7), aude-team(7), aude-terminal(7), aude-wiki(7), aude-wire(7), aude-workflow(7)

CAVEATS

在沙箱中运行 aude。 模型可以运行你能运行的每条 shell 命令,并且事先不会询问你。

在 macOS 上,把命令所需的访问权限授予 aude,而不是终端;通过 SSH 使用时,在会话开始之前授予。

在 claude 上,CLI 会把登录的电子邮件地址提供给模型。 aude 无法移除它。

计算机的托管设置会覆盖 aude 的设置。 aude 不会拒绝技能设置的钩子。

记录的事件文件会一直增长,直到该记录被移除或被替换。

aude 不能作为 1 号进程运行。请使用 init,例如 ‘docker run --init。’

如果所有 aude 进程都收到 SIGKILL,隧道程序会继续运行。启动自己会话的程序也会继续运行。

模型启动的命令可以在 aude 停止后继续运行。

如果只有 GIT_ 变量给出身份,合并会失败。请用 git config 设置 user.name 和 user.email。