安全扫描
OpenClaw
可疑
medium confidence技能代码基本符合其声称的 LLM生成 + Python验证 + 图片渲染 目的,但存在一些可能导致意外行为的细节问题(额外的隐藏验证规则和会读取文件系统路径的验证器),建议使用前审查。
评估建议
该技能实现了其宣称的功能,但在安装或运行前需要审查两个问题:1) 验证器文件路径处理:validate_layout.py 接受 JSON 字符串或文件路径,如果提供路径则会读取文件。确保代理从不向验证器转发不受信任或模型提供的文件路径(要求模型输出 JSON 文本并清理输入),否则攻击者或混乱的模型可能导致验证器读取任意本地文件。2) 额外验证规则:验证器强制执行未在 SKILL.md 中记录的额外'HQ 棋子'限制(仅允许 军旗 或 排长/连长 进入 HQ),这可能导致合法模型输出意外失败验证。更新 SKILL.md 记录此规则或调整验证器以匹配记录的规则。其他建议:删除或明确标记旧版 generate_layout.py 以避免混淆,考虑限制验证器仅解析 JSON(避免路径模式)或添加任何路径输入的显式验证。在沙盒中测试完整工作流以确认 LLM<->验证器重试循环按预期运行。如需更高保证,请提供运行时详情(代理如何将模型输出传递到脚本)以便重新评估和提高置信度。...详细分析 ▾
ℹ 用途与能力
技能名称/描述与包含的脚本相匹配:validate_layout.py 和 render_layout.py 实现了承诺的硬规则检查和图片渲染。存在一个生成器脚本,但被记录为旧版备选方案;其存在不一定有害,但与 SKILL.md 声称模型(而非 Python)应创建布局的说法存在轻微不匹配。
⚠ 指令范围
SKILL.md 指示 LLM 输出 JSON,并说明 Python 仅用于验证和渲染。然而,validate_layout.py 接受 JSON 字符串或文件系统路径,如果提供路径则会读取本地文件——这扩展了范围并可能被滥用于读取文件。此外,validate_layout.py 强制执行额外的 'HQ 棋子' 限制(仅允许 军旗 或低价值棋子进入 HQ),这未在 SKILL.md 硬规则中列出,可能导致意外的验证失败和重试。
✓ 安装机制
无安装规范和外部下载;所有内容都包含在捆绑包中。从安装/执行分发的角度来看,这风险较低。
✓ 凭证需求
未请求环境变量、凭证或配置路径。该技能不询问无关的密钥或云凭证。
✓ 持久化与权限
always 为 false,该技能不请求提升或持久平台权限。其文件 I/O 限于读取布局输入和写入图片输出,符合预期。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.02026/4/16
junqi-dark-layout v1.0.0 - 首次发布,全面支持双人 25 子中国军棋暗棋布局生成。使用大模型生成具有可定制风格和焦点的策略阵型。Python 脚本在用户输出前严格验证所有布局的合法性,包括特殊位置(禁摆位、地雷和军旗)。通过验证的布局可使用 Python 渲染为图片。包含完整文档化的工作流、推荐输出格式和错误处理流程。
● 无害
安装命令
点击复制官方npx clawhub@latest install junqi-dark-layout
镜像加速npx clawhub@latest install junqi-dark-layout --registry https://cn.longxiaskill.com镜像同步中
技能文档
本技能采用 大模型生成阵型 + Python 严格校验 + Python 渲染图片 的流程。
目标不是让 Python 负责"想阵",而是:
- 让大模型负责策略感、迷惑性、风格差异和具体摆阵
- 让 Python 负责硬规则裁判和图片输出
核心原则
- 阵型优先由大模型生成,不由 Python 随机生成器主导。
- Python 只负责两件事:校验合法性、渲染图片。
- 任何未通过 Python 校验的阵型,一律禁止返回给用户。
- 如果第一次生成不合法,应根据校验错误让大模型重试,而不是硬着头皮输出。
工作流
第一步:大模型生成阵型
根据用户要求的风格(如稳健、激进、阴阵、均衡)直接生成一个完整 30 格布局数组。
要求:
- 使用 30 个位置表示棋盘
- 其中 5 个固定禁摆位必须写成
禁 - 其余 25 个位置填入实际棋子名称
- 输出应尽量为 JSON,不要输出松散自然语言
第二步:Python 校验
用 scripts/validate_layout.py 校验大模型输出的阵型。
如果校验失败:
- 不要返回给用户
- 把错误点反馈给大模型
- 让大模型在保持原风格目标的前提下修正后重试
第三步:Python 渲染图片
校验通过后,再用 scripts/render_layout.py 生成最终图片卡片。
推荐输出格式
优先让大模型按下面结构输出,且除了 JSON 之外不要附加解释性文本:
{
"style": "阴阵",
"focus": "迷惑",
"layout": ["连长", "师长", "排长", "团长", "司令", "炸弹", "禁", "工兵", "禁", "旅长", "连长", "工兵", "禁", "军长", "营长", "师长", "禁", "炸弹", "禁", "旅长", "地雷", "地雷", "团长", "营长", "排长", "工兵", "军旗", "连长", "排长", "地雷"],
"notes": ["左侧示弱", "中后场藏核心大子", "保留一个较活工兵"]
}
如果无法输出完整对象,至少要输出 layout 数组。
推荐字段约束:
style:字符串,可选,例如稳健/激进/阴阵/均衡focus:字符串,可选,例如均衡/保旗/中攻/侧攻/迷惑layout:长度必须为 30 的字符串数组notes:可选,0 到 3 条简短说明
标准 25 格棋盘模型
己方区域按 6 行 × 5 列表示,共 30 个位置,其中 25 个可摆棋,5 个固定禁摆位。
可摆位置:
- 第 1 排:第 1、2、3、4、5 列
- 第 2 排:第 1、3、5 列
- 第 3 排:第 1、2、4、5 列
- 第 4 排:第 1、3、5 列
- 第 5 排:第 1、2、3、4、5 列
- 第 6 排:第 1、2、3、4、5 列
固定禁摆位:
- 第 2 排第 2 列
- 第 2 排第 4 列
- 第 3 排第 3 列
- 第 4 排第 2 列
- 第 4 排第 4 列
大本营位置:
- 第 6 排第 2 列
- 第 6 排第 4 列
地雷合法位置:
- 第 5 排第 1、2、3、4、5 列
- 第 6 排第 1、3、5 列
棋子集合
除非用户明确要求其他变体,否则使用以下标准 25 子:
- 司令 ×1
- 军长 ×1
- 师长 ×2
- 旅长 ×2
- 团长 ×2
- 营长 ×2
- 连长 ×3
- 排长 ×3
- 工兵 ×3
- 炸弹 ×2
- 地雷 ×3
- 军旗 ×1
硬规则(必须由 Python 校验)
违反任意一条即为非法阵型:
- 布局长度必须为 30。
- 5 个固定禁摆位必须为
禁。 - 25 个合法格必须全部填满,不得留空。
- 军旗必须且只能放在大本营(第 6 排第 2 列或第 4 列)。
- 地雷只能放在后两排合法雷区。
- 地雷不得进入大本营。
- 炸弹不得出现在第一排。
- 每种棋子的数量必须完全正确。
给大模型的生成要求
在生成阵型时,优先追求这些目标:
- 阵型风格明显,不要四种风格长得都差不多
- 阴阵要有一定迷惑感
- 激进要有更强前压感
- 稳健要更注重平衡与护旗
- 均衡要避免明显偏科
- 允许有创意,但不要违反硬规则
失败处理
如果 validate_layout.py 返回不合法:
- 不要把非法阵型返回给用户
- 不要嘴上说"已修正"却不重新校验
- 应把错误信息喂回模型,要求重生成
推荐重试规则:
- 第一次生成后立即校验。
- 如果失败,把
errors原样反馈给大模型。 - 要求大模型保留原风格目标,只修正违规点和必要位置。
- 最多重试 2 到 3 次。
- 如果仍不合法,明确告诉用户本次生成失败,不要输出非法阵型。
例如校验结果可能是:
{
"valid": false,
"errors": [
"炸弹不能放在第一排",
"军旗必须且只能位于大本营(第6排第2列或第4列)"
]
}
输出要求
- 校验通过前,不要给用户最终阵型
- 校验通过后,再输出阵型或图片
- 如用户要求图片,使用
scripts/render_layout.py - 解释应简短,不要大段空话
工具文件
scripts/validate_layout.py:校验阵型是否合法scripts/render_layout.py:把阵型渲染成图片卡片scripts/generate_layout.py:旧版 Python 生成器;V2 中不再作为首选主路径