@ agora-building/atem (英语)
一个连接建设者,Agora平台,以及AI代理的终端. 管理 Agora 工程和令牌, 路由任务 站点 和AI编码代理, 更多 - 所有来自单一的CLI/TUI.
安装
npm install -g @agora-build/atem
或者通过 shell 脚本 :
curl -fsSL https://dl.agora.build/atem/install.sh | bash
两者都下载了您平台的预设二进制(linux-x64,linux-arm64,darwin-x64,darwin-arm64).
Npm软件包为已出版版本下载二进制. 文档
关于 GitHub 的 main 可以描述比最新发布的更新的特性. 检查
atem --version 财务报告和审定财务报表 atem cred --help; 使用包含
命令,或从下方源创建命令。 使用
其明确的路径,例如 ./target/release/atem,以避免旧安装的CLI.
图标
atem # Launch TUI
atem repl # Interactive REPL with AI command interpretation
认证
atem login # Log in with Agora Console (opens browser)
atem logout # Log out from SSO
atem status # Account, pairing, verification, credentials, Astation link and sessions (read-only)
atem pair # Pair with Astation, then verify this device (shows the status when already paired)
atem pair --save # Same, and keep credentials for offline use
atem pair verify # Verify this device with the paired Astation (no re-pairing)
atem unpair [--yes] # Remove the Astation pairing (asks first; your own login stays)
atem login 解锁有限集: 工程列表, 活动对象的令牌
和dev服务器serv rtc, (中文(简体) ), serv convo, (中文(简体) ), serv webhooks) (中文(简体) ).
与Astation对等会解锁全集:金库,同步,内存,技能,
atem cred,以及站台驱动的终端查看、聊天和标记
任务. serv files, (中文(简体) ), config,以及来自
AGORA_APP_ID编号 :AGORA_APP_CERTIFICATE 两者都不需要.
atem pair 从 Astation 接收您的 Agora 登录, 然后验证设备 :
atem和你的Mac各显示一个12个特征的安全代码. 如果匹配, 请输入
y 这里; 点击Mac 代码匹配,然后批准与触摸ID.
任何一方都可以先完成。 他们读到 y 从终端本身,
从未从管道输入或键键中键入, 所以运行 atem pair 在一个
互动终端. 如果校验失败, 配对会保存, Astation
被告诉,和 atem pair 退出非零; 运行 atem pair verify 重试。 仅连接或SSO 配置的会话不会
表示设备已被验证; 检查 atem status与 --save
登录 Astation 共享在 Astation 断开时继续工作; 没有它
断开5分钟后停止( atem 问: --save 未给出).
虽然可以使用,但Agora API调用(atem project list使用; 否则
他们用你自己的 atem login。一次一对: atem unpair 删除
它和保持自己的登录.
一对, atem pair 只打印状态( e)Already paired. Verify this device: atem pair verify · Replace the pairing: atem unpair, then atem pair:
它永远不再对或更改密钥、信任或会话. atem pair verify
验证运行时间的站点链接上的现有对接,当
设备已被校验, 在撤销后拒绝( 运行) atem unpair, (中文(简体) ),
将已撤销的密钥放在一边, 然后 atem pair) (中文(简体) ). atem status 读取
本地文件并询问已运行的认证代理和 atem runtime
(从不开始,从不写,从不使用网络):会话
授权、空间站连接和当地代理人,或 no runtime running。 。 。 .
设备密钥( E)atem cred(中文(简体) )
atem cred unlock # Unlock this device's keys (approve with Touch ID on your Mac)
atem cred lock # Wipe unlocked keys and stop the cred agent
atem cred projects # Send known Git projects to Astation's credential picker (keys must be unlocked)
此设备的密钥被封入磁盘中, 存储密钥只能对齐
麦克(Astation)的家. atem cred unlock 问Mac要它 (Touch)
)并开始背景 atem cred-agent 在记忆中持有键;
在一个设备上,没有Astation验证它用 This device isn't verified. Run atem pair verify first. 从不开始配对或核查.
atem cred lock 擦擦他们,并阻止代理。 升级后运行
atem cred lock 接下来 atem cred unlock 来抓取新代理( 解锁)
首先更新 Atem 的运行时间, 启动代理, 到新构建 .
atem cred projects 发送此 repo 的 Git 远程和工程名称
记得,给Astation的证书拾取者,加密到你的Mac. 一个
当它与Astation站连接时,解锁的Atem也自行发送
蒂尔, atem pair,紧接着 atem cred unlock),所以你需要帮助
atem cred projects 只为了马上从另一笔押金上发出 获取
来自 Astation 本地证书店的值(atem cred get/list则不是
尚可使用;在
加密设计。 。 。 .
更新客户和认证代理 保留远程的原始资本,
例如 github.com/Agora-Build/Atem; 项目身份和重复检查
忽略个案。 老年客户/代理人可以报告小写名. 报告为:
即使内存加密关闭, 也可以留在拾取器中, 也会加密
在发送命令退出之后。 您也可以在其中输入另一个 Git 远程
Astation的地检编辑.
见 配对、解锁和项目建议 当阿特姆在另一台机器上运行时 和升级故障排除.
键
atem token rtc create # Generate RTC token (interactive)
atem token rtc create --channel test --rtc-user-id 0 --expire 3600
atem token rtc create --channel test --rtc-user-id alice --with-rtm # RTC + RTM in one token (reuses rtc-user-id)
atem token rtc create --channel test --rtc-user-id 42 --with-rtm --rtm-user-id bob # Separate RTM account
atem token rtc decode <token> # Decode existing RTC token
atem token rtm create # Generate Signaling (RTM) token
atem token rtm create --rtm-user-id bob --expire 3600
atem token rtm decode <token> # Decode existing Signaling (RTM) token
代号也是Rust图书馆, atem-core,在
GitHub 仓库。 npm 包只安装 CLI .
项目
atem project list # List Agora projects
atem project list --show-certificates # List with app certificates visible
atem project use <N> # Set active project by index (1-based)
atem project use <APP_ID> # Set active project by App ID
atem project show # Show current active project
配置
atem config show # Show resolved config
atem config set astation_ws <URL> # Set Astation WebSocket URL
atem config set astation_relay_url <URL> # Set Astation relay URL
atem config clear # Clear active project selection
atem config convo # Interactive wizard to configure ConvoAI agent
atem config convo --validate # Validate existing config without modifying
atem config convo --config <PATH> # Use a specific config file
默认( 共享跨代理上下文)
atem vault new --summary "auth refactor context" # Create a vault, prints its id
atem vault list # List vaults you can read
atem vault read --vault-id <id> # Current contents
atem vault read --vault-id <id> --history # Every version (shown eN vM)
atem vault read --vault-id <id> --format plain # Bare text (pipe into a prompt)
atem vault write --vault-id <id> --text "decided: JWT in cookie" # Append an entry
atem vault write --vault-id <id> --entry-id 3 --text "..." # Override entry e3
atem vault set-summary --vault-id <id> --text "..." # Update the summary
需要与Astation对齐. 让多个原子( 每个驱动代理) 共享在 Astation 中继器上托管的已版本的、仅包含附件的上下文存储 .
内存和技能( 代理和机器共享)
需要与Astation对齐. 特工相互学习:事实和技能 保存在一台机器上(由克洛德代码, Codex, 或您) 咬了他们.
atem sync # Harvest Claude's memories → push → pull → apply
atem memory add "Relay tests need Valkey on :56379" # Save a fact (project scope inside a repo)
atem memory add --scope global --confidence high "..."
atem memory list # Global, this machine, and this project
atem memory list --all # Every project and machine
atem memory list --full # Everything: full id, status, timestamps, whole content
atem memory list --history [<id>] # Include outdated facts, as replacement chains
atem memory search "valkey" # Local full-text search (offline; CJK works)
atem memory replace <id> "the fact as it is now" # New fact replaces the old one (history kept)
atem memory invalidate <id> # Mark outdated without a replacement
atem memory rm <id> # Remove everywhere
atem memory purge <id> [--yes] # Remove a fact that contained a credential, stop re-harvesting it (asks first)
atem memory apply # Rewrite the managed blocks and skills from the local store
atem memory status # Account, machine, project, pending changes
atem skill add ./my-skill # Directory with SKILL.md (global by default)
atem skill list
atem skill rm <name> # Remove everywhere
atem skill history <name> # Every version, newest first
atem skill restore <name> --version 3 # Re-push an old version as a new one
atem skill purge <name> --version 3 [--yes] # Erase versions that contained a credential (or --all-versions; asks first)
列表中显示的简称为: 8245ecf6…e6fe (前8个+后4个字符).
任何需要命令 <id> 接受该形式(… 或者说 ..一个完整的id,
或者一个独特的前缀.
项目由它确定 origin 遥控,所以两个重置相同
文件夹名称永远不会碰撞 。 atem 显示遥控器本身的拼写
(单位:千美元)github.com/Agora-Build/Atem),但与不敏感大小写匹配.
记忆作为管理区块在 ~/.claude/CLAUDE.md, (中文(简体) ),
~/.codex/AGENTS.md 财务报告和审定财务报表 <repo>/CLAUDE.local.md; 技能转到
.claude/skills 财务报告和审定财务报表 .agents/skills。Git跟踪的文件永远不会被写入.
任何看上去像证书值的都被拒绝; 保存
证书的名字,从来没有它的价值。 见 内存设计。 。 。 .
打开或关闭端到端加密功能。 打开时, 只更改同步
当设备解锁时 (atem cred unlock;见下文.
端到端加密
在 Astation (Settings > Security > 端到端加密) 中打开或关闭. 打开时, 内存内容、 技能文件和金库内容会被加密 这台机器在到达中继器之前 工程名称变成了按键的散列器. 您的Mac, 已验证的 Atem 设备持有账户密钥和持有者 回收材料可以解密该内容。 中继器仍然看到路径识别符和元数据, 例如: 时间戳和密码大小; 它对设备不具有权威性 信任或加密状态。 迁移无法证明服务器已删除旧 纯文本备份 .
必须核查设备(atem pair,或 atem pair verify )和解锁(atem cred unlock) (中文(简体) ).
锁上的时候, atem sync 保持更改队列。 正在打开加密
或关闭移出现有数据;每个被核查的原子在下一个时完成它的部分
atem cred unlock (单位:千美元)atem sync 一个人不能联系Astation. 打开
或者说 关机 是一个待定的迁移, 即使实地计数显示
没有剩余的正文或已过时的字段。 空间实现最终状态
在接受经核实的迁移补全后;然后CLI可以断开.
关闭加密将共享数据迁移到纯文本; 本地站
钥匙链证书保留着对他们的保护。 当地 knowledge.db 留下来
纯正文字 (mode 0600). 见 用户指南
财务报告和审定财务报表 协议设计。 。 。 .
Dev 服务器
atem serv convo # Launch ConvoAI test page (HTTPS)
atem serv convo --config ~/convo.toml # Use custom config
atem serv convo --background # Detached daemon — POSTs /join, registers, exits
atem serv attach <ID> # Open UI bound to a running convo daemon (talk to live agent)
atem serv attach 3 # …or by index from `atem serv list`
atem serv rtc # Launch RTC test page (HTTPS)
atem serv rtc --channel test --port 8443
atem serv rtc --background # Run as background daemon
atem serv files ~/docs # Serve a directory or file over HTTPS (Markdown rendered)
atem serv files ~/docs --background # Port auto-picked; reused next run
atem serv webhooks # Receive Agora webhooks locally (auto-tunneled via ngrok)
atem serv webhooks --no-tunnel # Local listener only — bring your own tunnel
atem serv webhooks --background # Run as background daemon
atem serv list # List running background servers (#, ID, PID, PORT, STATUS, URL)
atem serv info <ID|#> # One server: status, start, every URL with its access code, log
atem serv kill <ID|#> # Kill a server (POSTs /leave for convo)
atem serv killall # Kill all background servers
# Fleet test loop — {appid} and {ts} are expanded by atem
for i in $(seq -f '%04g' 1 10); do
atem serv convo --background --channel 'atem-convo-{appid}-{ts}-'$i
done
serv convo —— ConvoAI语音代理:活录入(RTM),预设选择,活录入(Akool, LiveAvatar, Anam),RTC Stats,API历史,相机切换,RTC加密(键+盐转发给代理),HIPAA模式(路由通过) /hipaa/api/...),音频垃圾.
--background 重新执行为脱去守护进程: 父 POST /join,在 ~/.config/atem/servers/<channel>.json, 出口 。 (笑声) 守护者投票 Agora's GET /agents/{id} 每60个,然后将状态(RUNNING/IDLE/STOPPED/.)写回登记册—— atem serv list 读它时不打任何网络电话. kill编号 :killall 签名守护进程, 接收信号和 POST /leave 离开前。 守护进程日志文件( D)<channel>.log包含 /join URL和请求身体 隐藏秘密.
serv attach <id> ——打开前置HTTPS UI 绑定到运行中的 convo 守护进程频道. 页面隐藏 Start/ stop, 因为守护进程拥有代理; 您加入后可以和代理聊天 。 加密 / HIPAA / 地栅从同一处读取 convo.toml 所以本地的SDK与守护进程使用的匹配.
serv rtc ——RTC测试页面:加入/退出,发布/订阅音频+视频,令牌生成,RTM消息,RTC加密(8个模式;gcm2模式自发生成可复制的盐).
serv files ——服务于HTTPS之上的目录(或单一文件). 标记向 HTML; 附加 ?raw=1 转到任意的 URL 用于原始字节。 用于在远程机器上浏览 AI 生成的文件 .
serv webhooks - Agora Webhook活动的当地接收者(ConvoAI: agent_joined, (中文(简体) ), agent_left, (中文(简体) ), agent_history, (中文(简体) ), agent_error, (中文(简体) ), agent_metrics,.;RTC NCS活动). 验证 Agora-Signature-V2 (HMAC-SHA256) 当一个 secret 已配置为 webhooks.toml; 接受未签名的事件,否则会发出警告。 现场网络控制台 http://127.0.0.1:9090/?t=… (已打印的 URL) 显示来袭事件; 每个事件也会打印出一行摘要来进行 stdout. 默认隧道提供者是 无; 设置 tunnel_provider = "cloudflared" 为零地道快速隧道。 使用 --no-tunnel 如果您正在单独运行 looflared / ngrok , 用于稳定 URL 横跨 atem 重启 .
密码. 每个 atem serv 页面和 API 需要其打印的 URL 中的访问代码(https://…:8443/?t=…),每开始一次新. 打开 URL 设置服务器的 cookie 从地址栏中去掉代码; 没有它, 每个路径都是平原 404, 所以您网络上的其他设备无法找到或使用服务器 。 要共享页面,请使用其 复制链接 按钮:它复制了页面的地址,在您打开的任何主机上,并添加回代码(在本地主机以外的平面HTTP上,浏览器不允许剪贴板,它显示复制的链接)。 背景服务器也打印出来( A)atem serv files, (中文(简体) ), rtc, (中文(简体) ), webhooks他们的日志有它。 对于 serv webhooks 只有现场控制台需要它: /webhook 保留您注册的 URL 。 在ConvoAI页面的API历史中,证书被屏蔽; 附上全权证书全文 复制请求.
频道占位符 —— 说 --channel 接受 {appid} (活动应用代码的前12个字符)和 {ts} (启动时unix epoc 秒). 适合自动生成通道格式的可用设备.
AI 代理人
atem agent launch # Open the original Claude Code CLI in an Atem terminal
atem agent launch codex # Open the original Codex CLI in an Atem terminal
atem agent launch claude --continue # Arguments after the agent type go to that CLI: continue the last Claude session
atem agent launch codex resume --last # Continue the last Codex session
atem agent launch claude -- --help # Use -- to read the agent's own help
atem agent list # The sessions the background runtime holds
atem agent attach ses-… # Reopen a session (screen restored)
atem agent stop ses-… # Stop a session
atem runtime restart # Restart the runtime as this build; sessions keep running
atem agent launch [claude|claude-code|codex] [ARGS]... 运行已安装
claude 或者说 codex CLI,不变,在一个全屏Atem终端. 用这个
您的工作目录和您自己登录的 CLI 。 这里没有东西可以替换
与API对话的CLI. 它的工作没有Astation.
会话属于背景 atem runtime (按需开始,每
profile; 10分钟后退出, 没有会话和前端), 每个代理运行在自己的位置 atem worker 进程。 关闭终端窗口或隐藏窗口( 前缀, 然后) h(中文(简体) )
让会话运行; atem agent attach 重新打开它。 几个克劳德
和 Codex 会话可以同时运行, 如果运行时间继续运行
自动重启。 运行时间也掌握着这台机器的一个A站
连接 : atem pair, (中文(简体) ), atem pair verify, (中文(简体) ), atem cred unlock 财务报告和审定财务报表 atem cred projects 运行在它上(如果需要,它们会启动运行时间),并且永远不会打开它们的
本身,所以配对不会断开运行中的会话。 当一个代理人
打印一个结束, 其最后的输出和一个简短摘要保存在
~/.config/atem/logs/<session id>/。 。 。 .
如果您被对齐并验证, Astation 可以查看每个会话, 控制 其中(租借的Astation持续续签,一次一个控制器;打字) 本地立即收回控制权,并与代理商聊天:发送一个 当无人掌握时, 即时控制( 如果有其他设备, Astation) 在接管前询问, 可以滚动整个保留的对话 后页,然后每页填写其回复信件的提示名称. 每个远程请求都指定准确的会话 。 在经过核实的东道主, 站台,你的电话和批准服务 到达它的端到端 加密的频道与您的账户的签名设备列表核对. 保留 Atem 和 Astation 一起更新:一个更古老的 Astation 被拒绝,直到 现予更新.
Atem自己的密钥默认以前缀Ctrl+]开头. 那就按着它
| 密钥 | 行动 |
|---|---|
h 或者说 m | 隐藏终端; 代理运行 |
g | 控制本地范围 |
a | 您在代理商自己的对话框中回复了批准: 结束等待( 见下文) |
x | 停止代理服务 |
r | 重新绘制屏幕 |
[ | 浏览本地历史( arrows, 空格可选择, 输入可复制, Esc可返回) |
c | 复制可见文本( tmux 在 tmux 内部的缓冲, 否则 OSC 52) |
? | 帮助和最近通知 |
底行读取,例如,
Atem | Claude | Local | Astation ✓ | Notice | Ctrl+] then ?:help数字 :
Claude或者说Codex是屏幕上的代理人.Local指键盘驱动代理;Remote意思是站住脚 控制系统。 打字取回( 前缀, 然后g,没有打字.Astation ✓是指运行时间的站台链接被认证;Astation ✗指无(不是对接,站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站站. 每次重接或再校正都是一个新的远程附件:站 再次查看并再次要求控制.Notice一旦Atem记录了警告或状态信息,就会出现。 新闻 前缀,然后?,阅读最新通知(最新第一).
按前缀为两次发去代理. 要改变它,设置
terminal_prefix = "Ctrl-a" 内 ~/.config/atem/config.toml,或
ATEM_TERMINAL_PREFIX (胜过文件). Ctrl+]、 Ctrl++ 或 缩写
I或m以外的Ctrl+被接受. 这个 CLAUDE_CLI_BIN编号 :CLAUDE_CLI_ARGS
财务报告和审定财务报表 CODEX_CLI_BIN编号 :CODEX_CLI_ARGS 变量仍然覆盖命令.
见 designs/agent-runtime.md。 。 。 .
从Astation聊天. Astation 可以打开 Claude 会话的聊天视图
以 atem agent launch claude: 您的提示显示为信件和
Claude的答复来自它自己的会话记录 已经准备好了,
工作,等待或未知。 阿特姆加了钩子 --settings 运行中
仅; 您 ~/.claude 设置不更改。 来自聊天需要的提示
对会话的控制,输入一次克劳德,并报告为
接受,然后在克洛德转会结束时完成(或失败).
一旦你允许 Atem 的 Codex 钩子, Codex 工作方式也一样(任务)
第一次的时候 atem agent launch codex,见下文):Atem读取了 Codex 的
拥有会话日志,所以 Codex 显示准备,工作,等待或未知. 代码
在第一个提示前, 请输入第一个提示
终端; 聊天后提示工作 。 答复完整(不流出),
和 Codex 的聊天没有推理文本或错误细节.
聊天中断只停止运行转弯 。 见
designs/agent-chat-host.md。 。 。 .
批准从Astation和你的手机的提示. 当克劳德代码或代码
请求允许运行一个工具, Astation 将请求显示为卡( in
a Claude 聊天视图也)和 Atem 请求中继器通知您的设备
控制着一切 一张卡片显示工具和一个简短摘要——命令的第一个
线条或文件路径,永远不要文件内容——和要约 允许一次, (中文(简体) ),
总是允许 (克洛德:克劳德本身提出的规则之一,其中
它被保存; Codex, 只用于 shell 命令 : 总是允许此命令 —— 说
此文件夹中的这个命令, 对于此 Codex 进程的其余部分, 保存
by Atem; 后经
同样的命令是允许的 不要求和显示为"自动允许",
规则可以从Astation取消)或 拒绝 (带有可选内容)
页:1.
回答不需要对会话的控制:您可以使用的任何设备
控制它回答, 谁打字, 第一个答案获胜。 这个
完成卡片显示它是如何结束的 。 终端可以
总是回答 : Claude 将自己的对话框保留在屏幕上( 第一个)
答案胜出),对于 Codex ,您在终端手键中键入
提示返回 Codex 自己的对话框 。 特工们不告诉Atem哪个工具
atem 无法看到给出的答案
他们自己的对话框:在回答后,按前缀,然后 a (计时器)
当一个工具在等待批准时运行时提醒您 。 在那张卡之前
保持打开并保持聊天提示, 因此从不键入提示
打开对话框 。 如果没人回答,什么也不允许:
钩子等后(Claude 10 min, Codex 5 min) 代理在
与往常一样,终点站。 克劳德得到钩子 --settings 每次发射;
关闭它,设定 approvals_hook = false 下级 [claude] 内
~/.config/atem/config.toml (随后启动的会议保留其议事规则)
在终端.
第一个 atem agent launch codex 询问是否添加 Atem 的钩
(每个代码活动一次,供批准和聊天) ~/.codex/hooks.json之后
自己的(备份保存为 hooks.json.atem-bak然后关掉它们,
设定 hooks = false 下级 [codex] 内 ~/.config/atem/config.toml 下一个
atem agent launch codex 把他们带走。 见 届会协议 关于细节.
TUI 模式
| 模式 | 说明 |
|---|---|
| 主菜单 | 特性之间的导航 |
| 代理会话 | 运行时间的 Claude/Codex会话: 启动或附加 |
| 调试源 | 本地生成 Agora RTC/ RTM 令牌 |
| 项目 | 通过 API 浏览 Agora 项目 |
支持的平台
| 平台 | 建筑 |
|---|---|
| 链接 | x64, 武装64 |
| 马科斯 | x64, 武装64 |
从源创建
git clone https://github.com/Agora-Build/Atem.git
cd Atem
cargo build --release
# Binary at target/release/atem
相关项目
许可证
麻省理工学院