claw2ui

Polar Sponsor
爱发电 赞助
.NET 9.0

生成交互式网页(仪表盘、图表、表格、报告)并通过公共URL提供,适用于用户明确请求数据可视化的场景。

Claw2UI - Agent-to-UI Bridge.

功能概述

Claw2UI - Agent-to-UI Bridge.是一项面向实际任务的技能,主要用于Generate 交互式网页,来自 TypeScript DSL 规格,并通过公共URL服务.;Pages包括 Tailwind CSS, Alpine.js, 和 Chart.js 出框, 与 .。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Claw2UI — Agent 到 UI 的桥梁

基于 TypeScript DSL 规范生成交互式网页,并通过公开 URL 提供服务。页面默认集成 Tailwind CSS、Alpine.js 和 Chart.js,支持可插拔主题、类型检查及响应式移动端布局。

源码:GitHub · npm · HF Space · 许可证:MIT

数据安全与用户确认

每个已发布的页面均可通过公开 URL 访问。未经用户明确授权,严禁发布。

  • 发布前必须获得用户确认——清晰说明将要发布的内容,并等待用户明确回复“yes”或“go ahead”。静默发布绝对不可接受
  • 禁止在页面内容中包含密钥、凭证、API 密钥、令牌、PII(个人身份信息)或内部端点
  • 对所有用户提供的数据进行清洗后再嵌入——html 组件会在服务端自动清洗,但应避免将未经信任的原始输入直接传给其他组件
  • 对临时性或敏感数据使用 TTL(生存时间),使页面自动过期:--ttl 3600000(1 小时)
  • 发布前务必人工审核内容——检查表格行、统计值、图表标签等位置是否意外泄露敏感信息

安装配置

Claw2UI 默认使用公共服务器 https://0xsegfaulted-claw2ui.hf.space,无需本地部署服务端。

npm install -g claw2ui
claw2ui register --server https://0xsegfaulted-claw2ui.hf.space
# 完成!Token 已自动保存至 ~/.claw2ui.json

自托管:如需自行部署 Claw2UI 服务端(本地、Docker 或 HF Space),请参阅自托管指南。

工作流程

步骤 1:确保连接正常

# 仅需注册一次(Token 自动保存至 ~/.claw2ui.json)
claw2ui register --server https://0xsegfaulted-claw2ui.hf.space

步骤 2:编写 TypeScript DSL 规范

编写一个 .ts 文件,内容必须包裹在 container 中。该文件将自动进行类型检查。

cat > /tmp/claw2ui_page.ts << 'SPECEOF'
import { page, container, header, row, stat, card, chart, dataset } from "claw2ui/dsl"

export default page("Page Title", [
  container(
    header("Title", "Description"),
    row(3,
      stat("Metric 1", "100", { change: 5.2, icon: "trending_up" }),
      stat("Metric 2", "200"),
      stat("Metric 3", "300"),
    ),
    card("Trend",
      chart("line", {
        labels: ["Jan", "Feb", "Mar"],
        datasets: [dataset("Value", [10, 20, 15], { borderColor: "#3b82f6", tension: 0.3 })],
      }),
    ),
  ),
], { style: "anthropic" })
SPECEOF

步骤 3:向用户确认

发布前,请向用户说明将要发布的内容,并确认其是否同意继续操作。该页面将可通过公开 URL访问。例如:

“我已为您准备了一个仪表盘,内容包括:[内容摘要]。是否确认发布至公开 URL?(可添加 --ttl 3600000 参数,使页面 1 小时后自动过期。)”

步骤 4:发布

仅在获得用户明确确认后执行:

claw2ui publish --spec-file /tmp/claw2ui_page.ts --title "Dashboard"
# 对于敏感或临时数据,始终设置 TTL:
claw2ui publish --spec-file /tmp/claw2ui_page.ts --title "Dashboard" --ttl 3600000
# 跳过类型检查以加速发布(不推荐):
claw2ui publish --spec-file /tmp/claw2ui_page.ts --title "Dashboard" --no-check

命令将输出公开 URL。

步骤 5:分享 URL

将生成的 URL 包含在您对用户的响应中。

CLI 命令

# 连接管理
claw2ui register --server          # 自助注册
claw2ui init --server  --token  # 手动配置

# 发布
claw2ui publish --spec-file  --title "Title"    # 从 TS DSL 发布(带类型检查)
claw2ui publish --spec-file  --no-check         # 跳过类型检查
claw2ui publish --spec-file  --title "Title"  # 从 JSON 规范发布(遗留支持)
claw2ui publish --html "

Hi

