Agent skill

Wxa Skills Generate

by wechat-miniprogram in wechat-miniprogram/ai-mode-skills

分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI…

MITAuto-check passedProductivity & Automation

Install Wxa Skills Generate

skills CLI
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-generate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-generate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/wxa-skills-generate .claude/skills/wxa-skills-generate && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wxa-skills-generate
GitHub stars
208
Token cost
~8k tokens
SKILL.md length
2,090 words
Files
14 (incl. scripts, references)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI…

  • Works in 2 steps: 业务场景不明确时,必须先澄清后生成 → 每个阶段完整产出"产出物清单"中的全部项后再跳转到下一阶段
  • Productivity & Automation work in your project
  • SKILL.md covers 职责边界, 分析产物(<源项目>/.ai-mode-skills/), 依赖 and 术语约定, plus 10 more sections
  • Runs JavaScript scripts from its folder; calls node

What it does

Wxa Skills Generate is an agent skill from wechat-miniprogram/ai-mode-skills. 分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI 的开发模式代码生成。仅负责静态生成,生成完成后必须交棒 wxa-skills-validate 做校验。

Its SKILL.md is about 8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 15 other files, including scripts and reference files (for example `references/ANALYSIS_PATTERNS.md`, `references/ATOMIC_COMPONENT_CSS.md` and `references/ATOMIC_COMPONENT_DESIGN.md`).

It sits in Productivity & Automation. It works with Model Context Protocol and WeChat. The licence is MIT.

When your agent uses it

  • Productivity & Automation work in your project

Example prompts

  • “/wxa-skills-generate”

Requirements

  • Node.js

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. 业务场景不明确时,必须先澄清后生成
  2. 每个阶段完整产出"产出物清单"中的全部项后再跳转到下一阶段

What it can do on your machine

Read from SKILL.md and the folder at commit 9bd1f25. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wxa Skills Generate loads about 8k tokens when it runs, and up to ~47k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 2,090 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~67
When it runs · the whole SKILL.md, loaded when a task matches
~8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~47k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from wechat-miniprogram/ai-mode-skills at commit 9bd1f25, republished under its MIT licence (© wechat-miniprogram). 2,090 words, ~7,985 tokens.

Download SKILL.mdSave it as .claude/skills/wxa-skills-generate/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.
name
wxa-skills-generate
description
分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI 的开发模式代码生成。仅负责静态生成,生成完成后必须交棒 wxa-skills-validate 做校验。
metadata.author
Tencent
metadata.version
0.3.0

wxa-skill-generate

从小程序源码生成符合 wx.modelContext 规范的技能分包(skills/):分析源码 → 识别业务 → 提取接口与 JSAPI → 设计原子接口 → 生成代码 → 集成配置 → 交棒校验。

职责边界

  • ✅ 本 skill 做:源码分析、原子接口设计、按需使用 automator 获取真实响应、代码生成、app.json / project.config.json 集成
    • 生成过程内的自检:字段来源自检(§5.8)、AUTH_MIGRATION.md §6 鉴权自检、硬性约束 C 代码一致性自检
  • ❌ 本 skill 不做:对生成产物的独立校验(静态规则校验 V001~V021、真机 execute 跑通、组件渲染核对)——全部由 wxa-skills-validate 负责。生成阶段的自检是本 skill 的组成部分,不因"校验交给 validate"而跳过
  • 📦 交付:skills/{skill-name}/(含 mcp.json、SKILL.md、index.js、原子接口实现文件、工具模块;组件目录仅生成组件时才有,见 D.3)+ 配置文件更新 + .ai-mode-skills/ 分析产物两份

分析产物(<源项目>/.ai-mode-skills/)

分析结果落盘两份,按读取频率拆分,避免单文件全量读入:

文件产出时机内容用法
analysis-auth.md阶段 1.2鉴权事实 + 逐字代码片段写一次、读多次;阶段 3 / 5.6 引用
analysis-apis.md阶段 3逐接口规格 + probe 结果摘要逐接口追加;阶段 4 / 5 引用

probe/plan.json(probe.mjs 的输入)与 probe/<run-id>.json(脚本写盘)由subagent脚本管理,不属于分析产物。

依赖

  • 可读的源码目录(仅给 appid / URL / 截图 → 触发阻断)
  • 开发者工具:微信开发者工具 + scripts/probe.mjs(miniprogram-automator 装 skill 的 scripts/,不装源项目)。只在阶段 3.7 的两种触发条件命中时才用,见 3.7 与 references/RUNTIME_PROBE.md

术语约定

  • 原子接口:对外暴露给小程序 AI 的可调用能力。约定路径 skills/{skill}/apis/{name}.js(validator 也兼容 tools/services/ / tools/)
  • 原子组件:用于渲染原子接口返回数据的 GUI 卡片(是否生成、componentPath 规则见 D.3)。
  • 压缩代码:单行超 500 字符、变量名单字符的产物(含混淆)
  • probe:本 skill 阶段 3.7 的运行时探测。用 automator(miniprogram-automator npm 包)连接开发者工具 WS 端口(9420),在源项目上触发请求、捕获真实响应,产物落盘 .ai-mode-skills/probe/。

参考资料索引

文件用途加载时机不加载条件
references/ANALYSIS_PATTERNS.md业务流程识别、接口/JSAPI 搜索模式阶段 2 / 3 扫描源码时用户已明确全部能力且无需再扫页面结构时
references/JSAPI_WHITELIST.mdwx API 白名单完整清单(接口侧 / 组件侧 / 不可迁移);D 节只列高频项阶段 1 / 3 / 5(D 节未覆盖目标 API 时必查)无(建议每次对照,不要凭印象)
references/CODE_TEMPLATES.md代码与配置模板(index.js / utils / apis / mcp.json / skill SKILL.md / app.json)阶段 5 / 6纯改已有单行逻辑、不涉及模板结构时
references/COMPONENT_TEMPLATES.md原子组件模板阶段 5(生成组件时)不生成组件(默认,见 D.3)
references/ATOMIC_COMPONENT_DESIGN.md组件设计规范(尺寸 / 主题 / 边距 / 字体 / 布局)同上(强制前置,优先级最高)同上
references/ATOMIC_COMPONENT_CSS.md组件 WXSS 实现规范同上(写样式时)同上
references/STYLE_MIGRATION.md源样式提取 + 字段映射工作流同上(写 WXML/WXSS 前强制前置)同上
references/HALF_SCREEN.md半屏页 API 与禁用清单按需(源业务确有详情/补充信息语义)默认不生成半屏时
references/RUNTIME_PROBE.mdprobe 触发场景、plan/result 格式、执行命令阶段 3.7 命中触发条件时分析源码之后决定不跑 probe 时
references/AUTH_MIGRATION.mdanalysis-auth.md 填写指引、鉴权复刻、ensureXxx、§6 自检阶段 1.2 / 3(鉴权引用)/ 5.6无(「无登录」≠「无鉴权」,通用 header/query 仍要读)
references/SUBAGENT_PROTOCOL.md大项目 subagent 派发协议(能力索引 → ①鉴权 ②api ③probe;读取预算与回传纪律)阶段 1 判定为大项目时小项目(页面 ≤ ~30 且无多分包)直读时

硬性约束

A. 独立分包禁止项(必须改写)
禁止项正确做法
getApp()分包内自行管理状态(模块变量 / wx.storage)
require('../../xxx') 引用主包/兄弟分包 / import ... from '@/'把依赖完整拷贝到当前分包:单 skill 私有放 {skill}/utils/,多 skill 复用放 skills/_shared/
依赖主包 wx.cloud.init()utils/util.js 中 ensureCloudInit() 自行初始化
依赖主包 app.js 初始化 storageutils/util.js 中 ensureStorageInit() 自行初始化
从 getApp().globalData 读配置baseUrl / env 硬编码在分包 utils/util.js
依赖主包登录态每次执行接口前 ensureLogin() 主动走一遍登录流程
使用主包注册的全局组件在分包 JSON 中重新声明 usingComponents
B. 直接终止生成的阻断规则

