Community图像github.com

Yeshwanthyk/viz

用几行文本即可内联渲染交互式图表或流程图,支持流程图、DAG、序列图、状态机、调用树、调用差异、时序图、甘特图、延迟直方图、重试退避、桑基图、鱼骨图、等待图、看板、库存-流量图等。

viz 是什么?

Viz 技能让 AI 代理仅通过编写结构化数据(而非 HTML 或 SVG)就能生成交互式视觉图表。它内置一个固定的渲染引擎 `assets/viz.js`,代理只需按照精简的语法描述节点、路径和视图类型,即可大幅节省 token 消耗——成本与一个 ASCII 树相近。技能支持多种视图:流程/序列/状态图等用于展示“如何流动”,时序/甘特/重试图用于展示“何时与多久”,桑基/直方/库存图用于展示“多少”,等待/原因/看板/覆盖图用于排查“为何中断”,以及通过 `== diff` 比较调用树变化。每个视图都强调证据驱动:所有节点需标注来源路径、行号及行为细节,未经验证的数据必须用 `?` 标记。适配 T3 Code 环境(通过 `html_preview` 和 `html_render` 内联运行)以及其他环境(通过 Python 脚本生成独立 HTML)。核心优势在于用极低的 token 成本获得可重放的交互图表,支持步骤回放、节点检查、边追踪、过滤以及路径复制。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Yeshwanthyk/agent-skills/tree/HEAD/skills/viz

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

viz 是做什么的?

一个固定渲染器 assets/viz.js 绘制所有视觉元素。代理只需编写符合语法的数据,因此一个视觉元素的 token 成本与它所替代的 ASCII 树相当。作为交换,它获得了步骤回放、节点检查器、边追踪、过滤和路径复制功能。

选择视图

编写数据,而非 HTML:一个 == graph 节(节点、路径和 view:)或一个图表节。根据读者提出的问题来选择,然后仅阅读所需的语法:语法 用于图、树和差异,图表 用于 == timing、gantt、hist、retries、causes、board、stock 和 waits。

它是如何流动的?

  • 组件之间的数据移动(分支、回退、异步跳转、故障出口)→ view: flow,默认视图。"带我过一遍"会添加一个叙述尾(见下文)。用移动的内容标记每条边,并按发生顺序声明边;数字会随之生成。
  • 谁执行操作、发送什么、什么内容被过滤、结果如何 → ranks: 列,每个触发器一条路径,成功通过则以 => result 结束,被过滤掉则以 =| result 结束。团队或服务作为带状 → 添加 lane:。
  • 服务之间的请求随时间变化 → view: seq,当等待时间重要时加上 at: 时间。当调用的顺序和之间的等待是关键点时选择 seq,当分支是关键点时选择 flow。每个消息后各服务所处的状态 → 在边下添加 sets: id=*charging,在节点下添加 state:。
  • 一个字段或任务的生命周期 → view: states,每个故事一条路径(!giveup: running > blocked => dead)。面向用户的流程添加起始点([*] -> form)、色调和 group 框(视图)。
  • 谁调用了谁 → == tree。某一时刻的调用栈,包含出错的数值 → view: stack 和 locals:。

何时运行,持续多久?

  • 同时运行的内容:竞争、重叠的工作 → == timing,每个工作线程一条轨道,并在重叠区域加上 !window。
  • 为什么重试堆积:退避、抖动、放弃点、多个客户端同时 → == retries,添加 policy:。
  • 请求的延迟去向以及哪个链限制了它(关键路径、松弛时间)→ == gantt,用 after 链接条形图;budget: 绘制限制线,在变更行上使用 was 140ms 可在其下绘制旧运行结果。

有多少?

  • 流量如何拆分:流量分割、漏斗、请求在哪里掉队 → view: sankey,每条路径下添加 weight:,掉队的路径以 =| <exit node> 结束。当流量重要时使用 sankey 而非 ranks:。
  • 它是尾部还是全部(p50 vs p99、延迟回归)→ == hist,使用 was: 表示旧分布。
  • 一个数值随时间变化并对照阈值(队列深度、滞后、池使用量),作为库存-流量图 → == stock,使用 meter: 带区。对于重复的模式,绘制一个典型窗口并指明。