" --title "Test" # 原生 HTML claw2ui publish --spec-file --style anthropic # 指定主题 claw2ui publish --spec-file --ttl 3600000 # 设置 TTL(毫秒) # 主题管理 claw2ui themes # 列出可用主题 # 页面管理 claw2ui list # 列出所有已发布页面 claw2ui delete # 删除指定页面 claw2ui status # 检查服务端状态

DSL 函数参考

所有函数均从 "claw2ui/dsl" 导入。

页面入口

page(title, components[], opts?)  // opts: { theme?: "light"|"dark"|"auto", style?: "anthropic"|"classic" }

布局组件(接受 ...children)

container(...children)              // 最外层容器,必须使用
row(cols, ...children)              // 网格行:row(3, stat(...), stat(...), stat(...))
column(span, ...children)           // 行内网格列
card(title, ...children)            // 带边框/阴影的卡片
list(direction, ...children)        // "vertical" 或 "horizontal"
modal(title, ...children)           // 弹出式对话框

特殊容器

tabs(                               // 标签页
  tab("id", "Label", ...children),
  tab("id2", "Label 2", ...children),
)

accordion(                          // 可折叠区域
  section("Title", ...children),
  section("Title 2", ...children),
)

数据展示

stat(label, value, opts?)           // opts: { change?: number, icon?: string }
chart(chartType, data, opts?)       // opts: { height?, options?, legendPosition?, title? }
table(columns, rows, opts?)         // opts: { searchable?, perPage? }

辅助函数(用于图表与表格)

dataset(label, data[], opts?)       // Chart.js 数据集:dataset("Rev", [1,2,3], { borderColor: "red" })
col(key, label?, format?)           // 列定义:col("name", "Name", "currency")
badge(key, label, badgeMap)         // Badge 列:badge("status", "Status", { Active: "success" })
months(n)                           // 月份标签:months(6) → ["Jan","Feb","Mar","Apr","May","Jun"]

输入控件

button(label, variant?)             // variant: "primary"|"secondary"|"danger"|"outline"
textField(label?, opts?)            // opts: { placeholder?, value?, inputType? }
select(label, options)              // options: [{ value: "a", label: "Option A" }]
checkbox(label, value?)
choicePicker(label, options, opts?) // opts: { value?, variant?, displayStyle? }
slider(label, opts?)                // opts: { min?, max?, value? }
dateTimeInput(label, opts?)         // opts: { value?, enableDate?, enableTime?, min?, max? }

媒体与文本

markdown(content)                   // 渲染 Markdown 为样式化 HTML(富文本首选)
text(content, opts?)                // opts: { size?, bold?, class? }
code(content, language?)            // 带语法高亮的代码块
html(content)                       // 原生 HTML(服务端自动清洗)
icon(name, size?)                   // Material Icon:icon("settings", 24)
image(src, alt?)
video(url, poster?)
audioPlayer(url, description?)
divider()
spacer(size?)

导航

header(title, subtitle?)            // 页面标题栏
link(href, label?, target?)         // 超链接

可用主题(style 字段)

主题 描述
anthropic (默认) 温暖的编辑风格 —— Newsreader 衬线体标题、赤陶色强调色、米白背景
classic 原始 Tailwind 风格 —— 蓝色强调色、系统字体、灰色表面

最佳实践

始终使用 TypeScript DSL,而非 JSON

DSL 支持类型检查,约节省 60% token 消耗,并可嵌入逻辑。JSON 规范仍受支持,但属于遗留方案。

善用循环与条件语句

// 基于数据动态生成 stats
const metrics = [
  { label: "CPU", value: "42%", icon: "monitor" },
  { label: "Memory", value: "6.2 GB", icon: "memory" },
  { label: "Disk", value: "120 MB/s", icon: "storage" },
]
row(3, ...metrics.map(m => stat(m.label, m.value, { icon: m.icon })))

// 条件渲染
container(
  header("Report"),
  data.length > 0
    ? card("Trend", chart("line", chartData))
    : text("No data available"),
)

// 过滤 falsy 值
container(
  header("Dashboard"),
  showMetrics && row(3, stat("A", "1"), stat("B", "2"), stat("C", "3")),
  card("Details", table(cols, rows)),
)

优先使用 col() / badge() / dataset() 辅助函数

// 推荐 —— 简洁且可读性强
table(
  [col("name", "Name"), col("rev", "Revenue", "currency"), badge("status", "Status", { Active: "success" })],
  rows,
)

