skills/agent-interact/SKILL.md
【强制使用】AI Agent 与用户之间的可视化交互桥梁。当需要向用户展示结果、请求确认、收集输入时, 必须优先使用本 Skill 弹出可视化窗口,而不是在终端输出纯文本。 支持 7 种预定义交互 + custom 通用渲染。pywebview 独立置顶窗口,用户无需切换应用。
npx skillsauth add shetengteng/skillix-hub agent-interactInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
核心原则:任何需要用户看到、确认、或输入的内容,都应该通过本 Skill 弹出可视化窗口。 不要把重要信息埋在终端输出中——用户可能看不到。
为 AI Agent 提供可视化的用户交互能力。交互弹框通过 pywebview(系统 WKWebView)独立窗口弹出,置顶显示在屏幕最前面。所有 dialog 关闭后服务自动退出,无需手动 stop。
# 安装(安装依赖 + 构建前端)
node skills/agent-interact/tool.js install
# 全局安装(复制到 ~/.cursor/skills/ + 安装依赖 + 构建)
node skills/agent-interact/tool.js install '{"target":"~/.cursor/skills/agent-interact"}'
# 更新(从源码覆盖 + 清理重装 + 重新构建)
node skills/agent-interact/tool.js update '{"target":"~/.cursor/skills/agent-interact"}'
# 启动服务(同时启动 Electron)
node skills/agent-interact/tool.js start
# 发送弹框(Electron 窗口自动弹出)
node skills/agent-interact/tool.js dialog '{"type":"confirm","title":"选择环境","options":[{"id":"dev","label":"开发"},{"id":"prod","label":"生产"}]}'
node skills/agent-interact/tool.js start # 启动服务 + Electron
node skills/agent-interact/tool.js stop # 停止服务 + Electron
node skills/agent-interact/tool.js status # 检查服务和 Electron 状态
node skills/agent-interact/tool.js dialog '<JSON>' # 发送弹框(Electron 窗口自动弹出)
node skills/agent-interact/tool.js dialog '{"type":"confirm","title":"请选择","options":[{"id":"a","label":"选项A"},{"id":"b","label":"选项B"}]}'
node skills/agent-interact/tool.js dialog '{"type":"wait","title":"等待验证","message":"请完成指纹验证后点击确认","confirmText":"已完成"}'
支持 line/bar/pie/doughnut/radar。
node skills/agent-interact/tool.js dialog '{"type":"chart","title":"分析","chartType":"line","data":{"labels":["Mon","Tue","Wed"],"datasets":[{"label":"P99","data":[120,150,90]}]}}'
推送通知后立即返回,不等待用户响应。
node skills/agent-interact/tool.js dialog '{"type":"notification","level":"success","title":"部署完成","message":"v2.0 已部署","autoClose":5}'
Agent 需要用户填写结构化数据。
node skills/agent-interact/tool.js dialog '{"type":"form","title":"数据库配置","fields":[{"id":"host","label":"主机","type":"text","default":"localhost"},{"id":"port","label":"端口","type":"number","default":5432},{"id":"db","label":"数据库","type":"select","options":["postgres","mysql"]}]}'
Agent 执行敏感操作前需要用户审批。
node skills/agent-interact/tool.js dialog '{"type":"approval","title":"确认删除","message":"即将删除 production 数据库","severity":"critical","details":{"action":"DROP TABLE","database":"production"}}'
展示多步骤任务的实时进度。
node skills/agent-interact/tool.js dialog '{"type":"progress","title":"部署进度","steps":[{"id":"build","label":"构建","status":"completed"},{"id":"test","label":"测试","status":"running"},{"id":"deploy","label":"部署","status":"pending"}],"percent":45}'
当预定义类型无法满足需求时,使用 custom 类型自由编排弹框内容。通过 JSON 描述 content 数组,前端动态递归渲染。
顶层结构:
{
"type": "custom",
"title": "标题",
"content": [ /* CustomNode 数组 */ ],
"actions": [ /* 按钮数组,可选 */ ]
}
组件属性速查表:
展示类:
| kind | 必填属性 | 可选属性 |
|------|----------|----------|
| text | value: string | — |
| heading | value: string | level: 1\|2\|3\|4 |
| divider | — | — |
| alert | value: string | level: "info"\|"warning"\|"error"\|"success" |
| badge | value: string | variant: "default"\|"success"\|"warning"\|"error" |
| code | value: string | language: string |
| image | src: string(仅 https) | alt: string |
| kv | items: [{key, value}] | — |
| progress | percent: number | label: string |
数据类:
| kind | 必填属性 | 可选属性 |
|------|----------|----------|
| table | columns: string[], rows: string[][] | sortable: boolean |
| chart | chartType: "line"\|"bar"\|"pie"\|"doughnut"\|"radar", data: {labels, datasets} | — |
输入类(id 必填,数据随 action 提交):
| kind | 必填属性 | 可选属性 |
|------|----------|----------|
| input | id, label | required, placeholder, default |
| textarea | id, label | required, placeholder, default |
| select | id, label, options: string[] | required, default |
| checkbox | id, label | default: boolean |
布局类(通过 children 嵌套其他组件):
| kind | 必填属性 | 可选属性 |
|------|----------|----------|
| row | children: CustomNode[] | gap: "sm"\|"md"\|"lg" |
| column | children: CustomNode[] | gap: "sm"\|"md"\|"lg" |
| grid | children: CustomNode[] | columns: 2\|3\|4, gap: "sm"\|"md"\|"lg" |
| section | children: CustomNode[] | title: string |
| group | children: CustomNode[] | — |
actions 字段:
| 字段 | 默认值 | 说明 |
|------|--------|------|
| id | — | 按钮标识(必填) |
| label | — | 按钮文本(必填) |
| variant | "default" | "default"\|"destructive"\|"outline"\|"secondary"\|"ghost" |
| submit | true | 是否提交表单数据 |
| requireValid | false | 是否要求输入校验通过才能提交 |
| closeOnSubmit | true | 提交后是否关闭弹框 |
响应协议(用户点击按钮后返回):
{
"dialogId": "d-xxx",
"action": "按钮id",
"data": { "输入字段id": "用户输入值" },
"valid": true,
"errors": []
}
示例 1:部署确认(alert + kv + input)
node skills/agent-interact/tool.js dialog '{"type":"custom","title":"确认部署到生产环境","content":[{"kind":"alert","value":"即将部署到生产环境,请仔细确认","level":"error"},{"kind":"kv","items":[{"key":"版本","value":"v2.3.1"},{"key":"分支","value":"release/2.3.1"},{"key":"变更文件","value":"23 个"}]},{"kind":"divider"},{"kind":"input","id":"reason","label":"部署原因","placeholder":"请输入部署原因(必填)","required":true}],"actions":[{"id":"deploy","label":"确认部署","variant":"destructive","submit":true,"requireValid":true},{"id":"cancel","label":"取消","variant":"outline","submit":false}]}'
示例 2:API 分析报告(table + chart + text)
node skills/agent-interact/tool.js dialog '{"type":"custom","title":"API 性能分析","content":[{"kind":"alert","value":"检测到 2 个端点响应时间异常","level":"warning"},{"kind":"table","columns":["端点","P50 (ms)","P99 (ms)","错误率"],"rows":[["/api/users","45","320","0.1%"],["/api/orders","120","890","2.3%"],["/api/products","30","95","0%"]]},{"kind":"chart","chartType":"bar","data":{"labels":["/api/users","/api/orders","/api/products"],"datasets":[{"label":"P99 (ms)","data":[320,890,95]}]}},{"kind":"divider"},{"kind":"text","value":"建议:/api/orders 的 P99 接近 1 秒,建议检查数据库查询和 N+1 问题。"}],"actions":[{"id":"optimize","label":"开始优化"},{"id":"later","label":"稍后处理","variant":"outline"}]}'
示例 3:数据对比(heading + group + badge)
node skills/agent-interact/tool.js dialog '{"type":"custom","title":"优化前后对比","content":[{"kind":"heading","value":"优化前","level":3},{"kind":"group","children":[{"kind":"badge","value":"P50: 120ms","variant":"warning"},{"kind":"badge","value":"P99: 890ms","variant":"error"},{"kind":"badge","value":"错误率: 2.3%","variant":"error"}]},{"kind":"heading","value":"优化后","level":3},{"kind":"group","children":[{"kind":"badge","value":"P50: 45ms","variant":"success"},{"kind":"badge","value":"P99: 150ms","variant":"success"},{"kind":"badge","value":"错误率: 0.1%","variant":"success"}]},{"kind":"divider"},{"kind":"text","value":"优化措施:添加了数据库索引,启用了查询缓存。"}],"actions":[{"id":"ok","label":"了解"}]}'
Schema 校验:服务端使用 Ajv 严格校验,未知 kind 或格式错误直接返回 400 + 错误路径。收到 400 时仅修正报错路径字段,不重写整份 JSON。
性能限制:content 最多 40 项,嵌套深度 ≤ 4,表格 ≤ 200 行,图表 ≤ 1000 点。
Agent 也可以直接调用 REST API:
POST http://127.0.0.1:7890/api/dialog — 创建弹框(阻塞直到用户响应)GET http://127.0.0.1:7890/api/status — 服务状态GET http://127.0.0.1:7890/api/dialogs — 活跃弹框列表DELETE http://127.0.0.1:7890/api/dialog/:id — 取消弹框以下场景中,必须使用 agent-interact 弹框,不允许仅在终端输出:
| 场景 | 类型 | 为什么必须弹框 | |------|------|---------------| | 任务完成,需要展示结果报告 | custom/notification | 用户可能不在看终端,弹窗确保看到 | | 存在多个方案需要用户选择 | confirm | 终端选择体验差,弹窗更直观 | | 即将执行不可逆/高风险操作 | approval | 必须确保用户明确知情并确认 | | 需要用户填写多个参数 | form | 结构化表单比终端问答更高效 | | 需要用户在外部系统操作后继续 | wait | 弹窗置顶提醒用户回来确认 | | 数据分析完成,有图表/表格要展示 | chart/custom | 可视化数据必须用窗口展示 | | 多步骤任务进行中 | progress | 实时进度条比终端日志更清晰 | | 需要用户审阅优化建议并决策 | custom | 对比展示 + 选择按钮 |
development
读取网页内容,支持 SPA 页面自动检测与浏览器渲染降级。当普通 HTTP fetch 无法获取 Vue/React 等 SPA 页面的渲染数据时,自动通过 Playwright 浏览器获取完整内容。当用户需要读取网页数据、提取页面内容、或 WebFetch 工具返回空内容时使用。
tools
被动录制用户浏览器操作行为。打开浏览器后用户自由操作,系统通过 CDP + DOM 事件注入 自动记录点击、输入、导航等操作和 API 调用。录制完成后 LLM 分析生成结构化工作流。 支持参数化重放、生成独立 Skill、导出 Playwright 脚本。依赖 Playwright Skill。
development
# uni-app 小程序代码生成器 > **版本**: v1.0.0 > **作者**: AI Assistant > **参考项目**: tt-paikebao-mp(排课宝) ## 功能概述 这是一个基于 **tt-paikebao-mp** 项目代码规范的 uni-app 小程序代码生成器。根据用户提供的需求文档,自动生成符合项目规范的: - Vue3 页面组件 - API 接口文件 - Pinia Store 状态管理 - 路由配置 - 数据库 Schema 定义 ## 触发条件 当用户请求以下内容时,应使用此 Skill: 1. 创建新的页面模块 2. 生成 API 接口文件 3. 创建数据库集合定义 4. 生成 Store 状态管理 5. 提供需求文档要求生成代码 6. 询问 uni-app 小程序开发规范 ## 快速开始 ### 1. 用户提供需求文档 用户应提供以下格式的需求文档: ```markdown # 模块名称 ## 功能描述 简要描述该模块的功能 ## 数据字段 - fieldName: 字段描述(必填/可选,类型) ## 页面列
development
读取并缓存 Swagger/OpenAPI 文档供模型使用。当用户需要添加、读取、刷新 API 文档,或使用 Swagger URL 时触发。