为什么中断了,卡在哪里?

  • 谁持有哪个锁,谁在等待它,死锁 → == waits;它会找出循环。
  • 事件的可疑原因,已确定或已排除 → == causes,鱼骨图。
  • 跨阶段的工作项(回填中的分片、管道中的任务),包含在制品限制和阻塞项 → == board,看板。
  • 检查读取了哪些输入,哪些触发条件保持每个输入的新鲜度 → 在图形之后添加 == cover;编写器×字段矩阵 → columns: <rank>。

发生了什么变化?

  • 对单个布局的更改 → 节点和路径上的 + 和 -;读者获得一个 "更改前 | 同时显示 | 更改后" 切换开关。
  • 更改对调用树的影响 → == diff,由转换器生成而非手动编写。<viz> 是这个技能的目录;前两个参数是基础引用和头引用(PR 的基础分支,然后是 HEAD);<paths> 限制扫描范围:
python3 <viz>/scripts/viz.py calldiff main HEAD --max-depth 4 <paths>   # 打印 base + == diff,未更改的子树折叠
python3 <viz>/scripts/viz.py calltree --entry submitForm

根据需要添加到任何视图:

  • 每一步的原因 → 路径上的 | payload | narration 尾;每个都成为一个重放步骤。
  • 一个演练场景的设计文档 → theme drawing,步骤下添加 shows: id = text,以及当一个数值决定结果时使用 meter:(绘图)。
  • 一个将被保存、打印或分享的页面 → theme paper。它会绘制自己的画布,因此内联 T3 渲染保持默认主题。

所有内容都要有证据支持。每个节点需要 @path:line 以及关于读取、写入和失败行为的详细信息行。每个数字(持续时间、权重、级别)必须来自追踪、日志、查询或代码。任何你尚未读取或测量的内容都要用 ? 标记:在节点、路径、条形图或段落前加上 ? 前缀,并在库存数据点上添加 # estimate 注释。

展示它

T3 Code(工具列表中有 html_render):直接将页面写入 html_preview,读取其控制台以获取 viz: 解析错误,然后将同一页面传递给 html_render。请勿粘贴 viz.js。

<!doctype html><script src="https://cdn.jsdelivr.net/gh/Yeshwanthyk/agent-skills@efe8911d3765b764d7f0bf775e395d5201e29b16/skills/viz/assets/viz.js"></script>
<script type="text/viz">
…
</script>

如果预览控制台显示脚本加载失败,回退到下面的页面(任何其他地方)并告诉用户它的路径。切勿将 viz.js 内联到 T3 渲染中:每次调用大约 55k token。

任何其他地方:将数据保存到 /tmp/viz/<name>.viz,然后运行 python3 <viz>/scripts/viz.py html /tmp/viz/<name>.viz --open。它会报告解析错误,写入包含内联渲染器的 /tmp/viz/<name>.html,并在浏览器中打开它。在安装了 glimpse 的 pi 上,在那里打开该文件(pi)。报告路径。

在必须保持自包含的已保存页面内部(用户保留或分享的页面):在视图所在位置编写 text/viz 块,以 <script data-viz></script> 结束 body,然后运行 viz.py inline page.html。更新 viz.js 后重新运行。为故事标题、表格行或术语表条目添加 data-viz-id="<node id or path name>",悬停时会高亮页面上每个图中的该部分,无需页面脚本。

回复

视觉元素承载了结构。回复仅添加它无法展示的内容:你未验证的内容,以及最先查看的一个要点。

完成

当视觉元素在没有 viz: 错误的情况下渲染,每个节点和数字都有证据支持或标记了 ?,并且你已经在读者将要看到的地方查看过它:T3 内联,或打开页面的截图。无头加载、curl 或干净的控制台不算查看;当你无法查看时,应说明情况,而不是声称已渲染。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能