// 避免 —— 冗长的原始对象
table(
  [{ key: "name", label: "Name" }, { key: "rev", label: "Revenue", format: "currency" }, { key: "status", label: "Status", format: "badge", badgeMap: { Active: "success" } }],
  rows,
)

富文本请使用 markdown()

card("About",
  markdown(`
## Features
- **Fast** — sub-second rendering
- **Secure** — sanitized HTML output
- **Responsive** — mobile-first layouts

> Built with Claw2UI
  `),
)

图表标签请使用 months()

chart("bar", {
  labels: months(6),
  datasets: [dataset("Revenue", [100, 200, 150, 300, 250, 400])],
})

设计模式

仪表盘(Dashboard)

import { page, container, header, row, stat, card, chart, table, col, badge, dataset } from "claw2ui/dsl"

export default page("Dashboard", [
  container(
    header("Dashboard", "Overview"),
    row(3,
      stat("Revenue", "$1.2M", { change: 15.3, icon: "payments" }),
      stat("Orders", "8,432", { change: 8.1, icon: "shopping_cart" }),
      stat("Customers", "2,847", { change: -2.5, icon: "group" }),
    ),
    card("Trend",
      chart("line", {
        labels: months(6),
        datasets: [dataset("Revenue", [320, 410, 380, 450, 480, 520], {
          borderColor: "#3b82f6", tension: 0.3, fill: true,
          backgroundColor: "rgba(59,130,246,0.1)",
        })],
      }, { height: 280 }),
    ),
    card("Details",
      table(
        [col("name", "Name"), col("value", "Value", "currency"), badge("status", "Status", { Active: "success", Inactive: "error" })],
        [
          { name: "Product A", value: 450000, status: "Active" },
          { name: "Product B", value: 320000, status: "Active" },
          { name: "Product C", value: 0, status: "Inactive" },
        ],
      ),
    ),
  ),
], { style: "anthropic" })

带标签页的报告(Report with Tabs)

import { page, container, header, row, stat, card, chart, table, tabs, tab, text, markdown, col, dataset, months } from "claw2ui/dsl"

export default page("Monthly Report", [
  container(
    header("Monthly Report", "March 2026"),
    tabs(
      tab("overview", "Overview",
        row(3,
          stat("Users", "12,847", { change: 18.5, icon: "group" }),
          stat("Revenue", "$89K", { change: 24.3, icon: "payments" }),
          stat("Churn", "3.2%", { change: -1.1, icon: "trending_down" }),
        ),
        card("Growth",
          chart("line", {
            labels: months(6),
            datasets: [
              dataset("Users", [8000, 9200, 10100, 11000, 11800, 12847], { borderColor: "#3b82f6" }),
              dataset("Revenue", [52, 58, 65, 72, 81, 89], { borderColor: "#10b981", yAxisID: "y1" }),
            ],
          }),
        ),
      ),
      tab("details", "Details",
        table(
          [col("page", "Page"), col("views", "Views"), col("bounce", "Bounce", "percent")],
          [
            { page: "/", views: "23,456", bounce: 28 },
            { page: "/pricing", views: "12,567", bounce: 22 },
            { page: "/docs", views: "9,876", bounce: 18 },
          ],
        ),
      ),
      tab("notes", "Notes",
        markdown("## Key Takeawaysnn- Revenue up **24.3%** MoMn- Churn improved by 1.1ppn- `/pricing` page has lowest bounce rate"),
      ),
    ),
  ),
], { style: "anthropic" })

对比方案(Comparison)

import { page, container, header, row, card, stat, text, table, col } from "claw2ui/dsl"

export default page("Plan Comparison", [
  container(
    header("Plan Comparison", "Choose the right plan"),
    row(3,
      card("Starter",
        stat("Price", "$9/mo"),
        text("5 users, 10 GB storage"),
      ),
      card("Pro",
        stat("Price", "$29/mo", { icon: "star" }),
        text("25 users, 100 GB storage"),
      ),
      card("Enterprise",
        stat("Price", "Custom", { icon: "business" }),
        text("Unlimited users, 1 TB storage"),
      ),
    ),
    card("Feature Matrix",
      table(
        [col("feature", "Feature"), col("starter", "Starter"), col("pro", "Pro"), col("enterprise", "Enterprise")],
        [
          { feature: "Users", starter: "5", pro: "25", enterprise: "Unlimited" },
          { feature: "Storage", starter: "10 GB", pro: "100 GB", enterprise: "1 TB" },
          { feature: "Support", starter: "Email", pro: "Priority", enterprise: "Dedicated" },
        ],
      ),
    ),
  ),
], { style: "anthropic" })

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

0

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

0

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

0

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

0

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习