ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 cli-anything-iterm2 的 iTerm2 Agent 化控制:Workspace 快照、会话注入与 tmux -CC 全流程实战

基于 cli-anything-iterm2 的 iTerm2 Agent 化控制:Workspace 快照、会话注入与 tmux -CC 全流程实战 基于 cli-anything-iterm2 的 iTerm2 Agent 化控制Workspace 快照、会话注入与 tmux -CC 全流程实战【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anythingcli-anything-iterm2 是 CLI-Anything 仓库中为 macOS 终端应用 iTerm2 打造的无状态/有状态双模 CLI harness它通过 iTerm2 Python API 与运行中的 iTerm2 进程经 WebSocket 通信将给某个 Session 发文本、读取实时输出与回滚历史、管理窗口/标签/分屏、执行 tmux -CC 工作流、跨窗格广播、弹 macOS 对话框、读写偏好设置等能力全部封装为可脚本化、可 JSON 输出的命令。本文以该 harness 的技能文档为骨架结合仓库源码与全部参考文件整理一份面向 Agent 与开发者可直接照做的完整操作手册读完你将掌握用一条app snapshot在数秒内重建整个 iTerm2 工作区上下文、用发送→等待→读取模式可靠地驱动任意终端会话以及在 iTerm2 中以原生标签页方式编排并读写 tmux 会话的实战方法。一、整体定位iTerm2 的Agent-Native状态化控制层该技能文档开篇即点明 harness 的性质Stateful CLI harness for iTerm2面向 iTerm2 的状态化 CLI harness通过 iTerm2 Python API 经 WebSocket 控制一个正在运行的iTerm2 进程。也就是说它不是一个模拟器而是真实进程的操作层——凡是你用鼠标和键盘能在 iTerm2 里完成的会话级操作都能通过命令完成因此 Agent 可以在既有工作区里降落、定向、接管。从源码结构看iterm2_ctl_cli.py整个 CLI 是基于 Click 的命令行程序内部把 12 个功能域拆成独立模块位于 core/session、tab、window、arrangement、broadcast、dialogs、menu、pref、profile、prompt、tmux与负责状态持久化的session_state。所有 iTerm2 操作本质上是异步的而 CLI 需要同步执行所以 iterm2_backend.py 提供了桥接层用run_iterm2()包装异步协程、以事件循环驱动后在同步的 Click 命令里返回结果。安装前置条件Prerequisites技能文档列出的运行前提恰好也对应后端模块中的硬性检查macOS iTerm2brew install --cask iterm2后端 find_iterm2_app() 只会从/Applications/iTerm.app与~/Applications/iTerm.app两个位置查找找不到就抛出带安装指引的RuntimeError。开启 Python APIiTerm2 → Preferences → General → Magic →Enable Python API。这是 WebSocket 通信的前提未开启时连接会失败。安装包pip install cli-anything-iterm2或从本仓库源码目录执行pip install -e .。后端require_iterm2_running()还会检查iterm2Python 包是否已安装未装时会提示pip install iterm2。前提限制一切操作都要求 iTerm2 正在运行且 Python API 已启用CLI 本身不负责启动 iTerm2只会给出明确的报错指引。二、命令基础语法与输出约定基本语法cli-anything-iterm2 [--json] group command [OPTIONS] [ARGS]--jsonAgent 使用时的必选项。对应 CLI 入口中的output()函数——开启后json.dumps(data, indent2)输出机器可读 JSON否则输出人类可读的缩进文本。技能文档特别强调session screen之类命令不带--json时输出是静默空的务必养成--json习惯。不带任何参数/子命令直接运行cli-anything-iterm2则进入REPL 模式命令间共享上下文见第八节。十一个命令组总览技能文档给出了全部命令组的用途对照是规划自动化时的索引表GroupPurpose用途appApp 状态、工作区快照、上下文管理、App 级变量、模态对话框、文件面板window创建、列出、关闭、调整大小、全屏窗口tab创建、列出、关闭、激活标签页按方向在分屏窗格间切换焦点session发送文本、注入原始字节、读屏幕、读完整回滚、分屏、提示符探测profile列出 Profile、获取 Profile 详情、列出/套用配色预设arrangement保存与恢复窗口布局tmux完整的 tmux -CC 集成引导、连接、窗口、协议命令broadcast通过广播域让多个窗格同步接收按键menu程序化调用任意 iTerm2 菜单项pref读写全局 iTerm2 偏好设置列出全部合法键tmux 设置速记这些分组与 core/ 目录下的同名模块一一对应属于一个分组一个模块、一个子命令一个关注点的清晰分层。三、降落到既有工作区app snapshot定位法这是技能文档反复强调的首选定向命令primary orientation command当你进入一个已经有多个窗格的 iTerm2 环境、又不想逐个窗格去读全屏内容时一条命令即可拿到全局视图cli-anything-iterm2 --json app snapshot它会为所有窗口下的每一个会话返回会话名name、当前目录path、前台进程process、user.role角色标签以及可见区域的最后一行输出last_line。一次调用即可回答现在哪些东西在跑、各在什么目录、最后输出了什么。返回结构参考 json-session.md 中定义的 schema形如{session_count: 3, sessions: [ {session_id: ..., name: api-server, window_id: ..., tab_id: ..., path: /Users/alex/project, pid: 12345, process: node, role: api-server, last_line: Server listening on :3000}, {session_id: ..., name: shell, window_id: ..., tab_id: ..., path: /Users/alex, pid: 67890, process: zsh, role: null, last_line: $ } ]}另一个轻量变体是app status只返回 ID 与名字的清单cli-anything-iterm2 --json app status # {window_count: N, windows: [{window_id:..., tabs:[...]}]}配合命名约定使用给窗格打 role 标签快照之所以能识别出哪个窗格是 API 服务、哪个是日志、哪个是编辑器靠的是创建工作区时打上的user.role会话变量。技能文档给出的命名约定写法是cli-anything-iterm2 session set-var user.role api-server cli-anything-iterm2 session set-var user.role log-tail cli-anything-iterm2 session set-var user.role editor打上标签后app snapshot会把这些 role 与进程、路径一并呈现在同一条输出里实现一次调用看全貌。会话变量的存取规则见第五节。四、标准 Agent 工作流定向 → 设上下文 → 交互 → 建布局技能文档给出了一套可反复套用的四步工作流这也是上下文context机制的实际使用场景——先通过app current把当前聚焦的 window/tab/session 存为上下文之后发送命令就无需再带--session-id# 1. 定向 —— 快照每个会话名称、路径、进程、role、最后一行输出 cli-anything-iterm2 --json app snapshot # 2. 建立上下文保存 window/tab/session ID供后续命令复用 cli-anything-iterm2 app current # 3. 交互 —— 设好上下文后无需 --session-id cli-anything-iterm2 session send git status cli-anything-iterm2 --json session scrollback --tail 200 --strip # 4. 搭建多窗格工作区 —— 打 role 标签让快照之后还能认出它们 cli-anything-iterm2 session split --vertical --use-as-context cli-anything-iterm2 session send python3 -m http.server 8000 cli-anything-iterm2 session set-var user.role http-server其中--use-as-context是一个高频选项新建的窗格/窗口会立刻成为上下文后续命令自动指向它无需再手动set-context。五、Session 级操作详解5.1 输入发送文本与注入字节session I/O来自 session-io.md 的完整输入命令# 发送文本默认自动带换行 cli-anything-iterm2 session send echo hello cli-anything-iterm2 session send text --session-id id cli-anything-iterm2 session send text --no-newline # 注入原始字节转义序列 / 十六进制两种写法等价 cli-anything-iterm2 session inject $\x1b[2J # 清屏转义序列 cli-anything-iterm2 session inject 1b5b324a --hex # 十六进制形式session inject的 JSON 返回为{session_id: ..., injected_bytes: 4}便于断言实际注入的字节数。5.2 输出读可见屏幕与读完整回滚关键区分技能文档原话语义session screen只读可见区域session scrollback一次性原子读取全部历史按最旧→最新排序。# 读可见屏幕 —— 永远加 --json否则输出静默为空 cli-anything-iterm2 --json session screen # 可见区域 cli-anything-iterm2 --json session screen --lines 20 # 读完整回滚历史 cli-anything-iterm2 --json session scrollback cli-anything-iterm2 --json session scrollback --tail 100 # 取末尾 100 行 cli-anything-iterm2 --json session scrollback --tail 500 --strip # 剥离 NUL 字节 cli-anything-iterm2 --json session scrollback --lines 200 # 取最前面 200 行 # 读取当前选中文本 cli-anything-iterm2 session selectionsession scrollback的 JSON 结构json-session.md很有诊断价值{session_id: ..., total_available: 4922, scrollback_lines: 4862, screen_lines: 60, overflow: 0, returned_lines: 100, lines: [...]}其中overflow字段表示缓冲区写满时丢失的行数——技能文档给出的规避办法是在 Profile 里把滚动限制设为 unlimited这样长时运行的命令输出才不会在回滚里被截断丢失。5.3 控制列表、激活、关闭、分屏、改名、重启、调尺寸来自 session-control.md# 列出 / 激活 / 关闭 cli-anything-iterm2 session list [--window-id ID] [--tab-id ID] cli-anything-iterm2 session activate [SESSION_ID] cli-anything-iterm2 session close [SESSION_ID] # 分屏 cli-anything-iterm2 session split # 水平分割上下排列 cli-anything-iterm2 session split --vertical # 垂直分割左右并排 cli-anything-iterm2 session split --use-as-context # 新窗格立刻成为上下文 # 元数据操作 cli-anything-iterm2 session set-name API Worker cli-anything-iterm2 session restart cli-anything-iterm2 session resize --columns 220 --rows 505.4 会话变量内置只读 自定义读写会话变量分两类参考 session-control.md内置只读变量hostname、username、path、pid、columns、rows自定义变量可读可写必须以user.为前缀——这正是app snapshot里role字段的数据来源。# 内置只读 cli-anything-iterm2 session get-var hostname cli-anything-iterm2 session get-var path # 自定义读写必须 user. 前缀 cli-anything-iterm2 session set-var user.role api-worker cli-anything-iterm2 session get-var user.role从源码结构看这些变量与持久化状态一起由session_state模块管理CLI 入口里get_state()/save_state_now()分别承担加载与落盘这正是 harness 被称为Stateful的原因窗口、标签、会话 ID 与上下文在命令与命令之间得以延续无需每次手写 ID。六、可靠执行模式Shell 集成与发送→等待→读取终端交互最大的难点是时序命令发出去后Agent 怎么知道它跑完了技能文档给出的答案是 iTerm2 Shell Integration 三个 prompt 相关命令对应 session-shell-integration.md。前提在目标机器上安装 shell integration 脚本。安装后可用三个命令cli-anything-iterm2 session get-prompt # 拿最近一次提示符command、cwd、state cli-anything-iterm2 session wait-prompt --timeout 30 # 阻塞等待下一个提示符出现 cli-anything-iterm2 session wait-command-end --timeout 120 # 阻塞直到命令结束返回 exit_status推荐执行模式send → wait → readcli-anything-iterm2 session send make build cli-anything-iterm2 session wait-command-end --timeout 120 cli-anything-iterm2 --json session scrollback --tail 50 --stripwait-command-end的成功返回是结构化判定依据{session_id: ..., exit_status: 0, timed_out: false}有了exit_status与timed_out两个字段Agent 可以精确区分命令失败非 0、命令还没跑完超时与正常结束这是比睡固定秒数再读屏可靠得多的编排原语。七、布局管理窗口、标签页、分屏导航与保存布局7.1 窗口与标签页来自 layout-window-tab.md# ---- Windows ---- cli-anything-iterm2 window list cli-anything-iterm2 window create [--profile NAME] [--command CMD] cli-anything-iterm2 window close [WINDOW_ID] # 注意位置参数不是 --window-id省略时用上下文 cli-anything-iterm2 window activate [WINDOW_ID] cli-anything-iterm2 window set-title My Window cli-anything-iterm2 window frame # 取窗口位置/尺寸 cli-anything-iterm2 window set-frame --x 0 --y 0 --width 1200 --height 800 cli-anything-iterm2 window fullscreen on|off|toggle|status # ---- Tabs ---- cli-anything-iterm2 tab list [--window-id ID] cli-anything-iterm2 tab create [--window-id ID] [--profile NAME] cli-anything-iterm2 tab close [TAB_ID] cli-anything-iterm2 tab activate [TAB_ID] cli-anything-iterm2 tab info [TAB_ID] cli-anything-iterm2 tab select-pane right # 焦点移到右侧分屏窗格 cli-anything-iterm2 tab select-pane left|above|below [--tab-id ID]值得留意的两个细节window close用的是位置参数[WINDOW_ID]不是选项式的--window-id技能文档专门加注强调避免误用tab select-pane返回结构化了的方向移动结果{tab_id: ..., direction: right, new_session_id: ..., moved: true}当无法再向该方向移动时moved: false、new_session_id: nullAgent 可用它判断是否已到布局边缘。7.2 Arrangement窗口布局的快照与恢复来自 layout-arrangement.mdcli-anything-iterm2 arrangement list cli-anything-iterm2 arrangement save my-layout cli-anything-iterm2 arrangement restore my-layout cli-anything-iterm2 arrangement save-window window-layout [--window-id ID]配合 role 标签 app snapshot完整的环境重建链路是arrangement restore恢复几何布局 →session set-var user.role重新打标签 →app snapshot验证各窗格就位。八、跨窗格广播与菜单调用8.1 Broadcast同一按键同步到多个窗格来自 broadcast-menu.mdcli-anything-iterm2 broadcast list cli-anything-iterm2 broadcast add s1 s2 # 把两个会话归入同一个广播域 cli-anything-iterm2 broadcast set s1,s2 s3,s4 # 一次设置全部广播域 cli-anything-iterm2 broadcast all-panes [--window-id ID] # 广播到某个窗口的全部窗格 cli-anything-iterm2 broadcast clear # 停止一切广播典型一条命令跑全部窗格的模式cli-anything-iterm2 broadcast all-panes cli-anything-iterm2 session send export ENVstaging cli-anything-iterm2 broadcast clear8.2 Menu程序化触发任意 iTerm2 菜单项对于没有独立 CLI 子命令的 UI 操作可用menu组直接调用菜单cli-anything-iterm2 menu list-common cli-anything-iterm2 menu select Shell/Split Vertically with Current Profile cli-anything-iterm2 menu select Shell/New Window cli-anything-iterm2 menu state View/Enter Full Screen # 查询勾选态与可用性menu state返回该菜单项当前是否勾选checked与是否可用enabled为 UI 态判断提供了非侵入式通道。九、Profile 与偏好设置读写来自 profile-pref.md# ---- Profiles ---- cli-anything-iterm2 profile list [--filter NAME] cli-anything-iterm2 profile get guid # 详细设置 cli-anything-iterm2 profile color-presets cli-anything-iterm2 profile apply-preset Solarized Dark [--session-id ID] # ---- 全局偏好 ---- cli-anything-iterm2 pref list-keys # 全部合法 PreferenceKey 名 cli-anything-iterm2 pref list-keys --filter tmux # 按子串过滤 cli-anything-iterm2 pref get OPEN_TMUX_WINDOWS_IN cli-anything-iterm2 pref set OPEN_TMUX_WINDOWS_IN 2 cli-anything-iterm2 pref theme # 当前主题标签 is_dark 布尔值profile get guid的返回json-session.md如{name: Default, guid: ..., badge_text: null}pref theme返回当前深色/浅色判定可用于自动选择配色方案。tmux 偏好设置速记pref组还内置了 tmux 相关快捷键避免手记完整的 PreferenceKey 名cli-anything-iterm2 pref tmux-get # 一次取全部 tmux 偏好 cli-anything-iterm2 pref tmux-set open_in 2 # 0native_windows 1new_window 2tabs_in_existing cli-anything-iterm2 pref tmux-set auto_hide_client true cli-anything-iterm2 pref tmux-set use_profile true cli-anything-iterm2 pref tmux-set dashboard_limit 10其中open_in的三档取值0native_windows/1new_window/2tabs_in_existing直接决定 tmux 窗口在 iTerm2 中以什么形式呈现tmux-get的 JSON 会把数值翻译成可读标签如{open_tmux_windows_in: 2, open_tmux_windows_in_label: tabs_in_existing, tmux_dashboard_limit: 10, auto_hide_tmux_client_session: true, use_tmux_profile: false}。十、tmux -CC把 tmux 窗口渲染成原生标签页技能文档将tmux组定位为完整的 tmux -CC 集成。tmux -CC 协议的特点是每一个 tmux window 渲染为一个原生 iTerm2 标签页完全可见、可读、可控制——也就是说 tmux 的会话仍由 tmux 管理适合挂在远程主机上长期存活但交互界面与自动化入口统一在 iTerm2 这侧。10.1 完整工作流来自 tmux-guide.md# 0. 关键前提先 set-context 指向目标会话再 bootstrap否则引导会超时 cli-anything-iterm2 app set-context --session-id id # 1. 引导 cli-anything-iterm2 --json tmux bootstrap # 2. 枚举 cli-anything-iterm2 --json tmux send list-sessions cli-anything-iterm2 --json tmux send list-panes -a -F #{session_name}:#{window_index}:#{pane_index} #{pane_current_command} #{pane_current_path} cli-anything-iterm2 --json tmux tabs # 把 tmux window 映射成 iTerm2 tab ID # 3. 读任意窗格 cli-anything-iterm2 --json session screen --session-id pane-session-id cli-anything-iterm2 --json session scrollback --session-id pane-session-id --tail 500 --strip # 4. 往任意窗格发命令 cli-anything-iterm2 session send git log --oneline -10 --session-id pane-session-id # 5. 布局管理 cli-anything-iterm2 tmux send new-window -n logs cli-anything-iterm2 tmux send split-window -h -t logs cli-anything-iterm2 tmux send select-layout -t logs even-horizontal cli-anything-iterm2 tmux create-window --use-as-context10.2 一个关键前提与一个关键映射引导前提在tmux bootstrap之前必须先用app set-context --session-id id把上下文指向目标会话否则 bootstrap 会超时tmux-guide.md 明确加注。pane → session ID 映射tmux pane 不会直接暴露 iTerm2 session ID需要交叉引用两张表cli-anything-iterm2 --json tmux tabs # → 每个 tmux window 对应哪个 tab_id cli-anything-iterm2 --json app status # → 每个 tab_id 下有哪些 session_id10.3 tmux 命令全集与两种 send 的本质区别来自 tmux-commands.mdcli-anything-iterm2 tmux bootstrap # 启动 tmux -CC 并等待连接 cli-anything-iterm2 tmux bootstrap --attach # 附加到已有会话 cli-anything-iterm2 tmux bootstrap --session-id id --timeout 15 cli-anything-iterm2 tmux list # 当前活跃的 tmux -CC 连接 cli-anything-iterm2 tmux tabs # 由 tmux 支撑的 iTerm2 标签页 cli-anything-iterm2 tmux create-window # 新 tmux window → iTerm2 tab cli-anything-iterm2 tmux create-window --use-as-context cli-anything-iterm2 tmux set-visible 1 off|on # 隐藏/显示某个 tmux window 的标签页 # tmux 协议命令发给 tmux server而非发给某个 pane 的 shell cli-anything-iterm2 tmux send list-sessions cli-anything-iterm2 tmux send list-windows -a cli-anything-iterm2 tmux send list-panes -a -F #{session_name}:#{window_index}:#{pane_index} #{pane_current_command} #{pane_current_path} cli-anything-iterm2 tmux send new-window -n work cli-anything-iterm2 tmux send rename-session dev cli-anything-iterm2 tmux send split-window -h cli-anything-iterm2 tmux send select-pane -t 0 cli-anything-iterm2 session run-tmux-cmd rename-window mywork技能文档特别强调了一组必须区分的概念否则极易混淆tmux send tmux协议命令发往 tmux server控制会话/窗口/布局本身session send 向某个具体 pane 的 shell发送文本。真实编排中两者往往配合使用先用tmux send建窗口、分屏、选 pane再用session send往选定的 pane 里喂 shell 命令。tmux 相关返回的 JSONjson-tmux-app.md示例// tmux list —— 每条连接都带其宿主会话 {connections: [{connection_id: userhost, owning_session_id: ..., owning_session_name: tmux}]} // tmux tabs —— window 级映射 {tmux_tabs: [{tab_id: 47, window_id: pty-..., tmux_window_id: 0, tmux_connection_id: userhost, session_count: 1}]} // tmux send —— 协议命令的标准输出 {connection_id: userhost, command: list-sessions, output: 0: 3 windows ...} // tmux bootstrap —— 含耗时便于诊断超时 {connection_id: userhost, owning_session_id: ..., command: tmux -CC, elapsed_seconds: 0.5}十一、App 级能力对话框与文件面板app组除快照与上下文管理外还覆盖 macOS 原生交互来自 app-context.md。上下文管理命令全集cli-anything-iterm2 --json app status # 盘点全部 windows/tabs/sessions cli-anything-iterm2 app current # 聚焦 → 把当前 window/tab/session 存为上下文 cli-anything-iterm2 app context # 查看已保存的上下文 cli-anything-iterm2 app set-context --session-id id cli-anything-iterm2 app clear-contextApp 级变量与 session 变量类似但作用域是全局 Appcli-anything-iterm2 app get-var hostname cli-anything-iterm2 app set-var user.myvar hello模态对话框agent 需要人工确认时的挂起点cli-anything-iterm2 app alert Title Message cli-anything-iterm2 app alert Deploy? Push? --button Yes --button No cli-anything-iterm2 app text-input Rename Enter name: --default myapp按键结果可结构化读取app alert返回{button_index: 1000, button_label: OK}自定义按钮时--button Yes --button No会得到1000Yes, 1001No。app text-input返回{cancelled: false, text: hello world}取消时为{cancelled: true, text: null}。文件面板打开/保存对话框cli-anything-iterm2 app file-panel # macOS 打开选择器 cli-anything-iterm2 app file-panel --ext py --ext txt --multi # 按扩展名过滤 多选 cli-anything-iterm2 app save-panel --filename output.txt # 保存对话框文件面板同样返回取消状态与结果{cancelled: false, files: [/Users/alex/foo.py, /Users/alex/bar.py]}/save-panel返回{cancelled: false, file: /Users/alex/output.txt}。十二、REPL 模式与错误处理约定REPL不带任何参数运行即进入交互式 REPL上下文在命令间保持技能文档 SKILL.md 的说明CLI 入口 docstring 中也有同样的声明cli-anything-iterm2适合人工调试、试错阶段使用Agent 自动化则推荐逐条--json一次性命令便于每一步校验。错误输出契约所有错误在--json下都收敛为{error: ...}结构方便机器统一处理。典型错误json-session.md 与 json-tmux-app.mdError: Cannot connect to iTerm2. Make sure iTerm2 is running... Error: Session abc123 not found. Error: No active tmux connections. Start one with: tmux bootstrap前两类分别对应后端 require_iterm2_running()/run_iterm2() 的 RuntimeError 与 WebSocket 连接失败路径第三类提示先执行tmux bootstrap建立 tmux -CC 连接。十三、技能参考文件速查与源码延伸阅读技能文档刻意把每个命令域拆成单一关注点的小文件每个约 10–30 行并强调按需只读避免一次灌入全部细节。下表即原文的参考文件导航已转换为仓库根目录起始的完整路径参考文件什么场景去读references/session-io.md发送文本、注入字节、读屏幕/回滚、取选中文本references/session-control.md分屏、激活/关闭会话、调整尺寸、改名、会话变量references/session-shell-integration.mdwait-prompt / wait-command-end / get-prompt可靠的 send→wait→read 模式references/layout-window-tab.md创建/关闭/调整窗口与标签页分屏窗格方向导航references/layout-arrangement.md保存与恢复窗口布局references/app-context.mdsnapshot定向、status、上下文管理、app 变量、模态对话框、文件面板references/profile-pref.mdProfiles 列表/详情/配色、偏好读写、tmux 偏好速记references/broadcast-menu.md跨窗格按键广播、调用菜单项references/tmux-commands.md全部 tmux CLI 命令bootstrap、send、tabs、create-window、set-visiblereferences/tmux-guide.mdtmux -CC 全流程、pane→session ID 映射references/json-session.mdsession / window / tab / screen / scrollback / inject 的--json结构references/json-tmux-app.mdtmux、app 对话框、偏好与错误的--json结构对实现原理感兴趣的读者可继续深入以下源码命令入口与状态持久化入口模块 iterm2_ctl_cli.pyoutput()的 JSON/文本双模输出、iterm2_backend.py同步桥接异步 iTerm2 API与 session_state.pyStateful 状态保存/加载各命令组实现core 目录下的 session.py、tab.py、window.py、tmux.py、broadcast.py、pref.py 等 12 个模块与命令组一一对应测试佐证tests/test_core.py、tests/test_full_e2e.py 及 tests/TEST.md 记录了核心逻辑与端到端场景的验证方式。十四、小结Agent 接管 iTerm2 的四件套把技能文档的核心脉络收拢为可直接套用的方法论即四件套定向任何时刻用cli-anything-iterm2 --json app snapshot一次拿到全部会话的 name / path / process / role / last_line判断现在跑着什么定上下文app current或set-context --session-id固定目标之后所有session命令免写--session-id可靠驱动session send触发 wait-command-endshell integration判终 --json session scrollback --tail N --strip读结果形成发→等→读闭环编排布局session split/tab/window/tmux -CC按需搭建多窗格或多标签工作区并用session set-var user.role打标签、arrangement save/restore持久化布局供下次降落时复用。这套定向—上下文—闭环执行—布局编排的范式正是 iTerm2 这类桌面终端被改造为 Agent-Native 工具后的典型用法Agent 不再需要通过截图/坐标猜测界面状态而是以结构化的 JSON 快照和可判定的 exit_status 与真实终端会话稳定协作。【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表