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’
对会话的每个事实计数。
| kind | 字段 | 含义 |
| 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
--harnessname- claude 或 codex。
aude、print和start必须带有此选项。其他命令从记录中读取它。 --modelname- 框架的一个模型,用名称或标识符指定。一个系列表示该系列最新的模型:在 claude 上是 opus、sonnet、haiku 或 fable,在 codex 上是 sol、astra、luna 或 terra。
--effortlevel- low、medium、high、xhigh 或 max。
--agentname- 项目的一个智能体,或者
default,即
aude的智能体。参见 FILES。 --resumeid- 继续具有此 ID 的对话。
--namename- 会话的名称。参见 aude-rc(7)。
--budgetduration- 对于
start和send,表示轮次可以运行的最长时间,写成 ‘<n>s’ 或 ‘<n>m’ 或 ‘<n>h’ 的形式。 --limitdurationwait阻塞的最长时间,形式相同。--onname ...- 此子智能体在其基础上构建的子智能体。参见 start。
-h,--help,--version- 打印摘要或版本,然后退出。
COMMANDS
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
之外,每个命令都在队列中等待它的轮次。
/login- 登录。参见 AUTHENTICATION。
/clear- 开始新的对话。如果旧对话运行过轮次,打印它的恢复行。
/model[name]- 显示模型和各个标识符,或更改模型。
/effort[level]- 显示推理强度,或更改它。
/agent[name]- 显示智能体和各个名称,或更改智能体。更改会以相同的对话重启框架。
/<skill>- 运行项目的一个技能。
命令会以一行作答。在这些行中,
‘<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
子进程不继承任何以
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
start在 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。