Site Architecture
AvdLee/RocketSimApp
When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking.
校验和修复小程序 AI SKILLs 产物。在以下场景触发:对 skills/ 目录做静态校验、跑通原子接口、验证原子组件渲染、修复校验报错、输出交付文档。依托微信开发者工具进行真机验证。
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-validate .claude/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.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/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .claude/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/wxa-skills-validate .agents/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .agents/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/wxa-skills-validate .cursor/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .cursor/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/wechat-miniprogram/ai-mode-skills.git --path wxa-skills-validate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/wxa-skills-validate .gemini/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .gemini/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/wxa-skills-validate .github/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .github/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install wechat-miniprogram/ai-mode-skills wxa-skills-validate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wechat-miniprogram/ai-mode-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/wxa-skills-validate .opencode/skills/wxa-skills-validate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "wxa-skills-validate" agent skill from https://github.com/wechat-miniprogram/ai-mode-skills/tree/master/wxa-skills-validate into .opencode/skills/wxa-skills-validate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wxa-skills-validate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
wxa-skills-validate校验和修复小程序 AI SKILLs 产物。在以下场景触发:对 skills/ 目录做静态校验、跑通原子接口、验证原子组件渲染、修复校验报错、输出交付文档。依托微信开发者工具进行真机验证。
Wxa Skills Validate is an agent skill from wechat-miniprogram/ai-mode-skills. 校验和修复小程序 AI SKILLs 产物。在以下场景触发:对 skills/ 目录做静态校验、跑通原子接口、验证原子组件渲染、修复校验报错、输出交付文档。依托微信开发者工具进行真机验证。
Its SKILL.md is about 7.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `references/CLI_AGENT_REFERENCE.md`, `references/DELIVERY_TEMPLATE.md` and `references/VALIDATE_RULES.md`).
It works with macOS. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9bd1f25. It shows what the files ask for, not the result of running them.
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.
Ships 4 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Wxa Skills Validate loads about 7.4k tokens when it runs, and up to ~21k if it reads all its reference files. Until then it costs about 29 tokens; SKILL.md has 2,178 words of instructions outside code blocks.
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.
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.
The full file from wechat-miniprogram/ai-mode-skills at commit 9bd1f25, republished under its MIT licence (© wechat-miniprogram). 2,178 words, ~7,412 tokens.
.claude/skills/wxa-skills-validate/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.对小程序 AI SKILLs 产物执行"静态校验 → 原子接口执行 → 原子组件渲染 → 交付文档"的闭环校验,并在每一步失败时按错误类型分类就地修复 skill 源文件。
scripts/*.mjs 用到 node:crypto / 原生 fetch)<DEVTOOLS_APP_PATH>/Contents/MacOS/cli -h(macOS 默认 <DEVTOOLS_APP_PATH>=/Applications/wechatwebdevtools.app)project.config.json 含 appid;app.json 含 agent.skills;每个 skill 目录含 mcp.json + SKILL.md运行过程中开发者工具可能弹授权窗,需手动授权;未授权会导致原子接口执行失败。
出现下列任一情况时启动本技能:
| 项 | 说明 | 缺失时动作 |
|---|---|---|
<project-path> | 小程序项目根目录(含 project.config.json + app.json;app.json 的 agent.skills[].path 指向 skill 分包) | 向用户询问 |
<DEVTOOLS_APP_PATH> | 微信开发者工具应用路径 | macOS 默认 /Applications/wechatwebdevtools.app,用户可覆盖 |
<AUTO_PORT> | auto WebSocket 端口 | 默认 9420 |
注:
<skills-path>已不再作为入参,脚本自动从app.json发现分包。
进入"步骤 4:真机闭环"时必须先读 references/CLI_AGENT_REFERENCE.md,内含脚本用法、产物结构、读产物后的下一步动作、5 项核对对照表、失败回溯流程。
| 文件 | 用途 | 加载时机 |
|---|---|---|
references/CLI_AGENT_REFERENCE.md | CLI agent 命令参考 | 步骤 4 执行前 |
references/VALIDATE_RULES.md | validate.mjs 内置的 V001~V021 规则详解 | 出现校验报错需定位 id 时 |
references/DELIVERY_TEMPLATE.md | DELIVERY.md 交付模板 | 最终交付时 |
<project-path> 下 app.json 发现的每个 skill 分包,其 mcp.json 声明的所有原子接口必须跑通 execute(status === "ok" 且 invokeResult.isError !== true)。例外:敏感接口不真实执行——命中敏感关键词的接口由 V019 落盘 cli-agent-run/destructive-manifest.json,execute.mjs 读该 manifest 拦截(--confirm-destructive 放行)——只做静态校验,验收时视为「已跳过执行」而非未通过,需在报告标注 skipped_destructive。_meta.ui.componentPath 的原子接口,必须跑通 render 且通过 5 项核对(见 references/CLI_AGENT_REFERENCE.md 第 2.3 节)。DELIVERY.md(见「不可修复类」与「终止条件 4」)。阶段 1 — 静态校验 + 编译校验
- [ ] 运行 `node validate.mjs <project-path>`(单参数,脚本自动发现 skill 分包并决定是否跑 preview)
- [ ] summary.errors === 0(含 V001~V021),否则按 T1~T9 分类修复后重跑
- [ ] summary.buildStatus === "pass"(静态 0 error 时 preview 会自动运行;
若为 "skipped" 说明静态未过,先按上一项修复)
- [ ] 阅读 Build 行:若 stage=compile + FAIL,说明有语法/编译错误,必须修复
阶段 2 — 准备
- [ ] 确认 CLI 可执行:<DEVTOOLS_APP_PATH>/Contents/MacOS/cli -h
- [ ] (可选)显式启动 cli auto
阶段 3 — 构建执行计划
- [ ] 解析每个 <skill>/mcp.json 的 apis[],按书写顺序 + 参数依赖做拓扑排序
- [ ] 建立"已知数据池"(空)
阶段 4 — execute 与 render(可独立执行)
对每个 {name}:
- [ ] execute 成功(status=ok 且 !isError)
- [ ] 若 mcp.json 有 _meta.ui.componentPath,render 可在任何时间点执行(不要求紧跟 execute)
- [ ] render 通过 --from-execute 复用最新的 execute 产物(args 取自 invokeResult.structuredContent);
structuredContent 缺失时必须先重跑 execute
- [ ] 5 项核对全部通过(主要依据:`consoleMessages.snapshotCard` 中的生命周期日志 + `[ai-mode] ... overflow monitor=on` 基线日志 + 不出现 `overflowed=true`;仅在具备图像读取能力时再辅助读截图)
阶段 5 — 交付
- [ ] 写 ./cli-agent-run/report.md
- [ ] 若全部通过,按 references/DELIVERY_TEMPLATE.md 写 ./DELIVERY.md 并回贴内容在 <project-path> 同级建 ./cli-agent-run/ 统一存放产物:
cli-agent-run/
├── validate-report.json # 阶段 1 产物
├── execute-result.<apiName>.json # 阶段 4 execute 产物(含 invokeResult.structuredContent 供 render 继承)
├── render-result.<apiName>.json # 阶段 4 render 产物(snapshot 摘要 + consoleMessages + elementTree)
├── render-result.<apiName>.snapshot.png # 阶段 4 render 截图
├── execute-trace.json # 每次尝试的回溯日志
└── report.md # 阶段 5 执行报告
项目根目录/
└── DELIVERY.md # 全部通过时的最终交付文档同一接口重跑时必须复用 --output(文件会被覆盖);不同接口必须用不同文件名。
运行:
node <skill-dir>/scripts/validate.mjs <miniprogram-project-path>入参只需要一个——小程序项目根目录(含 project.config.json + app.json)。脚本自动:
app.json 的 agent.skills[].path 发现 skill 分包(没配置时回退到顶层 metaServicePkg/ 或 skills/)cli-agent-run/ 写入 project.config.json 的 packOptions.ignore(打包忽略)和 watchOptions.ignore(监听忽略),避免开发者工具持续监听产物变更触发循环编译(已存在不会重复追加;产物落盘前完成同步,结果挂在报告 ignoreSync 字段)errors === 0)后自动调用 cli preview 做编译校验;有 error 则跳过 preview<project>/cli-agent-run/validate-report.json(可用 --output 覆盖)可选参数:--rules <自定义规则 json> / --cli-path <CLI 路径> / --build-timeout <ms> / --output <path>。
退出码:0 通过;1 存在 error 或 build 失败;2 运行异常。
通过判据:
summary.errors === 0(warning 允许带着进入阶段 2)summary.buildStatus === "pass"(静态 0 error 后会自动触发 build;"skipped" 意味着静态未过,先按修复决策表修复)stage=compile + FAIL 说明有语法/编译错,必须修复Build 编译报错时:优先检查集成配置,再动源码。对照 wxa-skills-generate SKILL.md 的"阶段 6 — 配置集成"与 references/CODE_TEMPLATES.md 的"六、app.json + project.config.json 配置"核对 app.json(agent.skills / subPackages)与 project.config.json(appid / packOptions.include)。集成无误后才按日志改源码,禁止用注释/删除源码的方式绕过集成问题。
CLI 未找到时的处理:若输出 Build: SKIPPED - 跳过:未找到微信开发者工具 CLI,说明脚本未能自动定位到 cli。自动探测顺序为:--cli-path > 环境变量 WECHAT_DEVTOOLS_CLI / WXA_CLI > macOS /Applications/wechatwebdevtools.app/Contents/MacOS/cli > 同路径的用户目录变体 > Windows C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat。此时应主动向用户询问微信开发者工具的安装路径,然后:
node validate.mjs <project-path> --cli-path <用户提供的绝对 cli 路径>export WECHAT_DEVTOOLS_CLI=<绝对路径> 后重跑CLI 缺失不影响静态规则的输出,只会让 build 阶段被 skip。
执行顺序(脚本内部闭环):
project.config.json 的 packOptions.ignore + watchOptions.ignore(追加 cli-agent-run/)skipped(节省 preview 成本);0 error → 调 cli previewupload 阶段视为编译通过;即便上传失败(服务端校验、网络等),也不标记 build 失败失败时的修复决策表(读完 validate-report.json 中 results[].id / message / fix 后匹配):
| 错误类型 | 识别特征 | 修复范围 | 动作 |
|---|---|---|---|
| T1 命名拼写 | 字段大小写/拼写错 | 单文件单行 | 直接改 |
| T2 Schema 不一致 | structuredContent 与 outputSchema.properties 字段不匹配(V009) | apis/{name}.js + mcp.json | 对齐字段 |
| T3 组件绑定不一致 | WXML {{}} 与 setData 字段对不上(V011) | components/{x}/index.{js,wxml} | 对齐绑定 |
| T4 组件取值路径错 | result.structuredContent.xxx 与接口返回字段不符(V010) | components/{x}/index.js | 修访问路径 |
| T5 合规性违规 | 非白名单 WXML 标签 / 事件 / 图片格式 / CSS 属性(V003/V005/V006) | 单文件改写 | 用白名单实现替换:collapsible-view 是允许的;transition / animation / overflow / -webkit-line-clamp 一律删除(改 -wx-line-clamp);非 tap 事件删除 |
| T6 注册缺失 | mcp.json 的 name 在 index.js 未 registerAPI,或反之(V007/V008) | index.js | 补/删注册 |
| T7 依赖链路问题 | storage key 写入方/读取方对不上 | 跨接口 + utils/util.js | 跨文件调整 |
| T8 原子接口粒度错 | 接口职责重叠 | mcp.json + index.js + apis/*.js | 拆分/合并 apis[] |
| T-mcp-size | mcp.json 去除 outputSchema 后超过 24000 字符(V013;后台也会拒绝) | mcp.json 的 description/title/inputSchema;或重划 skill 分包 | 压缩描述文字;接口多到难以精简时按职责拆分为多个 skill 分包,不要把示例/枚举硬塞进 outputSchema |
| T-auth 鉴权缺失 | 401 / unauthorized / token 无效 等(静态阶段通常由 V007/V008 连带触发) | utils/util.js / apis/{name}.js | 读主包还原登录流程 |
| T-wx-jsapi 非白名单 | 运行时 wx.<xxx> is not a function / wx.<ns> 为 undefined | apis/{name}.js / components/{x}/index.js | 对照 wxa-skills-generate SKILL.md D.1/D.2 白名单(完整清单见 wxa-skills-generate/references/JSAPI_WHITELIST.md),按 D.7 替换或改网络请求;无替代标 T9(详见阶段 4 C 类) |
| T-build 编译失败 | Build 行显示 FAIL 且 stage=compile | 项目集成 / .js / .wxml / .wxss | 先对照 wxa-skills-generate SKILL.md 阶段 6 "配置集成" 核对 app.json / project.config.json,集成无误后再按日志修源码 |
| T-skill-description | app.json 的 agent.skills[].description 缺失或为空(V016) | app.json | 在该条目中补充非空的 description 字段 |
| T-handoff | 接力页 _meta.ui.pagePath 格式错/页面不存在/带 query,或声明了 pagePath 却未返回 handoff(V017) | mcp.json + apis/{name}.js | pagePath 以 / 开头、不含 query、页面真实存在;返回值顶层补 handoff: { query, payload? }(详见 wxa-skills-generate SKILL.md D.6) |
| T-handoff-query | handoff.query 的参数名与接力页 onLoad 读取的参数名不匹配(V018) | apis/{name}.js | 读接力页 <pagePath>.js 的 onLoad(param) 确认其读取的 param.xxx 名称,将 handoff.query 的参数名改为页面实际读取的名称 |
| T-destructive | 接口命中敏感关键词,V019 待模型判断(V019,destructive:null) | cli-agent-run/destructive-manifest.json | 编辑 manifest 填 destructive=true+destructiveReason(真敏感)或 false+destructiveReason(误判如只读查询) |
| T-relatedPage | 组件未在 components[] 声明,或 relatedPage 缺失 / 缺前导 / / 页面不存在(V015) | mcp.json + components/{x}/index.js | 在 components[] 补 { path, relatedPage }(path 与接口 _meta.ui.componentPath 严格相等,relatedPage 以 / 开头且页面真实存在,无对应业务页时填首页);运行时在收到 Result 后调 setRelatedPage({ query }) |
| T-limits | SKILL.md / AGENTS.md / page-meta.json 超字节上限,或 SKILL 数超 30(V020) | 对应文件 / app.json | 精简内容(SKILL.md 只留 5 节结构,接口契约回 mcp.json);SKILL 过多时合并职责相近的 |
| T-dynamic | 静态原子组件或其相对 JavaScript 依赖里用了 wx.login / wx.checkSession / wx.request / setTimeout / setInterval,或任意组件代码路径用了云开发(V021) | <componentPath>.js、其相对 JavaScript 依赖或 mcp.json | 静态组件确有实时需求才在 components[] 该条目加 permissions["scope.dynamic"];云开发一律移到原子接口并经 NotificationType.Result 下发数据 |
| T9 能力无法实现 | 所有候选都违反硬约束 | — | ⛔ 终止,告知用户 |
V001~V021 规则详情见 references/VALIDATE_RULES.md。
判别口诀:文件内能改完 → T1~T6;需改 storage 清单或接口划分 → T7/T8;连修复方案都违规 → T9。
迭代规则:
| 情况 | 动作 |
|---|---|
summary.errors === 0 | ✅ 进入阶段 2 |
| errors 数较上一轮减少 | 继续修复,重跑 |
| 连续 3 轮相同 finding id | 升级为 T7/T8 跨文件调整 |
| 累计 5 轮仍未通过 | ⛔ 终止,请求人工介入 |
agent 命令确认 CLI 可执行:
<DEVTOOLS_APP_PATH>/Contents/MacOS/cli -h失败则告知用户 "确认微信开发者工具已安装" 后停止,不要强行绕过。
(推荐)先 open 预热再 auto(约 10s,大项目可延长),减少 websocket 超时:
<DEVTOOLS_APP_PATH>/Contents/MacOS/cli open --project <PROJECT_PATH>
<DEVTOOLS_APP_PATH>/Contents/MacOS/cli auto \
--project <PROJECT_PATH> --auto-port <AUTO_PORT> --trust-project跳过此步时脚本会自动拉起 auto;遇超时或 agent compile mode is disabled 时按「不可修复类 / 工具不稳定」处理。
读取 <project-path> 下 app.json 发现的每个 skill 分包的 mcp.json(validate-report.json 中的 skillDirs 字段给出了具体分包路径):
cli-agent-run/destructive-manifest.json(destructive:null 待判断),报 error 阻断 build。模型逐个判断后编辑 manifest 填 destructive:true(真敏感,execute 跳过)或 false(误判,execute 放行)+ destructiveReason,重跑 validate 至 V019 pass。execute.mjs 读 manifest:true 拦截 / false 放行 / null 拦截(待判断)/ 不在 manifest 放行。生成侧阶段 2 已规定敏感接口默认不收集;V019 是兜底,catch 漏网的敏感接口名。apis[] 的 name / description / inputSchema / outputSchema / _meta.ui.componentPath。inputSchema.properties 为空或无 required)→ 最先执行description 或 inputSchema 含 "需要先调用 X" 类表述时,将 X 前置structuredContent 存入池中,供下游参数引用。structuredContent 的同义字段),池中没有才考虑用户指定或默认值——禁止在有数据池可用时直接用默认值测试有参接口。术语澄清:execute 是校验阶段名(本阶段),用 CLI agent tool 调用 skills 分包的注册接口;不要与 probe 混淆——probe 是 generate 阶段 3.7 用 automator 在源项目上抓请求响应。两者工具不同(CLI agent vs automator)、对象不同(skills 分包 vs 源项目)、阶段不同(校验 vs 生成)。
execute 和 render 是两个独立可重入的命令:
execute 调用原子接口,产出业务数据(invokeResult.structuredContent)。render 通过 --from-execute 把 execute 的 invokeResult.structuredContent 作为渲染数据源喂给组件;
也可以 --name + --args 独立指定。CLI 内部每次 render 会自动生成一次性 toolCallId / sessionId,
不依赖 execute 的运行时上下文。执行灵活度:
--args 显式指定 > --from-execute 读到的 invokeResult.structuredContent硬约束(仅保留真正必要的):
cli-agent-run/destructive-manifest.json(V019 初筛+模型判断),destructive=true 拦截 / false 放行 / null 拦截(待判断,安全第一)/ 接口不在 manifest 放行;manifest 不存在时回退关键词判定。execute.mjs 未带 --confirm-destructive 时对判定的敏感接口直接拒绝(退出码 3、不落盘)。全量 execute / loop 排查中必须跳过这些接口(只做阶段 1 静态校验),报告标 skipped_destructive。严禁批量放行。仅当用户明确要求执行某个具体敏感接口时,才带 --confirm-destructive 单独执行,且执行前应向用户说明后果。structuredContent 入数据池后,有参接口再从池中取参数值 execute。禁止在有数据池可用时直接用默认值测试有参接口apis[] 顺序依赖关系准备好入参(下游接口的 args 若依赖上游 structuredContent,仍需先 execute 上游)componentPath 的接口最终都要 render 通过;完整通过的判据仍然是"execute 成功 + render 5 项核对通过"render.mjs 不能并发执行(CLI 后台 auto 是串行的)--from-execute 的 execute 产物必须含 invokeResult.structuredContent;若缺失,render.mjs 会直接报错,需先重新 execute 成功后再 render运行:
node <skill-dir>/scripts/execute.mjs \
--project <PROJECT_PATH> \
--name <name> \
[--args '{"query":"..."}'] \
[--auto-port <AUTO_PORT>] \
[--skill <skill-name-or-path>] \
[--timeout <ms>] \
--output ./cli-agent-run/execute-result.<name>.jsonexecute.mjs 只接受 上述参数;toolCallId / sessionId / auto 相关票据由 CLI 内部自动处理,脚本不再暴露。
入参来源优先级:
structuredContent 的同义字段)——有参接口必须先尝试从已成功执行的无参/上游接口的 structuredContent 中提取参数值,而非直接用默认值。例:getOrderDetail 需要 orderId → 先跑 listOrders(无参),从其 structuredContent.orders[0].id 取 orderIdinputSchema 允许为空 → 省略 --args""、number 0、array []、object {}),日志标注"使用默认值"——仅当数据池无对应字段且用户未指定时才用成功判据:status === "ok" 且 invokeResult.isError !== true 且 invokeResult.structuredContent 为非空对象
(后者是 render --from-execute 的前置条件)。
空结果排查(success 但 structuredContent 业务数据为空):isError !== true 但返回的 structuredContent 是空列表 / 空对象 / total: 0 / 只有 error 字段时,不能直接判通过——这通常是请求参数错误、鉴权未生效、URL 拼错或响应拆包路径错的症状,而非业务上真的无数据。按以下顺序排查:
[ai-mode] 日志:确认请求实际发出的 URL / 参数 / header 是否正确(入口日志 → 请求前日志 → 请求后日志)apis/<name>.js 实际发出的请求:URL / method / 参数名 / 鉴权头是否一致?不一致 → 回 apis/<name>.js 或 utils/request.js 修正apis/<name>.js 入口是否补齐 await ensureLogin() 等 → 鉴权缺失会导致后端返回空而非报错execute 失败:先检查产物 _meta.diagnosis 是否为不可修复类(若是则立即停止),否则按下方"阶段 4 失败分类"的 A/B/C/D 类处理。
_meta.ui.componentPath 时执行)只要给对的 name + args(渲染数据源)就能渲染。CLI 的 render 不会重新执行原子接口,而是把 --args
作为 structuredContent 直接喂给组件渲染;--from-execute 只是一个语法糖,用来把 execute 产物里的
invokeResult.structuredContent 直接喂给 render。
推荐运行方式(从 execute 产物继承 name / args,args 来源为 invokeResult.structuredContent):
node <skill-dir>/scripts/render.mjs \
--project <PROJECT_PATH> \
--from-execute ./cli-agent-run/execute-result.<name>.json \
[--timeout 90000] \
--output ./cli-agent-run/render-result.<name>.json若 execute 产物缺
invokeResult.structuredContent,脚本会直接 exit 2 报错—— 此时必须先重跑 execute 并确认status=ok+invokeResult.isError!==true+structuredContent为非空对象。
独立指定上下文(没有 execute 产物,或需要手动指定 args):
node <skill-dir>/scripts/render.mjs \
--project <PROJECT_PATH> \
--name <tool-name> \
--args '{"<字段>":"..."}' \
[--timeout 90000] \
--output ./cli-agent-run/render-result.<name>.jsonrender.mjs 自动从 --from-execute 继承 name / args;任一字段被 --name / --args
等显式参数提供时以显式值为准。CLI 下发的参数仅限 --project / --name / --args / --output / --trust-project
(及必要时的 --timeout),其它上下文由 CLI 内部自动生成,无需也无法从脚本显式传入。
render cold start 通常比 execute 慢(需要创建 container + 渲染组件),首次调用或 CI 环境建议
--timeout 90000。 详细参数、产物结构、读产物后下一步动作见references/CLI_AGENT_REFERENCE.md第 2 节。
必须读取的产物(仅靠 render.mjs 退出码 0 不足以判通过):
render-result.<name>.json 的 consoleMessages.snapshotCard。必看:[ai-mode] ... created → [ai-mode] ... 收到接口返回 → [ai-mode] ... setData 三条生命周期日志(缺任何一条 → 组件初始化或 Result 监听有问题)[ai-mode] <component> overflow monitor=on(基线日志,必存在):组件已绑定 NotificationType.Overflow 监听。缺失 → 视为未接入监听,回 wxa-skill-generate 的组件 JS 骨架补齐[ai-mode] <component> overflow overflowed=true data=<JSON>(或 data.overflowHeight > 0):有裁剪,核对 ③ 不通过。只要出现一次就判失败;只有 monitor=on、没有 overflowed=true 记录则视为未裁剪通过ERROR 级日志基本意味着业务组件初始化失败,截图会是空白elementTree(辅助核对,原样透传):render-result.<name>.json 的 elementTree 完全由 CLI render
返回,是一段缩进格式的字符串(非 JSON 对象),序列化了卡片的 shadow tree,形如
<view:view class="addr-row">...、<text:default-component class="temp">... 28°、
<(virtual):wx:if> 等节点。render.mjs / lib.mjs 不做任何加工或占位回填——CLI 没下发就没有该字段。
它不参与 pass/fail 判定,仅作为辅助信号:用来核对字段文案是否命中绑定、列表节点数量、
wx:if 空状态是否生效等(对字符串做 grep 即可)render-result.<name>.snapshot.png。仅在当前运行环境具备图像读取能力时,以图像方式 read_file 读入,辅助核对样式还原度(核对 ④)。若当前环境不具备图像读取能力,跳过截图读取,不视为失败;核对 ③(裁剪)完全以 overflow 日志为准,不回退到基于截图的视觉判断5 项核对见 references/CLI_AGENT_REFERENCE.md 第 2.3 节。任一不通过 → 留在本接口继续修复。
每个带 componentPath 的接口都满足下列全部才允许标为通过:
execute-result.<name>.json,其 status === "ok" 且 invokeResult.isError !== truerender-result.<name>.jsonconsoleMessages.snapshotCard 中存在 [ai-mode] ... overflow monitor=on 基线日志、且不出现 overflowed=true;截图仅在具备图像读取能力时作为辅助信号)先检查 _meta.diagnosis:非 null 即环境/权限问题,停止改代码,把 hint 原样转述给用户(勿笼统断言"无权限")。此情形不得判通过、不产出 DELIVERY.md。
按 _meta.diagnosis.type 区分处理:
miniprogram_not_runnable(CLI 返回 agent compile mode is disabled):表示小程序主包/分包未能正常编译运行——agent 能力要在小程序能正常跑起来时才自动就绪(cli preview 走到 upload 的"编译通过"只代表能打包,不代表运行时不白屏)。按 hint 逐条排查:
app.js / hack.js 运行时报错(如 Cannot set properties of undefined、appServiceSDKScriptError)regeneratorRuntime 类报错通常源于 project.config.json 的 es6 / enhance 编译设置与线上不一致,按能正常运行的配置对齐。appid missing / cloud init error 说明 project.config.json 缺 appid 或云开发未初始化,补齐后重试app.json 的 agent.skills / subPackages 配置正确,skill 目录含 mcp.jsonagent_env_unreachable:CLI stdout 含 timeout waiting for auto websocket 且 stderr 含 Fetching AppID (wx...) detailed information ✖。多种可能,不可直接归因为无权限,须把 hint 里的可能性逐条转述给用户,排查顺序:
--debug 重试--auto-port工具不稳定(_meta.diagnosis 为 null 但 execute 超时/掉线/Adapter wait timeout/runtime 未 attach):非代码 bug,禁止改代码判通过。处理:cli open 预热 → --timeout 120000+ → 工具保持前台,必要时重启;仍失败则停止,不产出 DELIVERY.md。
diagnosis === null≠ 都是"工具不稳定"——execute.mjs/render.mjs仅在识别到确定性环境信号(agent compile mode is disabled/Fetching AppID ✖等)时写diagnosis;其余一律留 null。diagnosis === null时按error/consoleMessages的具体错误特征判定归类:
- 超时 / 掉线 /
Adapter wait timeout/ runtime 未 attach → 工具不稳定(本节)missing required parameter/xxx is undefined→ A 类(下方)no data/getStorageSync 返回 null→ B 类(下方)network/500/unauthorized/wx.<xxx> is not a function/ JS 抛异常 → C 类(下方)status: ok+isError: false+ 数据空 → E 类(下方)禁止把 A/B/C/E 类业务错误伪装成"工具不稳定"逃避修复。
- [ ] 步骤 1:读运行时产物(execute-result / render-result 的 `error` / `consoleMessages`;
`elementTree` 由 CLI 返回时可辅助定位字段/绑定问题,缺失时跳过;
`snapshot.png` 仅当环境具备图像读取能力时再辅助核对,否则跳过)
- 先检查 `_meta.diagnosis` —— 若非 null → 不可修复类,立即停止
- **若报错形如 `wx.<xxx> is not a function` / `Cannot read property '<xxx>' of undefined`
→ 直接跳到 C.1 子类按白名单比对处理**
- [ ] 步骤 2:回到主包源码定位真实逻辑(页面 .js / utils/request.js / app.js / cloudfunctions/*)
- [ ] 步骤 3:对比分包实现,列出差异点再改(`apis/<name>.js` / `utils/util.js` / `components/<name>/*`)
- [ ] 步骤 4:若涉及接口划分 / storage 链路,改 mcp.json 的 apis[] 并同步 index.js 注册
- [ ] 步骤 5:重跑 execute 验证数据正确;涉及 UI/WXML/WXSS 改动时单独跑 render 验证渲染
(render 可通过 --from-execute 复用之前的 execute 产物,前提是该产物仍含 invokeResult.structuredContent)
- [ ] 步骤 6:仍失败重复步骤 1~5,单接口上限 5 次核心原则:真相只在主包里。分包是独立运行的拷贝,逻辑差异以主包为准。禁止在未读主包源码的情况下臆测修改。
特征:missing required parameter / xxx is undefined / 参数格式错误。
--args(上限 3 次)apis/<name>.js 入参拼装 → 重跑特征:no data / getStorageSync 返回 null。
<skill>/SKILL.md 的 storage 清单中找写入方接口,先跑一次再重跑当前接口(上限 2 次)app.js 初始化 → 读主包 → 在 utils/util.js 的 ensureStorageInit() 补初始化逻辑 → 重跑特征:network / timeout / 500 / unauthorized / not registered / JS 抛异常 / 返回字段与 outputSchema 不一致。
execute-result.<name>.json 的 invokeResult.error + consoleMessages([ai-mode] 前缀日志)锁定失败步骤.js:拼装入参(headers / token / 签名 / 查询串)utils/request.js / utils/http.js / api/*.js:baseUrl / 鉴权头 / 错误码 / 返回结构(是否包了 data/code/msg)app.js:wx.cloud.init({ env }) / 全局 token / globalDatacloudfunctions/<fn>/index.js 的真实字段名apis/<name>.js / utils/util.js,不重写整个文件components/<name>/index.js 的访问路径与 index.wxml 绑定mcp.json 的 apis[] 结构 + ensureStorageInit,重跑阶段 1report.md 记录后终止本接口特征:运行时报 wx.<xxx> is not a function / Cannot read property '<xxx>' of undefined(wx.<ns> 为 undefined)。
优先假设不是代码写错,而是该 JSAPI 不在技能分包白名单内。按以下顺序处理:
SKILL.md 的 D.1(接口侧)/ D.2(组件侧)白名单(完整清单见 wxa-skills-generate/references/JSAPI_WHITELIST.md)wx.request 在组件侧是否漏声明 permissions["scope.dynamic"]chooseImage → chooseMedia)或改网络请求实现if (wx.x) / try/catch 吞异常当修好特征:运行时报 Skill code loading failed: module 'skills/<skill>/index.js' is not defined, require args is 'skills/<skill>/index.js'(或类似 module ... is not defined / require args is ... 的模块解析错)。
优先假设不是 JS 代码错,而是分包集成没接对。按以下顺序核对(不要动 apis/ 或 components/):
app.json 的 subPackages 是否把 skills 声明为独立分包(缺此项是最常见原因):"subPackages": [
{ "root": "skills", "name": "skills", "pages": [], "independent": true }
]root 必须是 skills 目录的相对路径;independent 必须为 true;pages 可为 []app.json 的 agent.skills[].path 是否指向 skills/<skill>(与 subPackages.root 一致)project.config.json 的 packOptions.include 是否包含 { "type": "folder", "value": "skills" }(否则 CLI 构建时不打包该目录)skills/<skill>/index.js 实际存在,且其中通过 wx.modelContext.registerAPI('<name>', fn) 注册了报错对应的 <name>apis/<name>.js 的代码对照 wxa-skills-generate
SKILL.md阶段 6 与references/CODE_TEMPLATES.md第六节 的配置片段做核对,不要乱写。
特征:status === "ok" 且 invokeResult.isError !== true,但 structuredContent 是空列表 / 空对象 / total: 0 / 只有 error 字段。不能直接判通过——这通常是请求参数错误、鉴权未生效、URL 拼错或响应拆包路径错的症状。
按以下顺序排查(详见 references/CLI_AGENT_REFERENCE.md E 类排查流程):
[ai-mode] 日志,确认请求实际发出的 URL / 参数 / headerapis/<name>.js 实际发出的请求:URL / method / 参数名 / 鉴权头是否一致apis/<name>.js 入口是否补齐 await ensureLogin() 等上限 3 轮;排查后确认是代码问题 → 转 C 类修 apis/<name>.js / utils/request.js。
consoleMessages.snapshotCard(主要依据,尤其是 [ai-mode] ... overflow 日志)+ elementTree(若 CLI 下发,辅助核对字段绑定 / 列表长度 / 空状态文案);仅在环境具备图像读取能力时,再以图像方式 read_file 读 snapshot.png 作为样式还原度的辅助信号components/<name>/,不动 mcp.json / apis/*):[ai-mode] ... overflow overflowed=true 或 data.overflowHeight > 0):index.wxss 压缩 item 高度、用 -wx-line-clamp:1~2 截断长文本;根节点不要写 overflow / max-height / min-height / height(外层尺寸与裁剪都由宿主施加,组件自行设高会让 NotificationType.Overflow 回调失效);单纯列表数据超量时可用半屏原子组件 collapsible-view 让卡片自行展开,不要误改成另开半屏页面;只有需要卡片外详情或用户补充信息时才用独立半屏页面。否则在 index.js 计算 visibleItems + omittedCount = total - visibleItems.length,WXML 渲染"还有 {{omittedCount}} 条未展示"consoleMessages.snapshotCard 中找不到 [ai-mode] ... overflow monitor=on 基线日志):回 wxa-skill-generate 的组件 JS 骨架,在 created 中通过 wx.modelContext.getViewContext(this).on(NotificationType.Overflow, ...) 绑定监听,并在绑定后同步 console.info('[ai-mode] {componentName} overflow monitor=on') 打出基线日志.wxml / .wxss + app.wxss,重提视觉 token(主色、字号、圆角、间距、分割线、图片比例)覆盖 index.wxss。单位推荐 vw(1vw ≈ 7.5rpx)index.js 的 NotificationType.Result 分支做字段归一化(如 imageUrl: item.imageUrl || item.cover || item.pic || item.thumb || item.image)text(自然语言 followUp);② text + api/call 组合(结构化 toolCall)——
wx.modelContext.getContext(this).sendFollowUpMessage({ content: [{ type: 'text', text }, { type: 'api/call', data: { name, arguments } }] }),
text 是用户视角的简短中文(≤ 12 字)、name 必须在当前 skill mcp.json.apis[].name 中存在、arguments 字段与目标接口 inputSchema.properties 对齐、值从 e.currentTarget.dataset / this.data 取。
违规形态包括:content 只含 api/call 不含前导 text(缺用户上下文,小程序 AI 拿不到意图描述)、缺 content 数组直接 { type: 'api/call', ... }、name 在 mcp.json 中不存在、arguments 字段名错或带占位值、组件内直接 wx.request 业务接口。setRelatedPage 使用在 created 中保存的 this._viewCtx 是合法形式,不应按缓存引用报错。
只改 components/<name>/index.js 的 tap handler,不改 apis/ 和 mcp.json;每次上行前补一行 console.info('[ai-mode] {componentName} send api/call name=... args=...') 便于下次 render 在 consoleMessages.snapshotCard 中核验components/<name>/ 后重跑 render(UI 类改动不需要重新 execute,可通过 --from-execute 复用现有产物)→ 再次读 render-result.<name>.json 的 consoleMessages.snapshotCard:基线 overflow monitor=on 日志必须存在、且不出现 overflowed=true(具备图像读取能力时可附加读取截图作为样式还原度的辅助信号),不得仅依据退出码 0 放行curl / fetch / HTTP 工具直接验证网络接口。原因:① 小程序沙箱的鉴权上下文(session / cookie / 签名 / wx.login code)在终端无法复现;② 验证结果对 skill 分包无参考价值。网络请求改动只能通过 execute.mjs 验证。--from-execute 复用已有 execute 产物(args 取自 invokeResult.structuredContent);但 render 关心的是 UI 渲染正确,因此若改动会影响接口返回数据(改 apis/ / outputSchema),需要先重新 execute 再 render,不应用旧产物;仅改 UI(wxml/wxss/components/index.js)时可复用。<skill>/apis/ / <skill>/components/ / mcp.json / SKILL.md),只在文件内容层面做最小修复。每次 execute / render 追加写入 ./cli-agent-run/execute-trace.json:
{
"skill": "<skill-dir>",
"api": "<name>",
"attempt": 1,
"argumentsUsed": { },
"argumentsSource": "user | upstream:<apiName> | default | empty",
"executeStatus": "ok | error",
"executeError": null,
"renderChecks": { "rendered": true, "fieldsComplete": true, "overflow": false, "style": true, "ellipsis": true },
"renderFailReason": null,
"recovery": null
}满足任一即终止:
api execute 成功 + 有 componentPath 的接口 5 项核对全部通过_meta.diagnosis 非 null)或工具不稳定经预热/加 timeout/重启仍失败 → 停止,转述 hint,不产出 DELIVERY.md./cli-agent-run/report.md(每次终止都输出)# CLI `agent` 命令校验报告
- 执行时间:<ISO>
- project-path:<abs-path>
- skill 分包:<metaServicePkg, ...>(validate-report.json 中 skillDirs 字段)
- devtools:<DEVTOOLS_APP_PATH>
## 接口结果
| skill | api | componentPath | execute | render 5 项 | 产物 |
|-------|-----|---------------|---------|------------|------|
| business | searchItems | components/item-list/index | ✔ | ✔✔✔✔✔ | execute-result.searchItems.json / render-result.searchItems.snapshot.png |
## 未通过接口
- <apiName>:<原因简述>,详见 <产物路径>
## 修复摘要
- `skills/<skill>/apis/<name>.js`:<一行摘要>./DELIVERY.md(仅终止条件 1 成立时产出)终止条件 1 成立时必须产出:
./DELIVERY.md(项目根;用户指定其它路径时以用户为准,但必须是 .md)references/DELIVERY_TEMPLATE.md,所有 {占位符} 必须替换为实际值execute-trace.json 存在时在"已知限制"节引用仅输出 report.md 不算任务完成;DELIVERY.md 才是最终交付物。
diagnosis.hint 转述;提示用户工具恢复后重跑 execute,不产出 DELIVERY.mdmcp.json 的 apis[] / utils/util.js 的 storage 逻辑 / index.js 的 registerAPI,重跑 validateapis/<name>.js 入参拼装或 utils/util.js 的 ensureStorageInit,重跑 executeapis/<name>.js / utils/util.js,必要时调整 mcp.json 的 outputSchema 与组件取值路径,重跑 executecomponents/<name>/ 的 wxml/wxss/js,重跑 rendercomponentPath 的原子组件都必须通过;挂起仅限"连续 5 轮仍未通过"硬上限consoleMessages.snapshotCard 做判断,不能只看 execute-result;具备图像读取能力时再辅助读截图consoleMessages.snapshotCard 中存在 [ai-mode] ... overflow monitor=on 基线日志且不出现 overflowed=true 为准(缺 monitor=on = 未接入监听,按不通过处理);样式还原度在具备图像读取能力时再读 snapshot.png 作为辅助信号,否则以 elementTree 字段完整性兜底mcp.json 的 apis[] 依赖关系安排 execute 顺序;存在上游依赖时,上游 execute 必须先于下游。render 无此顺序约束© 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
SKILL.md and 7 other files (scripts, references) in wxa-skills-validate of wechat-miniprogram/ai-mode-skills.
Open the folder on GitHubat commit 9bd1f25
Wxa Skills Validate 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Wxa Skills Validate this skillwechat-miniprogram/ai-mode-skills | 208 | — | ~7.4k | Automated safety check: Pass | MIT | |
| Site ArchitectureAvdLee/RocketSimApp | 803 | 11 repos | ~3.3k | Automated safety check: Pass | Custom licence | |
| Engine Whats Newflutter/flutter | 179k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| macOS Spm App PackagingDimillian/Skills | 4k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Openclaw Live Updateropenclaw/openclaw | 392k | — | ~3.7k | Automated safety check: Pass | MIT | |
| Orca iOS Simulator Controlstablyai/orca | 87k | 1 repos | ~584 | Automated safety check: Pass | Apache-2.0 |
AvdLee/RocketSimApp
When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking.
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
Dimillian/Skills
Scaffold, build, and package SwiftPM-based macOS apps without an Xcode project.
openclaw/openclaw
Maintain the canonical live OpenClaw main checkout, macOS LaunchAgent-managed Gateway, local macOS app, exact-head main CI, and recurring full release validation.
stablyai/orca
iOS Simulator control from inside Orca, with the live device view in Orca's emulator pane. Use when driving a booted Apple Simulator on macOS: taps, gestures…
tw93/Mole
A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.
wechat-miniprogram/ai-mode-skills
分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI…
Works with
校验和修复小程序 AI SKILLs 产物。在以下场景触发:对 skills/ 目录做静态校验、跑通原子接口、验证原子组件渲染、修复校验报错、输出交付文档。依托微信开发者工具进行真机验证。. Wxa Skills Validate is an agent skill from wechat-miniprogram/ai-mode-skills.
Run `npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a claude-code`. Or copy the skill folder (wxa-skills-validate in wechat-miniprogram/ai-mode-skills) into .claude/skills/wxa-skills-validate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add wechat-miniprogram/ai-mode-skills --skill wxa-skills-validate -a codex`. Or copy the skill folder (wxa-skills-validate in wechat-miniprogram/ai-mode-skills) into .agents/skills/wxa-skills-validate in your project. Codex loads it when a task matches its description.
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-validate -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-validate, .gemini/skills/wxa-skills-validate, .github/skills/wxa-skills-validate and .opencode/skills/wxa-skills-validate in your project.
Going by SKILL.md and its folder, Wxa Skills Validate needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.
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.
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.
Wxa Skills Validate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.4k tokens (SKILL.md is roughly 30k 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 13k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Wxa Skills Validate: Site Architecture (AvdLee/RocketSimApp, 803 stars), Engine Whats New (flutter/flutter, 179k stars), macOS Spm App Packaging (Dimillian/Skills, 4k stars) and Openclaw Live Updater (openclaw/openclaw, 392k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.