出现以下任一情况,立即终止生成并告知用户:

阻断情况检测时机告知文案
依赖小程序插件(plugin:// / requirePlugin / app.json 的 plugins)阶段 1/3"该功能依赖小程序插件,当前暂不支持自动生成,需手动接入"
用户声明的能力在源码中找不到任何对应接口或页面阶段 3"未能在源码中定位到 <能力名>,无法生成,请确认能力名称或补充源码"
未提供可读的源码目录(只给 appid / URL / 截图)阶段 1 前"请提供小程序完整源码目录,当前无法基于非源码资产生成"
所有候选实现都依赖非白名单 JSAPI 且无替代方案阶段 3"该能力依赖非白名单 JSAPI(如 <api>),无法自动生成"
app.json 缺 "lazyCodeLoading": "requiredComponents" 配置阶段 1"项目 app.json 顶层缺少 \"lazyCodeLoading\": \"requiredComponents\",否则独立分包内的原子接口被小程序 AI 路由调用时无法正确加载执行。请在 app.json 顶层添加该字段后重新触发生成"
响应结构无法从源码消费点确定,且 probe 不可用阶段 3"接口 <api> 的响应结构无法静态确定且运行时探测不可用,请协助提供接口文档或排查 probe 环境"
C. 代码一致性(不增不减 + 封装层强制复用)

本 skill 的唯一目标:将参考源码迁移/转换为目标格式,保持逻辑、结构、行为与参考源码完全一致。

迁移 = 忠实搬移,不是重写。源码中存在的每一项逻辑都必须保留到产物中,源码中不存在的不得添加。

封装层强制复用:utils/request.js 是网络请求唯一入口,所有 apis/*.js 必须通过它发请求,禁止 API 文件中直接调 wx.request 或自行拼 URL/header/query——否则鉴权参数全部丢失导致 403/空数据。

C.1 禁止添加(源码中不存在的逻辑)
  • 添加参考源码中不存在的错误处理(try/catch、if 判断等)
  • 添加参考源码中不存在的默认值或兜底逻辑
  • 添加参考源码中不存在的输入校验
  • 「优化」、「修正」、「补全」参考源码中看起来不完整的逻辑
  • 任何形式的「我觉得这里应该加上...」

如果参考源码本身没有处理某种情况,输出也不处理。参考源码某处看起来像是 bug 或缺失,原样保留。

C.2 禁止丢弃(源码中存在的逻辑)

核心原则:你无权判断"这个参数是否必要"。 后端校验规则对你是黑盒,源码 request 封装中每一个 header/query 都必须保留。

  • 鉴权参数完整保留:见 references/AUTH_MIGRATION.md;生成后按 AUTH_MIGRATION §6 自检
  • 依赖完整内联:阶段 3.2 追踪到的依赖,阶段 5 完整拷贝到分包
  • 响应字段类型安全:对 API 响应中的数组字段进行处理前,加空保护((x || []).method() 或 Array.isArray(x) ? x.method() : [])。
D. wx API 白名单(每次生成必须对照)

阶段 1 鉴权扫描、阶段 3 JSAPI 提取、阶段 5 代码生成时必须对照白名单。源码用到清单之外的 JSAPI → 按"不可迁移 JSAPI"处理。

完整清单(接口侧 / 组件侧 / 不可迁移)见 references/JSAPI_WHITELIST.md。下文 D.1 / D.2 / D.6 仅列高频条目,覆盖业务时必查 reference 完整列表,不要凭印象。

D.1 接口侧白名单

"接口侧"指通过 wx.modelContext.registerAPI() 注册的处理函数及其依赖的纯 JS 模块——常规放在 <skill>/apis/(也可放 tools/services/ / tools/,validator 会按这三个候选目录解析),引用的工具模块目录名(如 utils/ / services/ / helpers/ / 自定义名)不限。作用域以"是否在原子接口处理函数链路上"判定,不以目录名判定。

分类高频接口
小程序 AIwx.modelContext.registerAPI、wx.modelContext.createSkill(返回 { use, registerAPI })、wx.modelContext.expireAllCards、wx.modelContext.getSessionId(获取会话 ID)
登录wx.login、wx.checkSession
网络wx.request、网络状态 getNetworkType / on*NetworkStatusChange
云开发wx.cloud.init / callFunction / database
位置wx.getLocation / getFuzzyLocation(不含 chooseLocation / openLocation)
系统wx.getDeviceInfo、wx.getAppBaseInfo、wx.getWindowInfo
数据缓存wx.{get,set,remove,clear,batchGet,batchSet}Storage(含 Sync)、wx.getStorageInfo
上传下载wx.uploadFile、wx.downloadFile
订阅消息wx.requestSubscribeMessage
授权设置wx.authorize、wx.getSetting(不含 openSetting)
图片wx.getImageInfo
手机号wx.getPhoneNumber、wx.getRealtimePhoneNumber
账号wx.getAccountInfoSync(接口与组件均可调)
隐私授权wx.requestAgentPrivacyAuthorization({ privacyAgreements })(弹平台隐私授权卡片,返回 { authorized };用法见 references/CODE_TEMPLATES.md 第二节)

支付类、系统选择器/采集(choose* / scanCode / saveImageToPhotosAlbum)、主动打开原生页/面板(openLocation / makePhoneCall / openDocument / shareAppMessage / openSetting / openPrivacyContract)、界面反馈(showToast / hideToast)不在接口侧——见 D.2 / references/JSAPI_WHITELIST.md §2(组件侧)。其他场景(人脸核身、微信运动、加密、WiFi、蓝牙/BLE、WebSocket、TCP/UDP、mDNS、传感器等)查 references/JSAPI_WHITELIST.md §1 完整表。

源码用到清单之外的 JSAPI → 按 D.9 判定规则处理。阶段 1/3/5 每次对照白名单,不要凭印象。

D.2 组件侧白名单

"组件侧"指原子组件 Component({}) 内的代码及其引用的纯 JS 模块。_meta.ui.componentPath 是相对 skill 目录的组件基路径,对应 <componentPath>.{js,json,wxml,wxss};默认模板使用 components/<name>/index。

完整清单见 references/JSAPI_WHITELIST.md §2(含小程序 AI getContext/getViewContext/setRelatedPage/updateModelContext/expireAllCards/expirePreviousCards、界面 previewMedia/showToast/hideToast、系统、缓存、文件、账号、位置 openLocation、设备、设置、分享、振动、隐私、地图 MapContext 全方法等)。组件侧禁用规则(wx.cloud.* 及白名单外 JSAPI 不可用、组件与接口全局变量不共享、上下文按使用点获取或 this._viewCtx 缓存)同见该文 §2 末段。

同步交互状态给模型:用户在卡片上改了选择(选规格、选时段等)时,在 tap handler 内调 wx.modelContext.getViewContext(this).updateModelContext({ content: [{ type: 'text', text: '用户选择了大杯' }] }),让模型感知最新状态。必须在用户的 tap 点击事件回调中调用,不可在异步逻辑或定时器中调用,短时间重复调用会被节流拒绝,content 须为非空数组且 text 非空。

D.3 组件配置(原子组件按需生成 + 关联页 + 实时动态能力)

默认不生成原子组件。原子接口只返回文本 + structuredContent + handoff(进接力页,见 D.6)。仅当用户明确要求生成原子组件(GUI 卡片)时才生成:对应接口声明相对 skill 目录的 _meta.ui.componentPath,并在 mcp.json 顶层 components[] 声明一条记录,path 必须与该接口 _meta.ui.componentPath 字符串完全相等。

relatedPage 必填:卡片标题栏右上角的"进入小程序"入口靠它配置,缺失会导致 cli preview / 上传时被平台强校验拦下。取值必须以 / 开头(绝对路径),去掉前导 / 后是项目 app.json 中真实存在的页面(主包 pages[] 或分包 root + page);业务上没有对应页面时兜底填首页 /<app.json.pages[0]>。通过该入口进小程序的场景值为 1442 / 1443。

permissions.scope.dynamic 仅在组件需要 wx.login / wx.checkSession / wx.request / 定时器时按需声明(规则见 references/JSAPI_WHITELIST.md §2.1)。

json
{
  "components": [
    {
      "path": "components/order-list/index",
      "relatedPage": "/pages/order/list"
    },
    {
      "path": "components/weather-card/index",
      "relatedPage": "/pages/weather/index",
      "permissions": { "scope.dynamic": { "desc": "声明使用场景" } }
    }
  ]
}

运行时给关联页附加 query 参数:可在组件 created 中保存 this._viewCtx = wx.modelContext.getViewContext(this),收到 NotificationType.Result 或状态变化后调 this._viewCtx.setRelatedPage({ query });组件可能关联多个页面时再额外传 path。也可按使用点获取 viewCtx 后调用。示例代码见 references/COMPONENT_TEMPLATES.md "关联小程序页面"节。该约束由静态规则校验(V015)。

D.4 组件过期态声明(按需,非强制)

默认不生成。仅当源业务上存在"卡片到某时刻作废、不应再被点"语义(成交、关店、活动结束、超时)时,在 components[] 记录上加 expirable: true + 业务化 expiredText。声明与调用必须配对。

触发 API 二选一(不要同时调)、精细过滤(componentPaths / match: 'latest')、代码示例详见 references/COMPONENT_TEMPLATES.md "卡片过期"节。

D.5 半屏页面(按需,默认不生成)

本节说的半屏页面是另开一个小程序页面(openDetailPage),运行环境等同普通小程序页面;与原子组件自身展开成半屏的 collapsible-view 不是一回事,选用辨析见 references/HALF_SCREEN.md §4。

仅当源业务确有"详情 / 用户补充信息"语义时挂上。入口仅在原子组件 methods 内(getViewContext(this).openDetailPage,原子接口无 this 不可调)。半屏内上行 sendFollowUpMessage、禁用清单(跳出类 / 页面路由 / 聊天工具 / 广告 / 导航组件等)、场景值、关闭按钮适配详见 references/HALF_SCREEN.md。

D.6 handoff 接力页(进小程序的主要方式)

进小程序统一走 handoff。默认流程:原子接口返回文本 + 小程序卡片,用户点卡片后由平台 handoff 进入小程序内的接力业务页继续操作。

何时必须配:若某原子接口执行完会停下等用户确认(展示小程序卡片、等用户点击进小程序),必须为它配置 pagePath,否则用户无法进入业务页。纯数据、无停顿接续的接口可不配。

四项适配(mcp.json 配 _meta.ui.pagePath → 返回值顶层 handoff(对象立即 / 函数延迟两形态,字段 query / payload / path)→ 主包 app.js 注册 wx.onAgentHandoff → 接力页 onLoad(query) 消费)的字段规格与完整代码,见 references/CODE_TEMPLATES.md "handoff 接力页"节。

与文本混排链接的分工:handoff 是把当前对话流程整段接力进页面;只想在回复文字中间给一个可点的详情入口时用 outputSchema 的 format: "page-link"(见阶段 4.2),不要返回 handoff。两者可同时存在,互不替代。

禁用:wx.openAgent / wx.navigateBackAgent 当前基础库侧未打通,调用会失败——接力页内不要依赖"打开 Agent / 返回 Agent 对话",后续流程由业务页自行完成。

D.7 不可迁移 JSAPI(接口与组件均禁用)

完整清单与替代策略见 references/JSAPI_WHITELIST.md §3(含 Taro 特有不可迁移项)。高频项:wx.showModal / showLoading 系、wx.navigateTo 系路由、chooseImage / chooseVideo / previewImage 老接口、setClipboardData / getClipboardData、getUserInfo / getUserProfile、createSelectorQuery / createCanvasContext、pageScrollTo / createAnimation、普通原子组件内 setTimeout / setInterval。

注意区分"两侧都不可用"与"只是换了一侧":showToast / chooseMedia / scanCode / makePhoneCall 这类不是全禁,只是从接口侧移到了组件侧;一侧可用的查 D.1 / D.2 与 references/JSAPI_WHITELIST.md。

D.8 button 的 open-type 改写

组件内 button 禁用 open-type(share / getPhoneNumber / getRealtimePhoneNumber)→ 去掉 open-type,改 bindtap,在 tap handler 内调对应白名单 JSAPI(wx.shareAppMessage;手机号相关须放在原子接口侧完成,见 D.1 / D.2)。

D.9 判定规则

按 references/JSAPI_WHITELIST.md §4 三条执行(仅能不可迁移 JSAPI 实现且无替代 → 阻断 B;核心逻辑可用网络请求实现 → 纯网络请求版本;老接口有白名单内替代 → 自动替换)。自动替换时同时确认替代接口所在的一侧(多数只在组件侧可用)。

E. 原子组件约束

事件 / 内置组件白名单 / 渲染容器 / 实时动态能力 / 动画限制等完整约束,见 references/COMPONENT_TEMPLATES.md "重要限制"节;CSS 属性支持范围见 references/ATOMIC_COMPONENT_CSS.md。另有两条限制:

  • 数据通道禁止 properties / observer / dataSource:必须通过 NotificationType.Result 取 structuredContent(详见 references/COMPONENT_TEMPLATES.md 与阶段 5.4)
  • WXML 表达式限制:{{ }} 中不支持数组下标(如 [0])、函数调用(如 .slice())、模板字符串等复杂 JS。需要计算的字段一律在 index.js 归一化阶段预处理好再 setData

执行清单(复制后勾选)

阶段 0 — 业务需求澄清(前置)
- [ ] 判定用户场景是否明确(两项判定)
- [ ] 不明确 → 最小扫描 + 引导澄清 + 等待确认
- [ ] 确认是否生成原子组件(默认不生成,见 D.3)
- [ ] 产出"目标业务场景 + 期望原子能力"清单

阶段 1 — 项目扫描
- [ ] 首检 `lazyCodeLoading`(缺则阻断 B)
- [ ] 提取 app.json / app.js / project.config.json 关键字段
- [ ] 产出云开发 / 插件 / storage 初始化清单
- [ ] 落盘 `analysis-auth.md`(鉴权事实 + 逐字代码片段,见 `AUTH_MIGRATION.md` §2/§3;大项目派 subagent ① 鉴权分析,三类中最先)
- [ ] 大项目:先产能力索引坐标(见 1.0)

阶段 2 — 业务功能识别(用户已明确时跳过)
- [ ] 产出结构化功能清单 JSON
- [ ] 用户二次确认

阶段 3 — 接口与 JSAPI 提取 + 可行性校验
- [ ] 逐接口分析(小项目直读 / 大项目派 **subagent ② api 分析**,须在 ① 完成后,见 3.2),追加到 `analysis-apis.md`
- [ ] 按需 probe(两个触发条件,见 3.7):派 **subagent ③**(须在 ①② 完成后),跑了的回填真实响应到 `analysis-apis.md`

阶段 4 — 原子接口设计
- [ ] 原子接口清单(含 name / description / inputSchema;按需声明 outputSchema。进小程序的接口配 _meta.ui.pagePath + 返回 handoff;_meta.ui.componentPath 仅生成组件时才有)
- [ ] API 依赖图
- [ ] storage key 清单

阶段 5 — 代码生成
- [ ] 进小程序的接口已配 _meta.ui.pagePath + 返回值顶层 handoff(见 D.6)
- [ ] `utils/request.js` 按 `AUTH_MIGRATION.md` §5 生成,§6 自检清单逐条过
- [ ] 每写完一个 `apis/<name>.js` 做字段来源自检(见 5.8)
- [ ] (生成组件时)组件走 5.1–5.4 前置与模板;`components[]` 每条都填了 `relatedPage`
- [ ] `skills/{skill-name}/` 目录完整(mcp.json / SKILL.md / index.js / apis/* / utils/*;仅生成组件时含 components/*);SKILL.md 按 `CODE_TEMPLATES.md` 第五节 5 节结构写完

阶段 6 — 配置集成
- [ ] app.json 加 agent.skills(每项含 `{ name, description, path }`)+ subPackages
- [ ] project.config.json 的 packOptions.include 加 skills
- [ ] (按需)AGENTS.md + `agent.instruction`;page-meta.json + `agent.pageMetadata`(见 6.1 / 6.2)
- [ ] 体积与数量上限自查(上限表见 `CODE_TEMPLATES.md` 6.3)

收尾 — 交棒给 wxa-skills-validate
- [ ] 明确告知用户:"请使用 wxa-skills-validate 做校验"
- [ ] 提示 skills 路径与 project-path

跨阶段跳转规则

场景流向
正常主干0 → 1 → (2) → 3 → 4 → 5 → 6 → 交棒 wxa-skills-validate
用户已明确能力跳过 2,0 → 1 → 3
阶段 33.6 → 3.7(命中触发条件才 probe)→ 4
probe 环境不可用静态结果照常使用,代码标 [ai-mode:static],交棒时声明未真机验证
validator 反馈 T1~T6 / A/B/C/D 类错误回本 skill 阶段 5 改代码
validator 反馈 T7/T8(接口划分 / 依赖链路)回本 skill 阶段 4 重设计
任一阶段触发阻断规则 B立即终止,输出阻断原因

核心原则:

  1. 业务场景不明确时,必须先澄清后生成
  2. 每个阶段完整产出"产出物清单"中的全部项后再跳转到下一阶段
增量与重入

工作区已存在 skills/ 产物时:

用户意图入口阶段说明
新增一个原子能力阶段 0(轻量)→ 阶段 3先澄清新能力,扫描接口并入增量清单
修改已有原子接口的行为阶段 4更新接口清单 → 5 → 6 → 交棒
修改组件样式/模板阶段 5仅改 components/{x}/,重新走 5 → 6 → 交棒
validator T1~T6 / A/B/C/D 反馈阶段 5按报告定位文件,改完交棒
validator T7/T8 反馈阶段 4重设计后 5 → 6 → 交棒
仅做验证不进入本 skill,直接给 wxa-skills-validate—

重入时已生成且未触及的文件保持不变,只更新受影响的文件。


阶段 0 — 业务需求澄清(强制前置)

契约:

项内容
入口条件用户发起生成请求(任何请求都必须从本阶段开始)
产出物判定结果 + 必要时的澄清清单
下一步"明确"或澄清确认完毕 → 阶段 1

判定规则(必须同时满足 2 项才算"明确"):

#判定项示例
①指明具体业务名词"商品检索""订单管理""地址管理""签到";而不是"核心功能""主要能力"
②可推断至少 2-3 个原子能力的粒度"检索商品 + 展示列表 + 查看详情";而不是"业务相关"

任一不满足 → 进入下方澄清流程。

不明确时的引导流程
  1. 最小扫描:只读 app.json 的 tabBar.list、pages(一级路径)、subPackages.root。禁止读 JS/WXML/WXSS,禁止做依赖分析。
  2. 归纳候选:基于路径关键词(见 references/ANALYSIS_PATTERNS.md 页面功能识别表)归纳 3~6 个候选场景。
  3. 向用户提问(一次问完,别反复打断):
    • 希望把哪些业务场景做成小程序 AI 的 SKILL?
    • 每个场景希望暴露给小程序 AI 的原子能力大致是什么?
    • 是否涉及登录态、支付、位置、云开发等敏感能力?
    • 是否需要生成原子组件(GUI 卡片)?默认不生成——只做原子接口 + handoff(点小程序卡片进接力页);仅当你明确需要对话内卡片式 GUI 时才生成。
  4. 等用户回复后才能进入阶段 1。严禁在用户确认前扫描源码或生成代码。

澄清输出清单模板:

目标业务场景:
  - 场景 A:<名称> → 期望原子能力:<能力 1>、<能力 2>
  - 场景 B:<名称> → 期望原子能力:<能力 3>

技术约束:
  - 是否涉及支付/登录/位置:是/否
  - 是否使用云开发:待阶段 1 扫描确认
  - 是否生成原子组件(GUI 卡片):是/否

阶段 1 — 项目扫描

项目结构速览 + 读取策略分流

读 app.json 映射阶段 0 目标到页面/分包。按规模分流:

规模判定策略
小项目页面 ≤ ~30、无多分包主 agent 直接 read/grep
大项目页面 > ~30 / 多分包 / 单文件巨大按 references/SUBAGENT_PROTOCOL.md 执行(能力索引 → 三类 subagent 全派)

契约:

项内容
入口条件阶段 0 产出明确
产出物配置字段、云开发/插件、analysis-auth.md、storage 清单;大项目附能力索引
下一步已明确能力 → 阶段 3;否则 → 阶段 2
阻断条件缺 lazyCodeLoading / 无源码 / 依赖插件
1.1 配置扫描

读 app.json / app.js / project.config.json,提取 pages / subPackages / tabBar / 已有 agent / appid / packOptions;扫云开发(wx.cloud 调用 / cloudfunctions/ 目录)与云环境 ID(wx.cloud.init({ env }))。lazyCodeLoading 必检:缺 "lazyCodeLoading": "requiredComponents" → 阻断规则 B(不要"代为补全")。云开发项目同时扫 cloudfunctionRoot/<fn>/index.js 的入参/返回结构。

1.2 鉴权逻辑扫描

按 references/AUTH_MIGRATION.md §2/§3 落盘 <源项目>/.ai-mode-skills/analysis-auth.md(鉴权事实结构化 + 逐字代码片段,签名函数体不写成步骤数组)。

  • 小项目:主 agent 读 app.js/request 封装/登录文件,自行填写
  • 大项目:派 subagent ①(鉴权分析) 深读 app.js / request 封装 / 登录文件 / 签名模块,回传结论摘要(见 references/SUBAGENT_PROTOCOL.md §3.1)

analysis-auth.md 落盘后即为"可信事实",后续阶段 3 / 5.6 直接引用,不重读同一鉴权函数。

1.3 主包 storage 初始化扫描(必做)

扫 app.js 与主包 .js 中的 wx.{set,get,clear}Storage*,提取 key / defaultValue / initCondition / sourceFile。迁移:① setStorageSync 初始化值 → 分包 ensureStorageInit() 重建;② getApp().globalData 运行时缓存 → 模块级变量或按需写 storage;③ onLaunch 异步获取后写 storage → 分包首次调用时自行重发请求并缓存。形成 storage 初始化清单(与阶段 4 内部"接口间数据传递的 storage key 清单"不是同一张表)。

1.4 压缩代码处理

识别:单行 >500 字符 / 单双字符变量名 / 缺注释空行。处理顺序:① 优先问用户要未压缩源码;② 否则尝试 prettier 格式化后再提取;③ 格式化后关键字段仍全是 a.b.c.d → 阻断规则 B。禁止盲目猜变量名——猜出来的代码会在 validator 大量失败。

1.5 插件检测

扫 app.json 的 plugins 字段、页面/组件 JSON 的 usingComponents 中的 plugin:// 引用。目标能力依赖插件 → 阻断规则 B。


阶段 2 — 业务功能识别(用户已明确时跳过)

契约:

项内容
入口条件阶段 1 完成 且 用户仅给源码未明确原子能力
产出物结构化功能清单(JSON)且已获得用户二次确认
下一步用户确认 → 阶段 3
阻断条件用户始终无法确认 → 停留本阶段

动作:

  1. 针对阶段 0 选定的候选场景对应页面,按 references/ANALYSIS_PATTERNS.md 的模式分析页面用途、交互事件、数据流向
  2. 从用户视角识别功能点(每个功能 = 一个原子接口)
  3. 分析数据依赖(A 的返回值被 B 使用)

mcp.json 只注册用户直接使用的原子能力(硬约束):

以下接口不收集为原子能力、不写 mcp.json、不生成 apis/*.js:

  1. 鉴权/登录类:wx.login / wx.checkSession / ensureLogin() / token 刷新 / 获取 sessionId 等——这些是基础设施,由 utils/ 内 ensureLogin() 等函数在每次接口调用前自动执行,不是用户直接使用的能力
  2. 系统级/生命周期接口:app 初始化(onLaunch / onShow)、storage 初始化、配置获取、全局状态读取等——这些是框架/运行时行为,不是用户主动触发的业务功能
  3. 内部辅助接口:被其他原子接口调用但不直接面向用户的 API(如"获取子列表"被"搜索"内部调用但用户不直接用)——只收集用户视角的功能入口
  4. 工具函数:utils/ 中的纯函数(格式化、计算、URL 拼接等)——这些是代码组织,不是独立能力
  5. 敏感接口(不可逆副作用):注销/删除/解绑等——见下方专门规则
  6. 管理端接口:管理端操作(如"导出数据"、"管理成员"、"删除商品"、"发布公告"等)——这些是管理端操作,不是用户直接使用的能力

判定标准:问自己"用户会对小程序 AI 说'帮我做 X'吗?"——会 → X 是原子能力;"系统自动做的"或"另一个接口内部调的" → 不是。

敏感接口默认不收集为原子能力(硬约束):

会产生不可逆副作用的接口,默认不收集为原子能力、不写 mcp.json、不生成 apis/*.js。理由:这类接口风险高(误触发不可恢复)、低频、应由用户在原生页面主动操作,不适合 AI agent 自动调用。

判定原则:

  • 不可逆的状态变更:注销账号、删除数据、清空记录等执行后无法撤销的操作,解绑、退订、解散团队、踢出成员、退出等无法恢复的操作

关键词提示清单(命中≠一定敏感,仍需结合语义判断;用于辅助筛选,非穷尽): log_off / 注销 / 销户 / cancel / delete / 删除 / remove / 移除 / unbind / 解绑 / dissolve / 解散 / kick / 踢出

处理方式:识别到敏感接口时,跳过不选,并在功能清单 JSON 里标注 "skipped": "destructive"(附原因)。这些功能由用户在小程序原生页面自己实现,不暴露给 AI agent。若用户明确要求把某个敏感接口做成原子能力,才收集,并在 probe/plan.json 对应 api 项标 "destructive": true + "destructiveReason"

产出物 JSON(字段统一 camelCase):

json
[
  {
    "functionName": "检索商品",
    "pages": ["pages/items/list", "pages/search/index"],
    "sourceApis": ["GET /api/items/search"],
    "suggestedAtomicInterfaces": ["searchItems"],
    "needsComponent": true
  }
]

将清单发给用户二次确认后才能进入阶段 3。


Show full SKILL.md (858 more words)Show less

阶段 3 — 接口与 JSAPI 提取 + 可行性校验

契约:

项内容
入口条件已有用户确认的目标原子能力清单 + 已落盘的 analysis-auth.md
产出物analysis-apis.md(每接口:真实入口 + 请求构造 + 每入参赋值来源 + 鉴权引用 + 响应字段与来源标记)+ 可行性校验结果
下一步所有能力均找到对应实现 → 阶段 4
阻断条件任一能力找不到对应实现 / 依赖链路含插件 → 阻断规则 B

详细匹配模式见 references/ANALYSIS_PATTERNS.md。

3.1 提取范围:仅扫用户已确认能力对应的页面/模块,搜索网络调用(wx.request / wx.cloud.{callFunction,database,callContainer})+ 白名单内 JSAPI(高频列表见"硬性约束 D",完整清单见 references/JSAPI_WHITELIST.md)。

3.2 依赖追踪(读真实源码,逐字复刻):

逐能力先定位承载它的真实交互入口——源码中触发该能力的那段代码(页面生命周期 onLoad/onShow、按钮 / 输入框等事件 handler,或对应业务函数)。该入口实际调用的接口,就是这个能力的唯一标准接口;连同它传入的分支参数(类型 / 模式标志位等)一起逐字复刻。能力与接口一一对应,不在多个名字相近的接口间"挑一个更好实现的"——一切以源码真实入口为准。

每个入参追到真实赋值来源:不止复刻 wx.request 那一行——每个请求字段继续向上追:页面 data ← onLoad/onShow/事件回调 ← JSAPI / wx.getStorageSync / globalData / 用户输入。动态值(定位、设备、登录态等)标注到 analysis-apis.md,阶段 5 生成 ensureXxx()(见 AUTH_MIGRATION.md §4)。来源未追清时禁止用固定值兜底;正常路径 + 失败/缺省分支与主包一致。

定位迁移与鉴权同级:接口入参含坐标/定位时,与鉴权一样不可跳过——追到真实来源、阶段 5 生成 ensureLocation() 实调 wx.getLocation 取真值,禁止硬编码或只读缓存兜底(细则见 AUTH_MIGRATION.md §4)。

按规模分流(防爆上下文)——主 agent 不预先读源码判断接口复杂度

  • 小项目:主 agent 逐接口直读(真实入口 handler → 调用处 → 请求构造)
  • 大项目:每能力派 1 个 subagent ②(api 分析) 深读业务层逻辑(入参来源 / 返回结构 / 跳转链),回传结论摘要。须在 ①(鉴权分析)完成后启动;鉴权事实已由 ① 落盘 analysis-auth.md,② 只引用结论(标行号)、不重复探测鉴权链路

读取预算(坐标直达 / 只读 1 跳依赖 / 单次 ≤ ~5 文件 / 逼近上限回传待确认)与回传纪律(只回 ≤20 行结论摘要、零源码原文)见 references/SUBAGENT_PROTOCOL.md §四。

3.3 鉴权依赖确认:结合 analysis-auth.md,对每个目标接口确认 ① 是否需要登录态 ② token 来源(storage 直读 / 需先登录)③ 登录方式(wx.login + 换 token / 其他)。analysis-apis.md 只填鉴权引用(requiresLogin / signing / dynamicValues / 通用参数 inherit),不重新定义鉴权事实,避免与 analysis-auth.md 漂移。详见 AUTH_MIGRATION.md §2/§5。

3.4 签名 / 可请求性:若接口请求含签名 / 反爬字段(sign / timestamp+nonce / 指纹等),记入 analysis-auth.md 签名清单(id / scope / 触发 / 密钥来源 / 输出字段 / 依赖模块 / 原文片段指针),函数体 verbatim 入逐字代码片段节。不因「更好实现」换接口或简化签名——签名一错全废。可请求性判定:依赖验证码/短信等运行时人机交互 → replicable: false + blockers → 阻断或人工接入。

3.5 插件依赖:依赖链路含 requirePlugin / require('../plugin/') / plugin:// → 阻断规则 B。

3.6 可行性三级校验:

级别识别特征处理
✅ 高置信真实入口唯一确定接口,参数/返回路径清晰直接进阶段 4
⚠️ 中置信参数/返回模糊,或多个并列真实入口补读或问用户
❌ 无置信找不到任何实现阻断 B

中置信询问模板:

以下原子能力在源码中存在多个并列的真实入口,请确认对应哪一个:

能力:<能力名>
入口 1:<页面/事件> 调用 <接口/云函数> — 参数 <x>、返回 <y>(来自 pages/xxx.js 第 N 行)
入口 2:<页面/事件> 调用 <接口/云函数> — 参数 <x>、返回 <y>(来自 pages/yyy.js 第 M 行)

请按你实际想暴露的小程序功能确认对应哪个入口(接口由能力入口唯一确定,不以实现难易为取舍)。

3.7 运行时探测(probe,按需)

默认不跑 probe,静态分析能定的直接定稿。仅两种情况触发:

  1. 值是运行时动态下发:请求中的 URL / header / 签名参数在源码里是运行时拼接(如 baseUrl 由 getApp().globalData 动态返回),静态读不出真实值
  2. 响应结构无法从源码消费点确定:接口返回大量字段但页面只用一部分,且消费点看不出字段层级 / 嵌套结构

命中任一 → 派 subagent ③(probe) 执行整段闭环(写 probe/plan.json → 跑 probe → 回填 analysis-apis.md;须在 ①② 完成后启动。指令与读取边界见 references/SUBAGENT_PROTOCOL.md §3.3;plan 格式、环境要求、result 字段见 references/RUNTIME_PROBE.md):

bash
node scripts/probe.mjs --project <源项目> --plan <plan.json>

每次执行落盘 probe/<run-id>.json,读成功 run 的真实响应回填 analysis-apis.md 对应接口的响应节(probe run 文件由脚本写,不手写)。

  • probe 成功:该 api 的响应节标 sampleSource: probe:<run-id>,apis/<name>.js 顶部注释 [ai-mode:probe] <run-id> 实际响应字段:…
  • probe 没跑或环境不可用:响应节用源码消费点字段,标 sampleSource: static-source,代码顶部注释 [ai-mode:static],交棒时向用户声明未经真机验证
  • 敏感接口不进 plan:注销/删除/解绑等不可逆接口一律不探测(probe-lib.mjs 内置拦截);确需探测时在该 plan 项显式写 "destructive": true + "confirmDestructive": true,且由用户明确要求

阶段 4 — 原子接口设计

契约:

项内容
入口条件阶段 3 完成:analysis-apis.md 已有每个原子接口的请求构造与响应字段(probe 跑过用真实响应,没跑用源码消费点),鉴权引用 analysis-auth.md
产出物① 原子接口清单;② API 依赖图;③ storage key 清单
下一步三份产出物齐全 → 阶段 5

4.1 技能划分:同业务域(商品/订单/地址)原子接口聚合到同一 skill;共享 storage 上下文的接口在同一 skill 内;每 skill 推荐 3-8 个原子接口(更多则按子业务拆分)。

4.2 接口字段:每条接口必含 name(驼峰、全局唯一)/ description(含内部串联操作,帮助小程序 AI 决策)/ inputSchema(仅小程序 AI 需从用户获取的参数;无参用 {"type":"object","properties":{}});按需加 outputSchema(建议填写;接口返回有明确字段结构的 structuredContent 或使用 page-link 时声明,依据 analysis-apis.md 的响应字段)/ _meta.ui.pagePath(按需,接力页 path、不含 query;"执行完停下等用户确认"类接口需配,配合返回值 handoff,详见 D.6)/ _meta.ui.componentPath(仅生成组件时声明,规则见 D.3;声明则同基路径 .js / .json / .wxml / .wxss 文件齐全)。

多模态入参:当接口需要用户上传图片或文件(如 P 图、图像识别、文件解析)时,对应 inputSchema.properties.<field> 加 "format": "image" 或 "format": "file",类型为 string(运行时填本地路径)。小程序 AI 输入框会据此识别为多模态字段、引导用户上传。

文本混排链接(page-link):若某接口返回的数据天然对应小程序页面(商品、订单、门店等),且希望模型在回复正文里内联可点蓝链,在 outputSchema 中把页面路径字段标成 { "type": "string", "format": "page-link", "x-link-text-field": "<同级描述字段名>" },接口 structuredContent 按 schema 返回真实页面路径即可,平台会渲染成 #小程序:名称/描述。字段约束与完整示例见 references/CODE_TEMPLATES.md 第四节。与 handoff 的区别:page-link 只给一个详情入口,handoff 是把整段流程接力进页面——只想要前者时不要返回 handoff。

敏感接口标记:阶段 2 已规定敏感接口默认不收集为原子能力。若因用户明确要求或疏漏导致敏感接口进入阶段 4,必须在 probe/plan.json 对应 api 项写 "destructive": true 和 "destructiveReason": "<一句话原因>"(probe 据此跳过)。判定原则与关键词清单见阶段 2

4.3 进小程序方式(默认 handoff):需接续操作/查看详情的接口,配 _meta.ui.pagePath + 返回 handoff(见 D.6),用户点小程序卡片进接力页。生成原子组件时(规则见 D.3),按返回值类型对照组件模板(详见 references/COMPONENT_TEMPLATES.md):列表/卡片项 → 通用列表;详情/单对象 → 详情卡片;购物车/带数量总价 → 购物车;下单成功/支付结果/操作确认 → 状态结果。

4.4 产出物示例(默认形态:无组件,配 handoff):

json
[{
  "skill": "business",
  "name": "searchItems",
  "title": "检索商品",
  "description": "根据关键词检索商品,返回商品列表",
  "inputSchema": { "type": "object", "properties": {} },
  "outputSchema": { "type": "object", "properties": { "items": { "type": "array" } } },
  "_meta": { "ui": { "pagePath": "/pages/goods/list" } }
}]

API 依赖图(仅在通过 storage 传上下文时必备):

searchProducts ──(storage: skills_shopping_lastSearchResult)──▶ addToCart
              └─(storage: skills_shopping_lastSearchResult)──▶ getProductDetail

storage key 命名统一 skills_{skillName}_{dataName},列表含 key / 写入方 / 读取方 / 数据结构。


阶段 5 — 代码生成

契约:

项内容
入口条件阶段 4 三份产出物齐全;.ai-mode-skills/analysis-auth.md + analysis-apis.md 已落盘——缺则回对应阶段补(analysis-auth→1.2、analysis-apis→3.2)
产出物完整的 skills/{skill-name}/(mcp.json / SKILL.md / index.js / apis/* / utils/* / components/*);每个 apis/<name>.js 经 5.8 字段来源自检
下一步代码生成完成 → 阶段 6
阻断条件产出物缺失 → 停留本阶段补齐

代码模板见 references/CODE_TEMPLATES.md、组件模板见 references/COMPONENT_TEMPLATES.md、设计规范见 references/ATOMIC_COMPONENT_DESIGN.md(最高优先级)、CSS 实现规范见 references/ATOMIC_COMPONENT_CSS.md。

5.1–5.4 组件四个前置(仅生成组件时适用,见 D.3;写任何组件 WXML/WXSS/JS 前按序走完)

生成组件前完整阅读 references/COMPONENT_TEMPLATES.md 和 references/ATOMIC_COMPONENT_DESIGN.md。跳过阅读是导致"接口请求成功但组件不渲染"的常见根因。

编号主题关键要点详见
5.1 设计规范(最高优先级)尺寸/主题/边距/字体/布局/操作区① 5 档宽高比 + 圆角 4px;② 主题色按 §2.1 流程从主包 app.json/app.wxss 抽(浅 + 暗都抽,wxss 顶部注释"色源=…"链路;主包 6 步都查不到才走 §2.3 兜底);③ 边距 屏幕 16 / 卡片 12 / 元素 8·16;④ 字号 17/15/12 三档 + 同一基色 0.9/0.45/0.3 透明度分层;⑤ 主轴上下/左右布局;横向超长可用 <scroll-view scroll-x>,禁纵向滚动、禁 >2 列网格;⑥ ≤3 控件、主动作 ≤1、动宾文案、主按钮居右references/ATOMIC_COMPONENT_DESIGN.md
5.2 源样式提取 + 字段映射7 步工作流与设计规范冲突时以设计规范为准,仅迁移源项目品牌色与字段映射结果。自检:wxss 主色是 #07c160 / #ff4d4f 且源页面未用,或 wxml 出现 item.imageUrl 但源 API 字段是 cover/pic/thumb — 视为"照抄模板",回炉重做references/STYLE_MIGRATION.md
5.3 组件交互行为组件是小程序 AI 的"回合出口",不是"页面入口"每个组件都要同时考虑"展示什么"+"用户下一步做什么"——按 mcp.json.apis[].description + API 依赖图列出下一步,映射到 mcp.json.apis[].name 已存在的接口;不存在则去掉按钮,不上行不存在的 name。每个可交互元素绑 bindtap + hover-class,关键实体用 data-* 携带references/COMPONENT_TEMPLATES.md "上行消息"节
5.4 组件 JS 骨架(数据接入)数据只能经 NotificationType.Result 下发禁止 properties / dataSource / observers;按 COMPONENT_TEMPLATES.md 骨架在 created 里绑定 Result 与 Overflow,并打印 [ai-mode] {componentName} overflow monitor=onreferences/COMPONENT_TEMPLATES.md "组件 JS 骨架"节 + "溢出处理模板"节

tap handler 的 content 形态(优先形态 2:text + api/call 组合)、name / arguments 对齐规则、日志要求与禁用项,见 references/COMPONENT_TEMPLATES.md "上行消息"节。

5.5 目录结构
{项目根目录}/
├── app.json                              # 含 agent.skills 注册
└── skills/                               # 独立分包(多 skill 共用)
    ├── _shared/                          # 可选:≥2 个 skill 共用的工具函数才放这里
    └── {skill-name}/
        ├── mcp.json                      # 原子接口 Schema 定义
        ├── SKILL.md                      # skill 路由说明
        ├── index.js                      # 接口注册入口
        ├── apis/                         # 原子接口实现(推荐目录;validator 兼容 tools/services/、tools/)
        ├── utils/                        # 工具模块(目录名不限,常见 utils/services/helpers)
        └── components/{component-name}/  # 默认组件目录;实际组件文件由 mcp.json 的相对 componentPath 决定

目录分层:跨 skill 禁止 require('../../{otherSkill}/...');多 skill 复用走 skills/_shared/(不在 mcp.json 注册、不调 registerAPI)。

5.6 鉴权代码生成

按 AUTH_MIGRATION.md §5/§6 生成 utils/request.js + index.js;模板见 CODE_TEMPLATES.md。生成后过 AUTH_MIGRATION §6 自检清单(逐条)。

5.7 mcp.json + 技能自身 SKILL.md + 返回值 + 日志
  • mcp.json:顶层 { "apis": [...] },每项必含 name / description / inputSchema;outputSchema 可选,建议填写,接口返回有明确字段结构的 structuredContent 或使用 page-link 时应声明。进小程序的接口按需加 _meta.ui.pagePath(配合返回值 handoff);_meta.ui.componentPath 与 components[] 仅生成组件时才有(components[] 的 relatedPage 必填、实时动态能力按需,详见 D.3)。体积上限见 references/CODE_TEMPLATES.md 6.3(计算时会去掉所有 outputSchema)。完整字段示例见 references/CODE_TEMPLATES.md 第四节
  • 技能自身 SKILL.md(文件名严格全大写)是业务编排与路由说明,按 5 节顺序:能力域定位 → 触发场景(用户原话 few-shot)→ 不适用范围 → 前置条件 → 使用顺序。使用顺序可写业务流程、已注册方法名、前置条件、上下游依赖和跨接口规则;方法名必须与 mcp.json.apis[].name 逐字一致。通篇不写:inputSchema / outputSchema / 参数表 / 返回值表 / componentPath / storage key / 实现细节 / 安装 CLI 运维。体积上限见 references/CODE_TEMPLATES.md 6.3,且只支持单文件、不能引用其它 md。完整模板见 references/CODE_TEMPLATES.md 第五节
  • 返回值格式:{ isError?, content: [{type:'text', text}], structuredContent?, _meta?, handoff?, apiCalls? }——content 给 LLM 文本,structuredContent 有 outputSchema 时须与之对齐,_meta 对 LLM 不可见可传 UI 组件;handoff(进小程序按需)为 { query?, payload?, path? },承接卡片点击进接力页,详见 D.6。content / structuredContent / _meta 体积上限见 references/CODE_TEMPLATES.md 6.3
  • apiCalls(按需,流程固定时用):返回值顶层加 apiCalls: [{ name, arguments }] 可显式指定下一步要调的原子接口,省掉模型推理这一跳、链路更快。典型场景:接口内发现未登录 → 返回 apiCalls: [{ name: 'login', arguments: {} }]。name 必须是当前 skill mcp.json.apis[] 中已声明的接口,arguments 与其 inputSchema 对齐。只在源业务流程本来就固定衔接时才写,开放式场景仍交给模型判断
  • 日志规范:原子接口打 入口 / 入参 / 请求前后 / 出口 / catch;原子组件打 created/attached / 收到 Result / setData / NotificationType.Overflow(用于校验裁剪)。统一前缀 [ai-mode]。真机失败时靠这些节点定位问题,日志要打全
5.8 字段忠实自检

每写完一个 apis/<name>.js,就地核对其 structuredContent 字段集:该 api 在 analysis-apis.md 有 probe 真实响应的,与真实响应字段比对;没有的,与源码页面实际消费的字段比对。生成一个查一个,不攒到收尾。

  • 字段一致 → 通过,继续下一个
  • 缺少/多出字段 → 代码臆造,以记录为准修正 structuredContent;已声明 outputSchema 时同步修正该 schema

阶段 6 — 配置集成

契约:

项内容
入口条件阶段 5 生成完整 skills/{skill-name}/
产出物app.json 含 agent.skills + subPackages;project.config.json 的 packOptions.include 含 skills
下一步两份配置均已更新 → 交棒 wxa-skills-validate
阻断条件未更新配置直接交棒 → 必定失败,停留本阶段
产物校验交棒前必须确认以下文件存在:skills/{skill-name}/mcp.json + skills/{skill-name}/index.js + 每个 apis/*.js + utils/request.js(或 utils/util.js);app.json 的 agent.skills[] 含本 skill 条目且 subPackages 含 skills 独立分包;project.config.json 的 packOptions.include 含 skills。缺任一 → 回阶段 5 补

配置格式见 references/CODE_TEMPLATES.md 第六节。关键要点:

  • 多 skill 共用同一个 skills 独立分包——新增 skill 只在 agent.skills[] 里追加 { name, description, path },不为每个 skill 加一条 subPackages 条目。注意反过来不成立:一个 SKILL 不能跨分包
  • handoff(按需):若有接口配了 _meta.ui.pagePath 并返回 handoff,在主包 app.js 的 onLaunch 内注册 wx.onAgentHandoff(详见 D.6 与 references/CODE_TEMPLATES.md "handoff 接力页" 节)
6.1 全局提示词 AGENTS.md(按需)

多个 skill 共存、或需要交代整体服务范围 / 背景知识 / 回答风格时,写一个 AGENTS.md 并在 app.json 用 agent.instruction 指向它(相对项目根的路径)。内容定位是"跨 skill 的全局说明"——服务边界、各 skill 之间的关系与选择依据;单个 skill 内部的路由说明仍写在该 skill 自己的 SKILL.md 里,不要重复。模板与上限见 references/CODE_TEMPLATES.md 6.1 节。

6.2 小程序服务直达 page-meta.json(按需)

当用户意图没有对应的原子接口、只能引导进小程序页面时,配 agent.pageMetadata 指向 page-meta.json,平台会据此回复"账号卡片"(场景值 1435 / 1436)。条目字段、上限与模板见 references/CODE_TEMPLATES.md 6.2 节。

6.3 体积与数量上限(生成完自查)

上限表见 references/CODE_TEMPLATES.md 6.3 节。超限会在预览 / 上传时被平台拒绝。


收尾 — 交棒给 wxa-skills-validate

阶段 6 完成后,在回复中明确告知用户:

代码生成与配置集成已完成。下一步请使用 `wxa-skills-validate` skill 对产物进行校验与真机验证:

- skills 路径:<abs-path>/skills
- project-path:<abs-path>(含 project.config.json 的 appid 为 <appid>)

wxa-skills-validate 会依次执行:静态校验 → cli agent tool execute → cli agent render → 交付文档。

仅输出代码不算完成——在对话中显式提示用户切换到校验 skill 后本 skill 才算结束。

建议:复杂项目上,交棒后的 wxa-skills-validate 全流程可派 subagent 执行(独立上下文窗口,避免校验过程挤占主上下文)。

© wechat-miniprogram, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 13 other files (scripts, references) in wxa-skills-generate of wechat-miniprogram/ai-mode-skills.

  • SKILL.md
  • references/ANALYSIS_PATTERNS.md
  • references/ATOMIC_COMPONENT_CSS.md
  • references/ATOMIC_COMPONENT_DESIGN.md
  • references/AUTH_MIGRATION.md
  • references/CODE_TEMPLATES.md
  • references/COMPONENT_TEMPLATES.md
  • references/HALF_SCREEN.md
  • references/JSAPI_WHITELIST.md
  • references/RUNTIME_PROBE.md
  • references/STYLE_MIGRATION.md
  • references/SUBAGENT_PROTOCOL.md
  • scripts/probe-lib.mjs
  • scripts/probe.mjs

Open the folder on GitHubat commit 9bd1f25

Compare with similar skills

Wxa Skills Generate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wxa Skills Generate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wxa Skills Generate this skillwechat-miniprogram/ai-mode-skills208—~8kAutomated safety check: PassMIT
Wechat To Mdbzd6661/wechat-article-for-ai101—~654Automated safety check: PassNone
Wechat DevtoolsWaterTian/wechat-devtools-mcp151—~3.5kAutomated safety check: PassMIT
Minimal Web Baas DemoTencentCloudBase/CloudBase-AI-Toolkit1.1k1 repos~2.2kAutomated safety check: PassMIT
Wechat Publisherwpsnote/wpsnote-skills179—~2.6kAutomated safety check: PassNone
Md2wechatgeekjourneyx/md2wechat-skill3.7k—~3.8kAutomated safety check: PassCustom licence

Similar skills

  • Wechat To Md

    bzd6661/wechat-article-for-ai

    Convert WeChat Official Account (微信公众号) articles to clean Markdown files with locally downloaded images.

    101 GitHub stars~654 tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Wechat Devtools

    WaterTian/wechat-devtools-mcp

    微信开发者工具 MCP —— 小程序构建、预览、调试与自动化测试

    151 GitHub stars~3.5k tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • Minimal Web Baas Demo

    TencentCloudBase/CloudBase-AI-Toolkit

    Fast path for a minimal CloudBase Web + database demo (最小前后端 / 最小可用 fullstack / Lovable-like BaaS).

    1.1k GitHub starsUsed in 1 repo~2.2k tokens
    Productivity & AutomationAuto-check passed
  • Wechat Publisher

    wpsnote/wpsnote-skills

    【公众号发布助手】将 WPS 笔记排版并导出为微信公众号 HTML. An agent skill from wpsnote/wpsnote-skills.

    179 GitHub stars~2.6k tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Md2wechat

    geekjourneyx/md2wechat-skill

    Convert Markdown to WeChat Official Account HTML. An agent skill from geekjourneyx/md2wechat-skill.

    3.7k GitHub stars~3.8k tokensUpdated 15 days ago
    Media & CreativeAuto-check passed
  • Linkdigest Social Link Reader

    sickn33/agentic-awesome-skills

    Read one public Xiaohongshu, Douyin, TikTok, YouTube, X or WeChat article link into text an agent can use (transcript, image text, key points) via the LinkDigest API or MCP server.

    47k GitHub stars~3.4k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from wechat-miniprogram/ai-mode-skills

  • Wxa Skills Validate

    wechat-miniprogram/ai-mode-skills

    校验和修复小程序 AI SKILLs 产物。在以下场景触发:对 skills/ 目录做静态校验、跑通原子接口、验证原子组件渲染、修复校验报错、输出交付文档。依托微信开发者工具进行真机验证。

    208 GitHub stars~7.4k tokensUpdated 29 days ago
    Auto-check passed

Questions about Wxa Skills Generate

What does Wxa Skills Generate do?

分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI…. Wxa Skills Generate is an agent skill from wechat-miniprogram/ai-mode-skills.

When should I use Wxa Skills Generate?

Wxa Skills Generate fits situations like: productivity & Automation work in your project.

How do I install Wxa Skills Generate in Claude Code?

Run `npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-generate -a claude-code`. Or copy the skill folder (wxa-skills-generate in wechat-miniprogram/ai-mode-skills) into .claude/skills/wxa-skills-generate in your project. Claude Code loads it when a task matches its description.

How do I install Wxa Skills Generate in Codex?

Run `npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-generate -a codex`. Or copy the skill folder (wxa-skills-generate in wechat-miniprogram/ai-mode-skills) into .agents/skills/wxa-skills-generate in your project. Codex loads it when a task matches its description.

Can I use Wxa Skills Generate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-generate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wxa-skills-generate, .gemini/skills/wxa-skills-generate, .github/skills/wxa-skills-generate and .opencode/skills/wxa-skills-generate in your project.

What does Wxa Skills Generate need to run?

Going by SKILL.md and its folder, Wxa Skills Generate needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.

Does Wxa Skills Generate access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Wxa Skills Generate safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Wxa Skills Generate use?

Wxa Skills Generate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wxa Skills Generate use?

About 8k tokens (SKILL.md is roughly 32k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 39k tokens, read only when the agent opens those files.

What are the alternatives to Wxa Skills Generate?

Skills that share tags, products or a category with Wxa Skills Generate: Wechat To Md (bzd6661/wechat-article-for-ai, 101 stars), Wechat Devtools (WaterTian/wechat-devtools-mcp, 151 stars), Minimal Web Baas Demo (TencentCloudBase/CloudBase-AI-Toolkit, 1.1k stars) and Wechat Publisher (wpsnote/wpsnote-skills, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wxa Skills Generate?

wechat-miniprogram (a GitHub organization) maintains it in wechat-miniprogram/ai-mode-skills, which has 208 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 10, 2026.

Source: wechat-miniprogram/ai-mode-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.