drawiodo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited drawiodo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
正向触发: 当用户提出以下意图时触发:
否定条件: 以下情况不触发本技能:
📚 渐进式加载:本技能采用渐进式 MD 体系,SKILL.md为入口(≤230行),详细内容拆分到references/*.md按需加载。
draw.io.exe 打开,即时查看结果| 文件名 | 分类 | 包含内容 | 审计关联 |
|---|---|---|---|
references/LICENSE.md | 许可协议 | 开源许可证声明(MIT)。包含:MIT 许可证完整文本。 | R-26 |
references/antipatterns.md | 规范指南 | skill 编写中的常见反模式。包含:错误做法示例、正确做法示例、避坑指引。 | R-18 |
references/api_reference.md | 参考文档 | - DrawIOBuilder(name) - 创建画布 | 无 |
references/changelog.md | 版本管理 | 版本更新日志。包含:版本号、变更类型、修复项、升级说明。 | R-24 |
references/faq.md | 常见问题 | 常见疑问与解答。包含:问题分类、原因分析、解决方案。 | R-19, R-25 C-19 |
references/generation.md | 参考文档 | 路径信息见 _meta.json data_dir 声明 + frontmatter data_dir 字段。 | 无 |
references/guide.md | 使用指南 | 三种执行模式操作教程。包含:audit/create/refactor 流程、参数说明、注意事项。 | 无 |
references/hooks.md | 参考文档 | 本技能的所有关键约束由 Python 端强制执行,不依赖 LLM 自觉。 | 无 |
references/known_issues.md | 参考文档 | 问题:子节点使用极坐标计算位置,导致: | 无 |
references/layout_rules.md | 参考文档 | - 画布坐标:左上角(0,0),X向右增大,Y向下增大 | 无 |
references/permissions.md | 权限与测试 | 权限扫描说明与测试结论。包含:风险等级、高权限操作说明、测试概览、计时统计。 | R-15, R-16 |
references/test-report.md | 测试报告 | skill-function-test 全量测试结论 | 无 |
| --- | --- | --- | --- |
scripts/drawio_unified.py | 核心引擎 | 统一图生成:拓扑分层 → 重心排序 → 位置计算 → 路由 | 无 |
scripts/drawio_module.py | 模块基类 | DiagramModule 抽象接口 + LayoutResult + 渲染层 | 无 |
scripts/drawio_modules.py | 模块注册 | GraphModule / GanttModule 注册表 | 无 |
scripts/drawio_gen.py | XML 生成 | Node / Edge / DrawIOBuilder + build_xml() | 无 |
scripts/drawio_route.py | 路径路由 | Rect / CollisionResolver / ObstacleRouter | 无 |
scripts/drawio_layout.py | 布局辅助 | text_width / auto_node_size / 间距常量 | 无 |
scripts/drawio_hooks.py | 钩子系统 | 8 个 Hook Point 实现 | 无 |
scripts/drawio_version.py | 版本管理 | VersionManager CLI:init/save/list/restore/diff | 无 |
scripts/drawio.py | CLI 入口 | 模板式图表生成 CLI(流程图/架构图/类图/ER/树/思维导图) | 无 |
scripts/drawio_agent.py | CLI 入口 | 自然语言驱动的图表生成 CLI(--json 接收结构化数据) | 无 |
scripts/drawio_regen_all.py | 批量生成 | 一次性生成全部示例图的脚本 | 无 |
scripts/drawio_templates.py | 模板生成 | 旧版按图类型生成模板(flowchart/architecture/class/er/tree/mindmap) | 无 |
scripts/build_network.py | 网络构建 | 网络拓扑图专用构建函数 | 无 |
→ 各阶段详细说明见核心能力的渐进式文件索引
各阶段要点:
快捷模式(可跳过确认):
版本管理命令:
python {SKILL_DIR}/scripts/drawio_version.py init <文件.drawio> "初始版本"
python {SKILL_DIR}/scripts/drawio_version.py save <文件.drawio> "更新了 XX"
python {SKILL_DIR}/scripts/drawio_version.py list <文件.drawio>
python {SKILL_DIR}/scripts/drawio_version.py restore <文件.drawio> v2关键操作由 Python 端自动执行,不依赖 LLM 自觉。 备份、版本管理初始化、版本上限清理均由钩子在脚本层直接完成, LLM 无权跳过这些操作。
→ 各参考文档详见核心能力的渐进式文件索引
| Hook Point | 强制操作 | 说明 |
|---|---|---|
pre_think | 输入非空校验(阻断) | 空输入直接阻断 |
post_think | 分析结果校验 | 缺失字段仅警告 |
pre_confirm | 选项完整性校验(阻断)+ 快捷跳过(清除选项) | 不足 2 项或快捷跳转均阻断/跳过 |
post_confirm | 用户选择解析 | - |
pre_iterate | 自动创建目录 + 自动备份 | 备份由 Python 调用 VersionManager |
post_iterate | 输出校验 + 自动初始化版本管理 + 自动打开预览 | init 和预览都由 Python 执行 |
pre_vc | 自动清理超限版本 | 删除最旧版本由 Python 执行 |
post_vc | 版本状态报告 | - |
from drawio_hooks import hooks
# 在阶段开始时
results = hooks('pre_iterate', {
'output_path': output_path,
'is_update': True, # 会触发自动备份
})
for r in results:
if r.abort:
return # 钩子已处理,阻断并返回
if not r.success:
print(f'Warning: {r.message}')
# 在阶段结束时
results = hooks('post_iterate', {
'output_path': output_path, # 会触发自动 init 版本管理
})from drawio_hooks import register, unregister
@register('pre_think', name='my_check', description='自定义校验')
def my_hook(ctx):
if 'special' not in ctx.get('user_input', ''):
return {'success': False, 'message': '缺少特殊参数', 'abort': True}
return {'success': True, 'message': 'ok'}
unregister('post_iterate', 'preview_trigger') # 禁用自动预览python {SKILL_DIR}/scripts/drawio_hooks.py list # 查看所有注册钩子
python {SKILL_DIR}/scripts/drawio_hooks.py check # 全流程自检
python {SKILL_DIR}/scripts/drawio_hooks.py history # 查看执行历史→ 详见核心能力的渐进式文件索引
→ 详见核心能力的渐进式文件索引
→ 详见核心能力的渐进式文件索引
→ 详见核心能力的渐进式文件索引
→ 反模式和常见问题详见核心能力的渐进式文件索引
{类型}_{描述}.drawio,如 architecture_microservice.drawio_meta.json data_dir 声明 + frontmatter data_dir 字段| 文件 | 路径 | 说明 |
|---|---|---|
| 核心库 | scripts/drawio_gen.py | 节点/连线/容器/XML 生成 |
| 模板库 | scripts/drawio_templates.py | 8 种图表模板 |
| Agent 入口 | scripts/drawio_agent.py | CLI/自然语言解析 |
| 版本管理 | scripts/drawio_version.py | 5 版本回溯系统 |
用户:帮我画一个微服务架构图,包含 API 网关、用户服务、订单服务和数据库
drawiodo:正在分析需求 → 判断为"架构图" → 输出方案:4 个容器+连线+数据库图标
用户确认后 → 生成 architecture_microservice.drawio → 自动打开预览用户:在上次的系统架构图里加一个消息队列,在订单服务和用户服务之间
drawiodo:读取已存在的文件 → 自动备份(v2) → 在订单服务和用户服务之间插入消息队列节点和连线
→ 更新文件 → 自动打开预览展示变化~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.