CLI for the Inspire training platform: notebook lifecycle, distributed/HPC job submission, SSH tunneling, image and resource ops
Project description
让 AI Agent 直接在本地 CLI 里完成启智平台的全部操作。
Notebook · Job · HPC · Serving · Model · Resources — 一条命令皆能。
为什么要有这个 Skill?
启智平台的 Web UI qz.sii.edu.cn 是你日常实验链路里最慢的那一环——每次申请资源、新建 notebook、开 SSH、同步代码都要反复点点点。
InspireSkill 把这些步骤交给你的 AI Agent。 当 Claude Code / Codex / Gemini CLI / OpenClaw / OpenCode 识别到这个 skill,它会:
- 直接调用
inspire命令查实时资源、开 notebook、提 HPC 任务、拉日志 - 提供可选的 Clash Verge
7897分流模板,让公网与启智内网共存一个本地端口,取代多人共用断连的 aTrust;CLI 本身不绑定 7897,任何能同时覆盖公网与*.sii.edu.cn的代理方案都行 - 把 Web UI 上所有操作都变成可复现、可串联、可自动化的命令链
- 从 SKILL.md 读到完整的调度约束、资源申请原则、排障 checklist,不需要你在对话里反复解释平台语义
目标是让你的 Claude Code / Codex / Gemini CLI / OpenClaw / OpenCode 成为推进科研项目的唯一入口,不用再在浏览器里手动点。
为什么比 InspireCode / 在实例里装 Agent 更好?
启智官方的 InspireCode 是把 OpenCode 直接部署到某个 Inspire 实例里——要用就得打开 qz.sii.edu.cn、进那个实例、在它的 Web 终端里跟 OpenCode 对话。凡是"把 Agent 装在服务器上"的方案都是这个路数。InspireSkill 走相反路径:Agent 留在你本机,Inspire 降格为被调用的工具。
| 维度 | InspireCode(Agent 装在 Inspire 实例里) | InspireSkill(Agent 装在本机) |
|---|---|---|
| Agent 生命周期 | 绑死在某一个 notebook 实例;实例回收 / 崩溃,对话与状态一起没 | 跑在本机 harness 里,与任何一个 Inspire 实例解耦 |
| 调度范围 | 只能操作它所在那一个实例的文件系统与运行时 | 一个 Agent 横跨多 workspace / notebook / HPC job / image,全平台统一编排 |
| 入口 | 必须打开 qz.sii.edu.cn 的 Web 终端 |
你本来就在用的 Claude Code / Codex / Gemini CLI / OpenClaw / OpenCode |
| harness / 模型选择 | 锁定 OpenCode + 它支持的模型 | 任选本机已装的 5 家 harness,模型随 harness |
| 上下文来源 | 只有实例里能看到的东西;你本地代码仓库不在场 | 本机完整 repo + git 状态 + 编辑器 + 其他 MCP 工具(Figma / Preview / Playwright …)一起可用 |
| 计算占用 | Agent 进程吃 Inspire 实例的 CPU / RAM 配额;API key 必须放在实例里 | Agent 进程跑本机;Inspire 实例的 CPU / RAM 全给训练 / HPC;API key 只留本地 |
| 连接依赖 | Web UI 断 = Agent 断;aTrust 掉线对话就停 | inspire CLI 直打平台 API;Agent 推理甚至可以完全离 SII 内网 |
| 自动化 / 可复现 | 对话历史锁在浏览器 session 里 | 命令流可保存 / 回放;inspire --json ... 被其他脚本直接消费 |
一句话:InspireCode 把你搬进 Inspire,InspireSkill 把 Inspire 变成 Agent 的一把工具。
为什么比社区里其它启智 CLI 更值得用?
启智社区还有两条独立维护的 CLI:EmbodiedForge/Inspire-cli 和 tianyilt/qzcli_tool。差异主要在底层覆盖广度——能不能在离线训练空间零配置 SSH、能不能拿到事件 / 生命周期 / GPU 利用率这些 OpenAPI 不暴露的观测信号、能不能端到端编排 notebook + HPC + Ray + serving。
| 维度 | Inspire-cli | qzcli_tool | InspireSkill |
|---|---|---|---|
| License / 分发 | Proprietary, members-only · git+uv only | 无 LICENSE · git clone only | MIT · PyPI + curl | install.sh |
| 不联网 SSH bootstrap | 五路 fallback,需要用户预配 [ssh].rtunnel_bin / sshd_deb_dir 或容器有公网 |
无 SSH/tunnel 抽象 | 零配置,kit 在 /inspire/hdd/global_public/ 上,所有用户共享 |
| 平台 API 覆盖 | 10 个 endpoint | 13 个 endpoint | 31 个 endpoint |
| 事件 / 生命周期 / GPU 利用率查询 | 无 | 无 | 5 类 events + 4 类资源 metrics + run_index 生命周期 |
| HPC / Ray / Serving / Model | 仅有部分 job + notebook | 仅 HPC(单层)+ job | HPC 两层模型 + Ray 弹性 + Serving + Model 全覆盖 |
| 多账号 | [accounts."<user>"] 合并层 |
单账号 | 一账号一独立目录,~/.inspire/current 切换 |
| Agent 接入 | 无 | qzcli-mcp(1 家 harness) |
Skill 格式覆盖 5 家 harness |
| 测试 | 53 文件 | 3 文件 | 767 单元测试 |
一句话:这两条 CLI 各做了一段路;InspireSkill 把整个平台的操作面和观测面端到端铺平了,并且在离线场景下零配置可用。
快速上手
平台支持:macOS + Linux 一等公民。Windows 用户请用 WSL2——CLI 依赖 SSH / rsync / GPFS 目录约定 / POSIX 文件权限,Windows 原生不在 roadmap。
Requirements:bash · curl · tar · Python 3.10+ · uv 或 pipx
curl -fsSL https://raw.githubusercontent.com/realZillionX/InspireSkill/main/scripts/install.sh | bash
不需要把仓库克隆到本地。 脚本会:
- 用
uv tool install或pipx install从git+https://github.com/realZillionX/InspireSkill.git#subdirectory=cli直接拉包装进隔离 venv,inspire自动挂到~/.local/bin/。 - 自动探测本机 harness(Claude Code / Codex / Gemini CLI / OpenClaw / OpenCode),把
SKILL.md与references/拷贝到对应 skills 目录。 - 为 Codex 额外生成
agents/openai.yaml。 - 挂一个每日静默检查上游新版本的后台任务(可用
--no-schedule关)。
想指定范围:
curl -fsSL .../install.sh | bash -s -- --harness claude # 单个
curl -fsSL .../install.sh | bash -s -- --harness claude,codex # 多个
curl -fsSL .../install.sh | bash -s -- --no-cli # 仅刷 SKILL / references
curl -fsSL .../install.sh | bash -s -- --no-schedule # 不装后台检查任务
curl -fsSL .../install.sh | bash -s -- --ref v1.0.0 # 钉住某个 tag / branch / SHA
安装后分两段一步一步来——先配账号(一次),再进每个仓库配项目(每个仓库一次):
① 账号级(和仓库无关,任意目录跑;完成后该账号可用于所有仓库)
# 建账号目录。沿途问:平台 username(默认=<name>)/ password(二次确认)/
# base URL(默认 https://qz.sii.edu.cn)/ 代理(有提示典型值)/ 是否设为活动账号。
# 想跳过交互:加 --non-interactive 并把所有字段都用 flag 给齐。
inspire account add <name>
# 核对账号配置生效
inspire config show --compact
结果写入 ~/.inspire/accounts/<name>/config.toml,包含身份(username / password)、base_url、代理等。不包含 target_dir——那是项目级的,下一步解决。
② 项目级(每个本地仓库各做一次)
cd /path/to/your-repo
# 登录平台、发现可用项目 + workspace + compute group,选当前仓库的:
# - 绑定的 Inspire 项目
# - 远端存储池(hdd / ssd / qb-ilm / qb-ilm2)→ 写入 target_dir
# 结果分两处:
# - 账号级发现结果(workspace alias 表、compute groups)→ ~/.inspire/accounts/<name>/config.toml
# - 本仓库的 [context] + [paths].target_dir → ./.inspire/config.toml
inspire init --discover
# 看实时空余(GPU / CPU),确认平台能连通
inspire resources list --all --include-cpu
为什么分两段:target_dir 是"远端工作目录",每个仓库都不同,必须在仓库里跑 init --discover 才能把它落到该仓库的 .inspire/config.toml。CLI 会直接拒绝账号 config.toml 里出现 [paths]——避免把项目级状态错放到账号层(不同仓库默默相互污染)。
多账号:inspire account add <name2> 再加一个,inspire account use <name> 切换。
之后把控制权交给 Agent,它会从 SKILL.md 读到所有 workflow 规则并自动执行。
能力一览
📝 Notebook 统一入口全链路命令化:create / list / status / start · stop / ssh / exec / shell / scp / refresh / forget / test / connections / install-deps / top / metrics / events / lifecycle。一次 notebook ssh <name> 就把 SSH 通路在本地缓存好,后续 exec / shell / scp / ... 都直接用 notebook name。任何镜像、任何计算组、有无公网都能直接 ssh —— rtunnel 从平台预置的 global_public 离线 kit 直接 exec(GPFS zero-copy),sshd 缺失时从 kit 的 .deb 自动 dpkg 装上,镜像里不需要预装。
|
🚀 HPC 任务分派inspire hpc create -c <slurm-body> 只写 Slurm 正文 + 显式 srun,平台自动补 #SBATCH 头。两层独立:节点规格用 --quota gpu,cpu,mem(CLI 自动解析到平台 spec),slurm 调度用 --number-of-tasks / --cpus-per-task / --memory-per-cpu。
|
🏃 GPU 多节点任务(不止训练)inspire job 覆盖所有 GPU 多节点场景 —— 分布式训练 / 批量推理 / 并发 worker pool 全走这里(`hpc` 对应 CPU Slurm)。inspire run "<cmd>" --watch 自动选资源组 + 跟 job logs --follow;精细控制优先级 / 节点数用 job create。
|
📊 资源情报resources list --all --include-cpu / resources nodes --all / resources specs — 三板斧定位哪个集群有空,支持透支式申请。
|
🗂 镜像管理image save / register / list / set-default,默认镜像自动写回项目 .inspire/config.toml;hpc create --image-type 明确可见性。
|
🛰 模型部署 (Serving)inspire serving list / status / stop / configs —— 观测 + 止损分层:list / configs 走 Browser API,status / stop 走 OpenAPI,和 job / hpc 同构。
|
📦 模型注册表 (Model)inspire model list / status / versions —— 浏览 workspace 下所有模型 + 每个模型的历史版本,带 vLLM 兼容标记 / 创建时间;之前只能在 Web UI 翻。
|
👤 身份 / 配额 / 权限inspire user whoami / permissions / api-keys —— 一眼看清当前账号、在某 workspace 下实际授予的权限码(job.trainingJob.create 等),以及已申请的 API Key 元数据。
|
📅 事件 & 生命周期inspire job events / hpc events / notebook events / ray events 拉平台事件流;notebook lifecycle <name> 看一个实例的多次启停记录 —— 原本要翻 Web UI "详情 → 事件/生命周期"两个 tab 才看得全。
|
🗝 多账号(一账号一目录)inspire account add / list / use / current / remove / migrate —— 每个账号的 config.toml、SSH tunnel bridges、SSO session cache 都在独立目录 ~/.inspire/accounts/<name>/,活动账号由 ~/.inspire/current 一行决定。不再有 [accounts."<user>"] 合并层、不再有多个环境变量的优先级链;切账号 = 改一个文件。
|
支持的 Agent Harness
| Harness | 安装后位置 | 备注 |
|---|---|---|
| Claude Code | ~/.claude/skills/inspire/ |
默认推荐 —— Agent 可被后台命令完成事件自动唤醒 |
| Codex CLI | ~/.codex/skills/inspire/ |
额外生成 agents/openai.yaml |
| Gemini CLI | ~/.gemini/skills/inspire/ |
|
| OpenClaw | ~/.openclaw/skills/inspire/ |
全局 "managed skills" 层;workspace 层 (~/.openclaw/workspace/skills/) 可覆盖 |
| OpenCode | ~/.config/opencode/skills/inspire/ |
遵循 XDG;$OPENCODE_CONFIG_DIR 可改根 |
为什么默认推 Claude Code:它的 scheduler 支持在后台 Bash 命令结束时自动唤醒 Agent。把 inspire job logs --follow <name> / 长轮询 checkpoint / inspire hpc status <name> 监视之类长 watch 挂到后台,训练或 HPC 任务跑完 Agent 自己醒过来接下一步 —— 不用你守在终端。Codex / Gemini CLI / OpenClaw / OpenCode 目前没有这个能力,做长流水的自动化会弱一档。
自定义 SKILL.md / INSPIRE.md
SKILL.md 装完是一份通用默认 playbook,默认口径是主力跑 分布式训练空间 下的 H100 / H200。如果你的主战场不在这儿(比如启智的国产卡 workspace CI-情境智能-国产卡 / CI-情境智能-国产卡-ssd3,或小组自己划走的专属资源开发空间),两条口子做定制:
- 项目级(推荐):改仓库根的
INSPIRE.md——Path Conventions换 remote workspace 路径,Existing Notebooks/Ongoing Jobs里显式写国产卡机型和任务。INSPIRE.md属于你的 repo,不会被inspire update覆写,也方便跟组内协作。SKILL.md §1 "项目叙述上下文" 一行详述约定。 - Harness 级:直接编辑
~/.claude/skills/inspire/SKILL.md(Codex / Gemini / OpenClaw / OpenCode 同理),改资源申请段落、默认镜像、常用 workspace 名。注意:inspire update默认会覆盖 SKILL.md;维护了本地改动后用inspire update --cli-only只升级 CLI 不动 skill 文件,想合并上游变更时再手动 diff。
🔧 维护承诺与自动更新
启智平台的调度语义、资源组划分、镜像可用性会频繁变化。 一旦平台侧改了而 Skill / CLI 没跟进,Agent 就会按失效的路径执行,产生错误结果。
维护者 @realZillionX 会高频率、持续跟进上游变更。你只要:
inspire update # 拉新版 CLI + 刷 SKILL.md / references
inspire update --check # 只检查不升级
inspire update --cli-only # 仅升级 Python 包
inspire update --skill-only # 仅刷 SKILL / references
有新版本时 CLI 会在任意 inspire <subcommand> 的 stderr 提醒一行。直接跑 inspire update 就行。
平台侧行为突变又未及时 patch 时,在 issue tracker 开一条,附 inspire --debug <cmd> 的 trace(CLI 会自动脱敏 token / cookie / proxy secrets)。反馈流程的更多细节见下方"开发与贡献"一节。
代理配置
不常驻 SII 的科研人员通常需要让本机代理同时转发公网和 *.sii.edu.cn 流量。仓库提供一份可选的 Clash Verge 7897 mixed-port 分流模板,见 references/proxy-setup.md;但 CLI 本身不绑定 7897,你也可以换成任意代理方案,只要 config.toml / 环境变量里的 proxy 字段指向一个能同时访问公网与 *.sii.edu.cn 的本地端口。
凭据(host / user / password)从实验室或组织管理员获取,不要提交到任何公开仓库或聊天记录。
开发与贡献
项目由 @realZillionX 维护,节奏与启智平台的接口 / 调度语义紧密绑定。为了让上游变更能被最快、最一致地消化进 CLI + SKILL.md + references/,合作方式有意简化:
- 不建议提 PR。 平台语义变化快(端点下线 / body schema 改名 / 权限矩阵重排),外部 PR 从提交到 review 完成的窗口里,仓库这边的 CLI / SKILL.md 往往已经跟着上游动了——合并时容易语义错位。维护者更倾向于亲自 implement 并控制上游同步节奏。
- 请提 Issue。 Bug / 端点失效 / SKILL.md 里某条规则不再适用 / CLI UX 想改进 / 新观察到的 Browser API 端点——任何想反馈的都用 Issue 描述问题场景,附上
inspire --debug <cmd>的日志最好(CLI 自动脱敏 token / cookie)。维护者会评估后纳入后续版本,通常几天内发新版。 - 反向抓包的新发现(某端点 404 了、某字段改名了、冒出一个前端在打但 CLI 没封装的路径)同样走 Issue;不用自己附 Playwright
storage_state/ JSONL,维护者会用cli/scripts/reverse_capture/自己复现。
这么安排的底层权衡:这个 skill 的价值在于与上游保持零漂移的同步,比起零散 PR 稳步合入,维护者按批次自己写更容易做到这点。你提的 Issue 是最高效的信号。
文档索引
- SKILL.md — Agent 看的主规约:认证链路、命令速查、HPC Slurm 语义、开发主流程三阶段。
- references/openapi.md —
/openapi/v1公开合约(10 条端点:train_job / hpc_jobs / inference_servings 的create/detail/stop+cluster_nodes/list;CLI 都已封装,inference_servings由inspire serving暴露)。 - references/browser-api.md —
/api/v1前端 SSO API(列表 / 事件 / 模型注册表 / 部署管理 / 用户权限 / 配额 …… 观测性几乎全在这里,OpenAPI 上没有)。 - references/proxy-setup.md — Clash Verge 7897 分流配置。
- references/troubleshooting.md — SSH bootstrap / rtunnel / HPC 异常状态对照 / 镜像保存等排障 checklist。
- references/less-used-commands.md — 不在主速查表里但 CLI 已封装的命令:
serving/model/project detail|owners/user quota|api-keys。 cli/— CLI 源码;入口cli/inspire/cli/main.py。scripts/install.sh— 面向用户的 curl-pipe-bash 安装器。
License
Acknowledgements
- 启智平台团队提供的 OpenAPI / Web 接口。
- EmbodiedForge/Inspire-cli 提供了 CLI 的初步框架。
Made for researchers who'd rather think than click.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file inspire_skill-3.0.2.tar.gz.
File metadata
- Download URL: inspire_skill-3.0.2.tar.gz
- Upload date:
- Size: 417.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8391ca5105d90279b128a580989ea080a2cf8747a703be5b8914b60da49efd67
|
|
| MD5 |
f87be7aaadf1993b19942e92e26c489a
|
|
| BLAKE2b-256 |
8697bc71365e9becc8202aeb9a2423b3b1b2f055a724a9658b8932966ec5f308
|
Provenance
The following attestation bundles were made for inspire_skill-3.0.2.tar.gz:
Publisher:
publish.yml on realZillionX/InspireSkill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
inspire_skill-3.0.2.tar.gz -
Subject digest:
8391ca5105d90279b128a580989ea080a2cf8747a703be5b8914b60da49efd67 - Sigstore transparency entry: 1393377322
- Sigstore integration time:
-
Permalink:
realZillionX/InspireSkill@b808bd0c33643bcc3f86052b802a6cb26a882940 -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/realZillionX
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b808bd0c33643bcc3f86052b802a6cb26a882940 -
Trigger Event:
push
-
Statement type:
File details
Details for the file inspire_skill-3.0.2-py3-none-any.whl.
File metadata
- Download URL: inspire_skill-3.0.2-py3-none-any.whl
- Upload date:
- Size: 384.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f53e2c3923c8c738a9f27c3b38808c0b71016e722d1daea356459cc618c66d2a
|
|
| MD5 |
4360526a689dc5c19956ae361cf2adfd
|
|
| BLAKE2b-256 |
2f4f457117059a75c89cd832fa883f610b0cafeafd3bc000909a754a10d9ed67
|
Provenance
The following attestation bundles were made for inspire_skill-3.0.2-py3-none-any.whl:
Publisher:
publish.yml on realZillionX/InspireSkill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
inspire_skill-3.0.2-py3-none-any.whl -
Subject digest:
f53e2c3923c8c738a9f27c3b38808c0b71016e722d1daea356459cc618c66d2a - Sigstore transparency entry: 1393377347
- Sigstore integration time:
-
Permalink:
realZillionX/InspireSkill@b808bd0c33643bcc3f86052b802a6cb26a882940 -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/realZillionX
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b808bd0c33643bcc3f86052b802a6cb26a882940 -
Trigger Event:
push
-
Statement type: