JumpServer Skills
只使用正式 CLI 入口:
python3 scripts/jumpserver_api/jms_query.py ...python3 scripts/jumpserver_api/jms_diagnose.py ...python3 scripts/jumpserver_api/jms_report.py ...
这是查询与分析 skill。允许本地运行时写入 config-write --confirm 和 select-org --confirm。不执行 JumpServer 业务写操作。
Route First
按下面顺序判路由。上面的规则优先于下面的规则。
-
如果用户请求的核心对象是某一天或某一段时间内的 JumpServer 使用数据分析,优先命中 HTML 模板工作流。这包括:使用报告、日报、使用情况、使用分析、审计分析、某天发生了什么、分析
20260310、看下 / 看看3 月 10 号使用情况、帮我看 / 帮我看看某天登录/会话/命令/传输情况、想看上周谁登录最多、过一下3 月上旬哪些资产最活跃,以及类似的“时间范围内使用情况 / 概览 / 汇总 / 排行 / TOP”表达。 动作:优先使用python3 scripts/jumpserver_api/jms_report.py daily-usage ...,并由它加载 template/bastion-daily-usage-template.html 和 references/metadata/daily_usage_report_template_fields.json;先把“昨天 / 20260310 / 3月10号 / 上周 / 本月”等时间表达归一化为明确时间窗,再生成并验证完整 HTML 报告;模板细节见 references/report-template-playbook.md。 -
如果用户要配置 JumpServer、检查依赖、检查配置、检查连通性、切换组织、查看许可证、系统设置、报表、工单、存储、终端或做对象解析,先走
jms_diagnose.py。 动作:先预检,再用config-status/ping/select-org/inspect/resolve。 -
如果用户要看授权规则、ACL、RBAC、为什么某人能访问某资产、某条权限详情,走
jms_query.py。 动作:优先permission-list/permission-get/asset-perm-users;必要时先用jms_diagnose.py做访问分析。 -
如果用户要查登录、会话、终端会话、命令记录、文件传输、异常行为、高危命令、失败登录、特权账号使用审计,走
jms_query.py。 动作:优先audit-analyze --capability ...,需要明细时再用audit-list/audit-get/terminal-sessions。 -
如果用户要查资产、节点、平台、账号、账号模板、用户、用户组、组织、标签、网域等对象,走
jms_query.py。 动作:只做object-list/object-get;名称不唯一时先解析,不要猜。 -
如果用户要做治理巡检、聚合分析、账号治理、资产治理、访问分析、系统巡检或 capability 型统计,走
jms_diagnose.py inspect --capability ...。 动作:优先 capability,不手工拼多条零散查询。
普通路由细节、更多命中说法和反例见 references/routing-playbook.md。
Template Overrides
按下面顺序处理模板例外。上面的规则优先于下面的规则。
- 如果用户明确说“不要生成报告,直接分析”“先简单说下”“只给我结论”“不用模板”,才允许跳过模板,直接给简短分析。
- 除上述明确例外外,只要是某一天或某一段时间的 JumpServer 使用情况 / 使用分析 / 审计分析,或者表达为某时间段的登录 / 会话 / 命令 / 传输情况、排行、TOP、谁最多,就必须先走模板工作流。
- “分析”不等于自由文本优先。带时间范围的使用分析、情况概览或排行类问题,默认先产出完整 HTML 报告;摘要只能作为补充,不能替代报告。
Organization Priority
按下面顺序处理组织。上面的规则优先于下面的规则。
- 用户显式给组织:按用户指定组织执行。
- 报告或使用分析模板请求且用户未指定组织,或明确指定“所有组织”“全局组织”:默认执行
python3 scripts/jumpserver_api/jms_diagnose.py select-org --org-id 00000000-0000-0000-0000-000000000000 --confirm。 - 全局组织
00000000-0000-0000-0000-000000000000的可访问性不只看候选组织列表;允许通过显式select-org/ 直连探测确认。 - 如果全局组织
00000000-0000-0000-0000-000000000000的直连探测或显式选择验证失败:直接阻塞并返回candidate_orgs;不要回退到{0002}/{0002,0004}自动规则。 - 非报告类请求且未指定组织:沿用保留组织逻辑。只有可访问组织集合恰好是
{0002}或{0002,0004}时,才自动写入0002。 - 当前
JMS_ORG_ID已不可访问:先重新select-org,不要继续业务命令。 - 查询类请求在未确定组织且存在多个可访问组织时:先返回
candidate_orgs并要求用户选择查询组织。 - 查询类请求在当前组织已生效且仍有其他可切换组织时:继续返回
switchable_orgs,提示用户还可以切换到哪些组织查询。
Standard Flow
收到请求先做:
自动检查依赖 -> config-status --json -> 必要时 config-write --confirm -> ping -> 按路由和组织优先级选择正式入口
执行规则:
- 配置或环境不确定时,先执行
python3 scripts/jumpserver_api/jms_diagnose.py config-status --json。 complete=false时,先补齐配置,再继续。- 名称不唯一、平台不明确、对象跨组织时,先解析或阻塞,不要猜。
- 审计类问题没有
date_from/date_to时,默认最近 7 天;想查更大范围时优先要求明确时间窗。 - 模板化使用报告/使用分析请求必须先走
python3 scripts/jumpserver_api/jms_report.py daily-usage ...;它会负责时间归一化、组织处理、字段元数据取数、模板填充和生成后自检。普通查询优先只选 1 个正式入口。
Guardrails
- 不生成临时 SDK Python 脚本或 HTTP 脚本。
- 不猜对象 ID、平台 ID、组织、鉴权信息或筛选条件。
- 不创建、更新、删除、解锁对象,也不追加或移除权限关系。
- 权限问题只做读取和解释,不做权限写入。
- 模板化报告请求必须优先使用
python3 scripts/jumpserver_api/jms_report.py daily-usage ...;不要现场写临时拼装逻辑。若正式入口缺失,应先补齐正式入口,再使用它。 - 模板化报告请求只使用字段元数据里声明的来源,不用 Markdown 模板替代 HTML 模板。
- 模板化报告请求中的命令审计字段,未显式给
command_storage_id时默认汇总全部可访问 command storage;普通命令审计查询仍沿用默认 storage / 单个 storage / 多 storage 阻塞逻辑。
Respond With
成功时至少回显:
- 已走预检
- 选中的正式入口或模板路径
effective_orgswitchable_orgs(当当前组织已生效且仍有其他可切换组织时)- 执行命令摘要
- 普通查询:结果摘要
- 模板报告:完整 HTML 报告,且已经通过生成后自检
模板报告成功时还至少回显:
- 正式入口:
python3 scripts/jumpserver_api/jms_report.py daily-usage ... - 报告文件路径
- 模板路径:
template/bastion-daily-usage-template.html - 字段元数据路径:
references/metadata/daily_usage_report_template_fields.json queried_command_storage_idsqueried_command_storage_countreport_datedate_fromdate_tovalidation_summary- 可附加简短摘要,但不得仅返回摘要替代报告
阻塞时至少回显:
- 已走预检
effective_org- 阻塞原因
candidate_orgs或candidate_objects- 下一步安全动作