6.6 KiB
6.6 KiB
AI Agent Linux远程运行时
Linux SSH AI Agent 远程执行 CLI 审计日志
linux-remote-tool
CLI 名称是 lrt。
给 AI Agent 用的 Linux 远程操作运行时。
推荐结构:
- 共享运行时
- skill 编排
- 薄接入壳
支持:
- SSH 连通性检查
- 持久会话执行命令
- 上传文件
- 下载文件
- SQLite 审计日志
- CLI 查询审计日志
- Codex skill 接入
- Alma 薄插件接入
- Pi skill 接入
安装
uv sync --group dev
或:
pip install -e .[dev]
配置
先准备环境变量:
cp .env.example .env
.env 只在私钥有口令时需要:
MY_SERVER_KEY_PASS=your_key_passphrase
再准备主机配置:
cp hosts.yaml.example hosts.yaml
最小配置:
hosts:
my-server:
host: 192.168.1.100
username: root
auth:
method: key
key_path: ~/.ssh/id_ed25519
passphrase_env: MY_SERVER_KEY_PASS
session:
idle_timeout_seconds: 300
audit:
enabled: true
db_path: ./logs/audit.db
policy:
enabled: true
default_mode: blocklist
CLI
查看帮助:
uv run lrt --help
uv run lrt --h
常用命令:
uv run lrt list-hosts
uv run lrt test-connection my-server
uv run lrt run-command my-server "uname -a"
uv run lrt upload-file my-server ./a.txt /tmp/a.txt
uv run lrt download-file my-server /tmp/a.txt ./a.txt
uv run lrt audit-logs
审计日志过滤:
uv run lrt audit-logs --limit 10
uv run lrt audit-logs --host-name my-server
uv run lrt audit-logs --operation-type run_command
uv run lrt audit-logs --start-time 2026-03-03T00:00:00Z --end-time 2026-03-03T23:59:59Z
默认输出 JSON。
架构
本仓库将三层职责分离:
- 运行时:
src/linux_remote_tool/runtime_adapter.py - skill 编排:
skills/lr/SKILL.md - 平台壳:
.codex-plugin/plugin.json、.alma-plugin/manifest.json、package.json
各层职责:
- 运行时只负责工具定义和调用分发
- skill 负责单 agent / 多 agent 的调用流程、约束和汇总方式
- manifest 或 package 只负责宿主接入、发现和权限声明
不要把多 agent 编排写进平台接入壳。
Codex
Codex 侧保留一个很薄的接入壳:
.codex-plugin/plugin.jsonskills/lr/SKILL.md
另外补了一个本地桥接入口,方便 Codex 或其他宿主进程直接调用现有运行时:
uv run lrt-codex tools
uv run lrt-codex invoke list_hosts
uv run lrt-codex invoke run_command --args '{"host_name":"my-server","command":"uname -a"}'
tools 返回工具定义 JSON,invoke 返回调用结果 JSON。
Codex 侧通过接入壳暴露 skill,真正的调用流程放在 skills/lr/SKILL.md。
Pi
本仓库支持 Pi 的 skill 模式:
package.jsonskills/lr/SKILL.md
说明:
- 不做 Pi extension
- 不重复包装一层 TypeScript 工具注册
- Pi 侧直接通过 skill 调用本地
lrt-codex - 多 agent 规则统一放在 skill
- 远程执行、文件传输、审计逻辑仍只在 Python 核心里维护
如果要在 Pi 里接入本仓库,推荐用 package/skills 方式安装或加载此 skill。
多 Agent
建议规则:
- 优先复用 batch tool,不要一上来就拆多个 agent
- 确实需要拆分时,按 host 集合或任务类型切分
- 每个 agent 都走同一个
lrt-codexbridge - skill 负责约束和汇总
- 接入壳不保存多 agent 状态,不承载编排逻辑
多平台接入
共享能力位于:
src/linux_remote_tool/tools.pysrc/linux_remote_tool/session_manager.pysrc/linux_remote_tool/runtime_adapter.py
其中 src/linux_remote_tool/runtime_adapter.py 是共享运行时入口,负责:
- 返回统一工具定义
- 按工具名分发调用
各平台只做薄适配,不复制 SSH、审计、配置等业务逻辑。
Alma
Alma 相关文件:
.alma-plugin/manifest.json.alma-plugin/runtime_adapter.py
说明:
.alma-plugin/manifest.json是 Alma 接入清单.alma-plugin/runtime_adapter.py只做转发- 不在 Alma 接入壳里写多 agent 编排
Codex
Codex 相关文件:
.codex-plugin/plugin.jsonsrc/linux_remote_tool/codex_bridge.py
说明:
.codex-plugin/plugin.json是 Codex 的薄接入壳codex_bridge.py提供本地桥接命令lrt-codexlrt-codex tools输出工具定义lrt-codex invoke调用单个工具- skill 负责单 agent / 多 agent 的使用方式
Pi
Pi 相关文件:
package.jsonskills/lr/SKILL.md
说明:
package.json只暴露pi.skills- Pi 通过
skills/lr/SKILL.md使用本地桥接 - 执行时不直接重写 SSH 逻辑,统一转发到
lrt-codex - 多 agent 不单独做 extension,继续走 skill
目录约定
建议后续按此规则扩展:
- 平台专属清单放到
.<platform>-plugin/ - 平台专属薄包装放到该目录,或放到
src/linux_remote_tool/下单独命名 - 单 agent / 多 agent 流程统一收在
skills/ - Pi 这类 package 型宿主,优先放
skills/和package.json - 共享工具定义和调用逻辑继续收敛在
src/linux_remote_tool/runtime_adapter.py - 不要在不同平台重复实现同一套工具
- 不要在 manifest 里塞编排逻辑
新增平台时的步骤
如果后续还要接入其他平台,建议只做以下几步:
- 新建平台清单目录,如
.<platform>-plugin/ - 让平台入口转发到
src/linux_remote_tool/runtime_adapter.py - 如果平台需要命令行桥接,再单独加一个类似
lrt-codex的入口 - 在
skills/里写单 agent / 多 agent 的调用规则 - 对 Pi 这类 package 宿主,优先用 skill 复用现有 CLI / bridge
- 不改现有 SSH、文件传输、审计逻辑
这样改动最小,也最不容易把各平台适配搞乱。
Runtime Tools
可用工具:
list_hosts()test_connection(host_name, timeout=15)test_connection_batch(host_names, timeout=15, max_workers=5)run_command(host_name, command, timeout=60)run_command_batch(host_names, command, timeout=60, max_workers=5)upload_file(host_name, local_path, remote_path)upload_file_batch(host_names, local_path, remote_path, max_workers=5)download_file(host_name, remote_path, local_path)download_file_batch(host_names, remote_path, local_path_template, max_workers=5)
入口:
.alma-plugin/runtime_adapter.py.alma-plugin/manifest.jsonsrc/linux_remote_tool/runtime_adapter.py
规则
- 只支持密钥登录
- 主机公钥必须已在本机
known_hosts中 - 默认复用持久会话
- 空闲超时默认 300 秒
- 危险命令会被拦截
- 审计日志写入
./logs/audit.db
测试
uv run --group dev python -m pytest