AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载导读本文讲解 Ekko Studio 内置于 Ekko Agent 运行时中的tmux技能位于 packages/ekko-agent/skills/tmux/SKILL.md它让 Agent 能够发现会话、捕获输出、发送按键与粘贴文本、轮询等待提示符从而操控那些已经运行在 tmux 中、或需要持久终端的交互式 CLI 程序。读完本文你将掌握 tmux 的session:window.pane寻址模型、安全的文本/按键注入方式、会话生命周期管理原则以及随技能分发的两个辅助脚本的完整参数与用法并能将这一套能力复用到自己的 Agent 技能设计中。技能定位何时该用 tmux何时不该用tmux 技能的元数据将其能力概括为Control tmux sessions and panes for interactive CLIs: discover sessions, capture output, send keys, paste text, and monitor prompts.即面向交互式 CLI的会话/窗格控制。技能正文给出了一条明确的适用分界线使用 tmux 技能处理那些已经运行在 tmux 中、或需要一个持久终端的交互式命令例如长驻的 REPL、SSH 会话、需要等待用户输入或持续输出的程序使用普通终端执行一次性命令one-shot commands。这个分界在源码层面同样成立Ekko Agent 提供了独立的terminal_exec工具见 packages/ekko-agent/src/tools/terminal.ts它通过spawn直接启动进程、等待退出并返回受限的输出预览默认超时 30 秒DEFAULT_TERMINAL_EXEC_MAX_OUTPUT_BYTES为 100 KB。terminal_exec适合“跑完拿结果”的场景而需要跨多次调用保持进程存活、与交互式程序对话时才需要 tmux 作为“持久化终端层”。前置条件与检查方式技能要求在使用前先确认 tmux 已安装且不得静默安装command -v tmux如果命令不存在应当明确告知用户必须先安装 tmux而不是自作主张去安装。这一“先检查、不越权”的原则贯穿整个技能设计tmux 会话往往承载着真实的工作状态Agent 的任何误操作都可能破坏用户正在运行的程序。基础会话、窗口、窗格与寻址模型tmux 的层级结构是会话session→ 窗口window→ 窗格pane。技能中给出的基础命令tmux ls # 列出所有会话 tmux list-windows -t shared # 列出 shared 会话中的窗口 tmux list-panes -t shared:0 # 列出 shared 会话第 0 号窗口中的窗格 tmux capture-pane -t shared:0.0 -p # 捕获窗格当前可见内容到 stdout tmux capture-pane -t shared:0.0 -p -S - # 捕获包含完整回滚缓冲scrollback的内容目标target统一使用session:window.pane形式例如shared:0.0表示shared会话的第 0 号窗口第 0 号窗格。-p让capture-pane把内容写到标准输出而不是默认的粘贴缓冲区便于 Agent 直接读取-S -表示从回滚缓冲起点开始捕获-S -即“全部历史”这是查看长输出、判断程序是否已输出关键信息的基础手段。发送输入文本与按键分离向目标窗格发送输入是操控交互式程序的核心操作。技能明确要求字面文本与 Enter 分开发送tmux send-keys -t shared:0.0 -l -- Please continue tmux send-keys -t shared:0.0 Enter-lliteral把后面的参数当作字面文本逐字键入不经过按键名解析--结束选项解析防止以-开头的文本被误认为选项Enter单独作为按键名发送触发回车。特殊按键同样使用按键名发送tmux send-keys -t shared:0.0 C-c # 发送 Ctrl-C中断当前程序 tmux send-keys -t shared:0.0 C-d # 发送 Ctrl-DEOF tmux send-keys -t shared:0.0 Escape # 发送 Esc技能同时给出了一条安全红线Use-l --for arbitrary text. Never approve a confirmation prompt until its target and consequences are understood.即任意文本一律走-l --在确认提示符confirmation prompt的目标和后果之前绝不批准。这与 Ekko Agent 的审批体系是呼应的——破坏性、提权、远程 shell、发布类命令在执行前需要运行时授权见 terminal.ts 中terminalExecDefinition的说明。会话管理创建、重命名与销毁tmux new-session -d -s worker # 后台新建名为 worker 的会话 tmux rename-session -t old new # 将 old 会话重命名为 new tmux kill-session -t worker # 销毁 worker 会话-ddetached让新会话在后台创建而不附着这对 Agent 特别重要——Agent 没有真正的终端可供附着。技能特别强调Killing a session is destructive. Do it only when the user requested that outcome or the session was created solely for the current task and is no longer needed.销毁会话是破坏性操作只有两种情况允许用户明确要求或该会话是本任务临时创建且已不再需要。这体现了“最小破坏、状态可恢复”的 Agent 操作伦理。辅助脚本发现会话与等待文本技能的Helpers一节指出skill_view会返回该技能的baseDirectory即技能目录的绝对路径基于它可以运行随技能分发的两个脚本。以下两个脚本正是仓库中 packages/ekko-agent/skills/tmux/scripts 目录下的真实文件。find-sessions.sh跨 socket 发现会话baseDirectory/scripts/find-sessions.sh它的完整用法如下脚本内置帮助文本-h可查看Usage: find-sessions.sh [-L socket-name|-S socket-path|-A] [-q pattern] Options: -L, --socket 指定 tmux socket 名称传给 tmux -L -S, --socket-path 指定 tmux socket 路径传给 tmux -S -A, --all 扫描 TMUX_SOCKET_DIR 下的所有 socket -q, --query 大小写不敏感的子串过滤会话名 -h, --help 显示帮助关键实现点find-sessions.sh默认使用 tmux 默认 socket-A会遍历${TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/tmux-sockets}目录下所有 socket 文件跳过非 socket 文件逐一列出会话-L与-S互斥-A不能与二者组合参数冲突会报错退出通过tmux list-sessions -F #{session_name}\t#{session_attached}\t#{session_created_string}输出结构化信息再格式化为- 名称 (attached/detached, started 创建时间)的可读列表-q支持按会话名做大小写不敏感子串过滤找不到服务器时输出No tmux server found on ...并返回非零退出码便于 Agent 判断该 socket 上确实没有运行中的 tmux 服务。这解决了技能正文提到的“discover sessions, including custom socket paths”需求多用户环境或 CI 中常通过-L/-S使用独立 socket 隔离会话-A则适合整体盘点。wait-for-text.sh轮询窗格直到出现指定文本baseDirectory/scripts/wait-for-text.sh -t shared:0.0 -p pattern完整参数同样可通过-h查看Usage: wait-for-text.sh -t target -p pattern [options] Options: -t, --target tmux 目标session:window.pane必填 -p, --pattern 要查找的正则表达式必填 -F, --fixed 将 pattern 视为固定字符串关闭正则 -T, --timeout 等待秒数整数默认 15 -i, --interval 轮询间隔秒数默认 0.5 -l, --lines 检查的历史行数整数默认 1000 -h, --help 显示帮助核心实现wait-for-text.sh循环中执行tmux capture-pane -p -J -t $target -S -${lines}-J保留行尾换行-S -1000表示取最近 1000 行历史含回滚缓冲对捕获文本用grep -E正则默认或grep -F-F固定字符串匹配 pattern匹配成功立即以退出码 0 结束超过-T指定的 deadline 则输出Timed out after ${timeout}s waiting for pattern: ...并把最后 N 行内容打印到 stderr 后以退出码 1 结束-T、-l均校验必须为整数-t/-p缺失时报错退出。这个脚本把“等待交互式程序输出某个提示符/关键字”这一常见 Agent 动作封装成了可复用、可超时的原语配合capture-pane -p的 stdout 输出能力Agent 可以像“读文件”一样轮询终端状态。源码视角skill_view 与 baseDirectory 从何而来skill_view是 Ekko Agent 的技能加载工具其实现位于 packages/ekko-agent/src/tools/skills.ts 的SkillViewTool输入name精确技能名与可选的filePath支持文件路径限定在references/、templates/、scripts/、assets/四个支持目录内默认读取SKILL.md返回结果中会注入baseDirectory${skill.directory}这正是技能正文所说的skill_view返回baseDirectory的实现来源返回内容还包含技能名、字符数、sha256、来源builtin/external/local、启用状态与验证状态等元数据技能正文要求“先skill_view再操作”与SkillManageTool的“同一次运行内必须先用skill_view读过目标文件才能修改”的约束currentViewedContent的 read-mark 校验互相印证。此外tmux是 Ekko Agent 的内置bundled技能仓库测试 tests/ekko-agent/builtin-skills.test.ts 会校验packages/ekko-agent/skills目录下的全部内置技能含tmux都具备合法的 frontmattermetadata.keywords为 18 个 ASCII 关键字并会在每个 Profile 的技能目录如default、work中初始化生成对应的SKILL.md。技能发现、关键字匹配与注入逻辑也集中在 skills.ts 的discoverSkills/resolveSkillRouting中技能名与 frontmatter 关键字是自动路由的唯一输入。实操示例一次完整的“持久终端交互”流程将以上能力串起来一个典型的 Agent 交互流程如下# 1. 检查 tmux 是否可用 command -v tmux # 2. 发现已有会话含自定义 socket baseDirectory/scripts/find-sessions.sh baseDirectory/scripts/find-sessions.sh -A # 3. 确认目标窗格shared 会话第 0 窗口第 0 窗格 tmux list-panes -t shared:0 tmux capture-pane -t shared:0.0 -p -S - # 4. 向交互式程序发送文本并回车 tmux send-keys -t shared:0.0 -l -- Please continue tmux send-keys -t shared:0.0 Enter # 5. 等待程序输出包含 done 的提示最多 30 秒 baseDirectory/scripts/wait-for-text.sh -t shared:0.0 -p done -T 30 # 6. 必要时发送中断键 tmux send-keys -t shared:0.0 C-c # 7. 任务结束且会话为本任务临时创建时才销毁 tmux kill-session -t worker关键特性与注意事项回滚缓冲读取capture-pane -p -S -可读取完整 scrollback是检查长输出历史的主要手段wait-for-text.sh默认检查最近 1000 行。跨 SSH 断连持久tmux 会话在 SSH 断开后依然存活这正是 Agent 通过它托管交互式长任务的核心价值——即使发起方连接中断远端程序也不会随之终止。文本注入安全任意文本必须用-l --发送避免按键名解析歧义Enter、C-c、C-d、Escape等按键单独发送。破坏性操作边界kill-session只在用户要求或会话确为本任务临时创建时才执行确认提示符未经理解不得批准。先检查后行动tmux 缺失时只提示用户安装不静默安装socket 参数冲突、目标缺失等异常均会明确报错便于 Agent 感知并纠正。通过本技能与两个辅助脚本Ekko Agent 可以在不依赖人机交互的前提下可靠地发现、读取、注入并监控 tmux 中的交互式 CLI 程序这一“技能 脚本 工具权限约束”的组合模式也为在 Ekko Studio 中编写其他面向持久化运行环境的技能提供了可参考的范本。赞分享AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载相关推荐Genkit Python Agent 会话与会话持久化Session Store实战指南Genkit Python Agent 会话与会话持久化Session Store实战指南 导读 本文围绕 Genkit PythonBetaAgentAI 技能人工智能大模型ECC dmux Workflows 实战指南基于 tmux 窗格的 AI Agent 多会话并行编排ECC dmux Workflows 实战指南基于 tmux 窗格的 AI Agent 多会话并行编排 在 ECCagent harness perform人工智能AI 技能AI 插件AI 评测Agent 评测MCP Clients开发工具在 nanobot 中用 tmux Skill 远程操控交互式终端会话管理、安全输入与多 Agent 并行编排实战在 nanobot 中用 tmux Skill 远程操控交互式终端会话管理、安全输入与多 Agent 并行编排实战 导读 本篇文章基于 nanobot 内置的人工智能AI AgentAgent 框架多智能体工具调用MCP Clients交互助手后端任务调度创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考