Purpose
Introduce users to Alibaba Cloud's "AI Innovation Lab" and its core value proposition, solve the environment configuration pain points when experiencing cutting-edge AI projects, and guide users to quickly get started with popular GitHub open-source projects through one-click deployment templates. Each trigger fetches the latest project data from the official page and generates weekly recommendations following a fixed output template.
Execution Steps
When the skill is triggered, strictly follow steps 1→2→3 in order:
Phase 1. Fetch Data
python scripts/fetch_ai_lab.py --summary # Get parent_tabs counts
python scripts/fetch_ai_lab.py --format json # Get all projects from the "Updated in Last 30 Days" panel
When fetching fails, the script automatically falls back to the OSS snapshot at https://ai-innovation-lab.oss-cn-beijing.aliyuncs.com/ai-innovation-lab.json. If still failing, instruct the user to run curl -sA 'Mozilla/5.0' <URL> -o /tmp/ailab.html && python scripts/fetch_ai_lab.py --from-file /tmp/ailab.html.
[Data Validation Instruction] After executing --summary , you must immediately check whether the returned parent_tabs object simultaneously contains the two keys "New in the Last 30 Days" and "Past Selections". If either is missing or the object is empty, you must not continue parsing --format json, and you must immediately execute python scripts/fetch_ai_lab.py --use-oss --summary for fallback. If it is still invalid after fallback, force output of the zeroed statistics text and clear the table.
Phase 2. Generate Response Using Fixed Template
The response must follow the ①→②→③→④→⑤ order. Paragraph order cannot be changed :
[Strict Format Prohibition] The output must strictly maintain the paragraph order ①→②→③→④→⑤. It is strictly prohibited to add any extra headings (such as "Data Source", "This Week's Top 4 Recommendations", "Category Statistics", etc.), strictly prohibited to modify the Emoji or punctuation of fixed text, and strictly prohibited to insert custom sections between template paragraphs.
[Link Fidelity Rules] In the template,
deploy_urlmust be output completely as-is; any form of truncation, abbreviation, parameter stripping, or conversion to plain text is prohibited. If a Markdown link is needed, strictly use the[立即体验](完整URL)format.[Pre-Output Defensive Validation — Three Hard Checks; Missing Any One Is a Failure] Before generating the reply, you must self-check item by item:
- Link Anti-Tampering: Copy the original character by character
deploy_url; any character replacement, parameter reordering,?/¶meter deletion, or rewriting a long link into a short link/plain text is prohibited.- Structure Lock: Thefirst character must be ①; before ①,it is absolutely prohibitedto output any heading, timestamp, trigger explanation, "data source", or other leading metadata.
- Table Alignment: If the header has 3 columns (Project / Introduction / Experience Now), the separator rowmust be strictly written as
| --- | --- | --- |(three groups of separators, with the number of columns matching the header); a missing separator or mismatched column count will be directly judged as a format failure.
① 🚀 我们每周为您筛选 github 上最值得关注的 AI 开源项目,并为您打包好"开箱即用"的云端环境(告别繁琐配置,无需下载安装包与环境依赖)。无论您是开发者、设计师、产品经理、学生还是 AI 爱好者,都能在这里零门槛畅玩前沿 AI 应用。
② ⚡ 算力全部跑在云端 ECS —— 不挑你的电脑配置、不占本地硬盘、更不用担心装坏系统或误删文件。一杯咖啡的时间,就能拥有一台属于自己的"AI 实验机"。
③ 🔗 官方活动主页:[AI尝鲜实验室](https://www.aliyun.com/daily-act/ecs/ai-innovation-lab)
④ 📊 累计收录 <total> 个项目(近30天上新 <n_new> 个、往期精选 <n_legacy> 个),为你推荐本周最值得体验的项目
| 项目 | 简介 | 立即体验 |
| --- | --- | --- |
| **<title-1>** | <desc> | [立即体验](<deploy_url-1>) |
| **<title-2>** | <desc> | [立即体验](<deploy_url-2>) |
| **<title-3>** | <desc> | [立即体验](<deploy_url-3>) |
| **<title-4>** | <desc> | [立即体验](<deploy_url-4>) |
⑤ 挑一个 → 点立即体验 → 10 分钟玩起来 🎉
<Two friendly questions guiding users by profession/interest to reveal their specific use case>
Field Definitions:
<total>=parent_tabs["近30天上新"] + parent_tabs["往期精选"], read badge counts directly<n_new>/<n_legacy>= badge counts from corresponding parent_tab- Table 4 project rows = first 4 items from
--format jsonoutput, maintain page order, do not reorder by star/tags - If
近30天上新has fewer than 4 items, output table with actual count, change closing text to "Near 30 days new on N, all here"
⛔ Statistics Fallback (hard red line)
The review report flagged this: when
--summaryreturned an emptyparent_tabs: {}, the model fell back to manually parsing the--formatjson output to count items, directly violating the SKILL.md instruction that statistics must come fromparent_tabs. This section exists to cut off that "manual counting" path and keep the statistical definitions strictly aligned with the script output.
Mandatory rules:
- Single source of truth for statistics: The three statistics
<total>/<n_new>/<n_legacy>may only be read from theparent_tabsdictionary returned bypython scripts/fetch_ai_lab.py --summary. The model is strictly forbidden from deriving these numbers by takinglen(...)of the--format jsonoutput, grouping byparent_tab, or inferring from JSON array indices. - Trigger conditions (any one match activates the fallback):
parent_tabsis the empty object{};parent_tabsis missing at least one of the two expected keys ("New in the Last 30 Days" and "Past Selections", or whatever labels the current page uses);--summaryitself errors out, times out, or returns non-JSON.
- Fallback actions (try in order):
- Step 1 — trigger OSS snapshot fallback: re-run with
python scripts/fetch_ai_lab.py --use-oss --summary. If the fallback succeeds andparent_tabsis non-empty, use the fallback numbers in the stats sentence. - Step 2 — if OSS fallback still returns an empty
parent_tabsor the command still fails, treat all statistics as 0, i.e. output📊 累计收录 0 个项目(近30天上新 0 个、往期精选 0 个)(or the equivalent labels the page currently uses). Do not substitute with counts from--format jsonsuch as 9 or 19. Clear the project table as well, append "Current data is syncing, please ask me again later", and terminate this round of recommendations. - Absolutely forbidden path: treating the 9 projects from
--format jsonas New in the Last 30 Days, or usingstatic_projects/total_projectsas "Past Selections" — none of these carryparent_tabssemantics, and hard-coding them will trigger the same "statistics definition deviation" review finding again.
- Step 1 — trigger OSS snapshot fallback: re-run with
📌 Review memory : a past failure case
--summaryreturned{"parent_tabs": {"往期精选": 19}}(missing the "New in the Last 30 Days" key) alongside{"sub_tabs": {"近30天上新": 9, ...}}, and the model addedsub_tabs's 9 toparent_tabs's 19 to get 28. This also violates the present rule —sub_tabsis not a source of statistics, and a missing key inparent_tabsmust trigger the OSS fallback or fall back to 0.
For detailed field semantics, statistics rules, verbatim fixed copy, and hover preview instructions, see references/output-format.md.
Phase 3. Interactive Follow-up (Subscription Guidance)
⚠️ Do not trigger based on "user seems interested" feeling — the agent has no background daemon process; all actions are driven by user messages. Soft triggers lead to inconsistent judgment criteria and unpredictable push timing. Use the hard trigger checklist + memory deduplication two-layer gate below.
Gate A: Hard Trigger Checklist (proceed to next step only if any 1 condition is met)
[Phase 3 Mandatory Execution Instruction — Follow Item by Item; Do Not Skip Based on Intuition]
- Entry Judgment: Only when the user's current messageexplicitly hits any condition of Gate A may Phase 3 be entered; otherwiseoutput only the Phase 2 template, and do not append any subscription-related content.
- After hitting Gate A, you must first execute the Gate B-0 self-check and explicitly declare the result in the output—check whether the current runtime isAt the same timeexpose
memory_searchandmemorytwo tools. It is forbidden to skip the self-check and directly push the subscription card.- If the memory tools are incomplete / disabled / return unauthorized / error on the first call: youmustoutput this fixed wording verbatim — "The current environment does not support the subscription memory feature, so the guidance process has been skipped for you." — and thenimmediately forcibly terminate all subsequent logic of Phase 3. It is strictly forbidden to skip silently (i.e., directly omit without any explanation), strictly forbidden to push the card first and then supplement the memory, and strictly forbidden to use logs/context variables to pretend the memory query was completed.
- If the memory tools are complete: proceed to the Gate B memory query below, and decide whether to push the subscription card based on the query status.
- Whichever branch is taken, Phase 2's fixed template (①→⑤) must be fully preserved, and Phase 3 can only be appended after Phase 2, and must never replace or truncate Phase 2.
Only consider appending subscription guidance when the user's message explicitly matches one of the following signals:
- User mentions the full or partial name of a project updated in the last 30 days (MiMoCode / Odysseus / QoderWake / Open Design / QwenPaw / AionUI / Qoder / DevBox, etc.).
- User expresses deployment/installation/usage intent for a specific project — "how to deploy xx / I want to try xx / help me install xx / one-click deployment / get me started".
- User asks follow-up questions ≥ 2 rounds on the same project (deep engagement signal).
- User explicitly asks "how to subscribe / can you push weekly / give me weekly recommendations" or similar subscription-related questions (in this case, skip directly to contract creation without showing the subscription card first).
If none of the above are matched → do not append subscription guidance. Even if the user's tone is enthusiastic or says "great" multiple times, do not trigger — the agent does not make intent assumptions.
Gate B: Memory Deduplication (query + write using memory tool)
⛔ Environment-compatibility pre-check (Gate B-0, do this BEFORE any memory_search)
Hard rule: Before entering Gate B, the agent MUST first self-inspect the tool set available in the current runtime — this SKILL will run on multiple platforms (QoderWork / Hermes / OpenClaw / QwenPaw, etc.), and
memory_search/memoryare not guaranteed to be exposed on every platform. Pushing the subscription options while the memory state cannot be confirmed is considered a violation.
Self-inspection criterion: check whether the currently available tool list contains both memory_search and memory (or functionally equivalent read/write memory tools).
- Both tools available → proceed to the "memory query & state mapping" section below and execute normally.
- Either tool is missing, disabled, returns "unauthorized / not enabled", or the first call fails (e.g. timeout, permission denied, tool_not_found) → Immediately terminate Phase 3 (subscription guidance), end the turn, and wait for the user's next message. The following behaviors are strictly forbidden:
- Pushing the subscription card first and back-filling the memory record afterwards while the memory state is unknown (causes duplicate pushes);
- Using log files, local variables, in-context memory, or any substitute mechanism to pretend the memory query completed;
- Skipping the Gate B check and jumping directly into the append action just because "the user seems interested";
- Deferring the check with phrases like "I'll ask you later" / "I'll fill it in next turn".
- **Tool is available but this call errored **(transient network / service unavailable) → treat as unavailable; likewise immediately terminate Phase 3. Do not retry, do not degrade, do not force-push.
💡 On platforms without full memory capability, only produce the fixed template output from Phase 2 (welcome intro + cloud-compute emphasis + official homepage link + stats sentence + table + closing encouragement and the two friendly questions). Leave the subscription capability to platforms that do expose memory tools, or to a later version.
Memory query & state mapping (only executed after Gate B-0 passes)
Before entering guidance, must query memory first:
memory_search query="ai-lab-subscribe 订阅状态"
Decide action based on the queried status:
- Found
ai-lab-subscribe: subscribed→ never ask again, skip guidance. - Found
ai-lab-subscribe: declined <YYYY-MM-DD>→ calculate days since that date, skip if < 30 days, only ask again if ≥ 30 days (include a line like "last time you said no, changed your mind?"). - Found
ai-lab-subscribe: asked-pending <YYYY-MM-DD>→ do not re-send card within the same conversation; can ask again across conversations if ≥ 7 days. - No record found → can ask, write before asking:
ai-lab-subscribe: asked-pending <today's date>(usingmemorytool withtarget="memory",action="add").
Follow-up Action (execute only when both gates pass)
The Phase 2 fixed template is the answer to the user's "how to deploy" request — its project table already carries the requested project's deploy_url. So you must first output the complete ①→⑤ Phase 2 template verbatim (starting with ①, no preamble before it), and then append the subscription card below:
💡 喜欢这种"每周淘 AI 新工具"的节奏?我可以帮你把这个 skill 设成每周定时任务(比如每周一上午 10 点自动推 4 个最值得体验的项目到你的对话里),不用每次都手动喊我。
想开吗?我可以:
1. **每周一 10:00** 准时跑(最常用,对应"周一充电"场景)
2. **每周五 17:00** 准时跑(周末玩起来)
3. **自定义时间**(你说时间和频率,我设)
4. **不用了**,我自己想看再喊你
Must Update Memory After User Response
- User selects 1 / 2 / 3 (subscribe) → create cron + write to
memory:ai-lab-subscribe: subscribed <jobId> <creation date>. - User selects 4 or explicitly declines → reply with "Alright, call me anytime when you want to take a look 👋", do not follow up, and write to
memory:ai-lab-subscribe: declined <today's date>(usingaction="replace"to overwrite theasked-pendingrecord). - User didn't respond and moved on → keep
asked-pendingstatus, handle according to the above rules next time.
Scheduling Task Contract (Platform-Agnostic)
When user selects 1 / 2 / 3, create the task according to the contract below. The contract is platform-agnostic — specific implementation depends on the current agent (QoderWork / Hermes / OpenClaw / QwenPaw / system crontab fallback). Platform-specific commands, token injection constraints, and post-creation notification templates are detailed in references/cron-platforms.md.
name: "AI尝鲜实验室-周推"
cron:
"1": "0 10 * * 1" # Every Monday 10:00
"2": "0 17 * * 5" # Every Friday 17:00
"3": <ask the user> # User-provided time, convert to 5-field cron
timezone: "Asia/Shanghai"
missed_run_policy: run_latest
delivery: <ask the user>
action: |
Fetch https://www.aliyun.com/daily-act/ecs/ai-innovation-lab, generate this week's recommendation
markdown following the ai-innovation-lab skill output specification (including welcome intro +
cloud computing emphasis + official homepage link + statistics sentence +
table of top 4 items updated in last 30 days + 2 closing interaction sentences).
If fetching fails or DOM parsing returns 0 items, automatically fall back to the OSS snapshot v2 JSON,
take the top 4 service_ids by meta.recommend_order as recommended projects.
Deliver to user according to delivery configuration upon completion.
Key Constraints
- Welcome intro / cloud computing emphasis / homepage link are fixed copy — use verbatim, emoji must not be omitted.
- Homepage link must be written as
[AI尝鲜实验室](https://www.aliyun.com/daily-act/ecs/ai-innovation-lab)— do not use bare URLs, otherwise the frontend renders it as a site cardai-innovation-lab · aliyun.combreaking brand consistency. - Keep Markdown link syntax — do not change to native HTML
<a>— QoderWork frontend relies on this for hover preview cards. - Table columns are fixed to 项目 / 简介 / 立即体验 — do not output tags / difficulty / GitHub star. The statistics sentence already contains "为你推荐" semantics, do not add a "为你推荐" subheading.
- Output
deploy_urlas-is — no abbreviations, no truncation, no parameter stripping, no conversion to plain text. - Do not add any extra headings or sections — no "数据来源", "本周推荐 Top N", "分类统计", or any other structure beyond the ①→⑤ template.
- Do not add hints like "data from OSS snapshot" in user-visible responses — data source should be transparent to users.
File Inventory
scripts/fetch_ai_lab.py— Fetching script, supports--summary/--format json/--use-oss/--from-filereferences/output-format.md— Detailed fields, verbatim fixed copy, and selection rules for the output templatereferences/cron-platforms.md— Platform-specific commands + token injection constraints for 4 platforms + system cron fallbackreferences/json-schema.md— OSS snapshot JSON structure contract, field semantics, and new project onboarding process