catalog/repos/adfoke--alma-linux-remote-plugin.md

291 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 接入
## 安装
```bash
uv sync --group dev
```
或:
```bash
pip install -e .[dev]
```
## 配置
先准备环境变量:
```bash
cp .env.example .env
```
`.env` 只在私钥有口令时需要:
```env
MY_SERVER_KEY_PASS=your_key_passphrase
```
再准备主机配置:
```bash
cp hosts.yaml.example hosts.yaml
```
最小配置:
```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
查看帮助:
```bash
uv run lrt --help
uv run lrt --h
```
常用命令:
```bash
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
```
审计日志过滤:
```bash
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.json`
- `skills/lr/SKILL.md`
另外补了一个本地桥接入口,方便 Codex 或其他宿主进程直接调用现有运行时:
```bash
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.json`
- `skills/lr/SKILL.md`
说明:
- 不做 Pi extension
- 不重复包装一层 TypeScript 工具注册
- Pi 侧直接通过 skill 调用本地 `lrt-codex`
- 多 agent 规则统一放在 skill
- 远程执行、文件传输、审计逻辑仍只在 Python 核心里维护
如果要在 Pi 里接入本仓库,推荐用 package/skills 方式安装或加载此 skill。
## 多 Agent
建议规则:
- 优先复用 batch tool不要一上来就拆多个 agent
- 确实需要拆分时,按 host 集合或任务类型切分
- 每个 agent 都走同一个 `lrt-codex` bridge
- skill 负责约束和汇总
- 接入壳不保存多 agent 状态,不承载编排逻辑
## 多平台接入
共享能力位于:
- `src/linux_remote_tool/tools.py`
- `src/linux_remote_tool/session_manager.py`
- `src/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.json`
- `src/linux_remote_tool/codex_bridge.py`
说明:
- `.codex-plugin/plugin.json` 是 Codex 的薄接入壳
- `codex_bridge.py` 提供本地桥接命令 `lrt-codex`
- `lrt-codex tools` 输出工具定义
- `lrt-codex invoke` 调用单个工具
- skill 负责单 agent / 多 agent 的使用方式
### Pi
Pi 相关文件:
- `package.json`
- `skills/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 里塞编排逻辑
### 新增平台时的步骤
如果后续还要接入其他平台,建议只做以下几步:
1. 新建平台清单目录,如 `.<platform>-plugin/`
2. 让平台入口转发到 `src/linux_remote_tool/runtime_adapter.py`
3. 如果平台需要命令行桥接,再单独加一个类似 `lrt-codex` 的入口
4.`skills/` 里写单 agent / 多 agent 的调用规则
5. 对 Pi 这类 package 宿主,优先用 skill 复用现有 CLI / bridge
6. 不改现有 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.json`
- `src/linux_remote_tool/runtime_adapter.py`
## 规则
- 只支持密钥登录
- 主机公钥必须已在本机 `known_hosts`
- 默认复用持久会话
- 空闲超时默认 300 秒
- 危险命令会被拦截
- 审计日志写入 `./logs/audit.db`
## 测试
```bash
uv run --group dev python -m pytest
```