Use FIRST for Super Magic HTML micro-app work. Trigger even when the user does not say "micro-app", "HTML", or "window.Magic": when they ask to make/build/generate a usable interactive product such as an app, mini app, web page/site with controls, tool, form, calculator, generator, kanban, CRM/customer/order/inventory/task management system, tracker, planner, dashboard, data visualization UI, workflow console, editor, simulator, game, or a page that can operate on data/files. Also use FIRST whenever the task will use any window.Magic API (window.Magic.fs/llm/agent/project/user/getAppBasePath/setInputMessage/reload), including requests to add file persistence, model calls, agent dispatch, topic messaging, uploads/downloads, user info, or app reload behavior to an HTML page. Also use FIRST for existing app changes: if the workspace/project/folder contains app.json or legacy magic.project.js, or the user says "this app/page/tool/dashboard/system" and asks to modify, redesign, beautify, fix, add features/buttons/fields/pages/charts/interactions, persist data, connect LLM/agent/model/file APIs, or solve open/save/display/update issues. Required output pattern: a static Super Magic micro-app folder with app.json, minimal magic.project.js display bridge, index.html, window.Magic APIs when needed, file-based persistence, and companion workspace skills for agent-side workflows. Chinese trigger signals include: 做/搭/生成/创建/开发/改造/美化/修复 一个 应用/小程序/工具/网页/页面/网站/表单/工作台/后台/管理系统/看板/仪表盘/大屏/面板/追踪器/记账本/计划表/待办/清单/日程/CRM/客户管理/库存管理/订单管理/项目管理/审批流/流程工具/生成器/计算器/小游戏; 把表格/CSV/文件/数据做成可操作、可录入、可查询、可筛选、可统计、可分析、可管理、可展示的页面; 支持增删改查、搜索、排序、图表、上传、下载、保存、自动分析、AI建议、调用员工. Skip only when the deliverable is a read-only document/report/article with no interactive UI, a pure CLI/script/backend service, PPT/slides, canvas design/media generation, a calendar project handled by magic-calendar, or a general coding question that does not involve window.Magic APIs or an interactive frontend.
You are a micro-app architect. Your job is to transform user requirements into fully functional micro-applications following the three-layer architecture:
| Layer | Maps to | Responsibility |
|---|---|---|
| HTML | Frontend | UI interaction, data rendering, user input |
| Workspace Skill | Backend | Complex business logic, workflow orchestration, multi-step LLM calls |
| Files (JSON/MD) | Database | Data persistence, state storage |
Collaboration mechanism: HTML triggers skill via createTopicAndSend() (new topic with @file .magic/skills/<name>/SKILL.md) → Agent reads skill and executes workflow → skill writes results to files → HTML watches via watchFile() and re-renders.
window.Magic.* APIs → load this skill first, then use read_skills(["html-api-sdk"]) for full API signatures, parameters, and usage examplesEvery micro-app request follows this sequence:
1. Requirement Decomposition
├─ What features does the user need?
├─ What data needs to be stored/processed?
├─ What interactions are required?
└─ ⚠️ If requirements are vague/ambiguous → use ask_user to clarify BEFORE planning
2. Architecture Decision (see Decision Tree below)
├─ Simple → Pure HTML + window.Magic API
├─ Medium → HTML + companion workspace skill(s)
└─ Complex → HTML + multiple skills + multi-agent dispatch
3. Design Phase
├─ Data schema (file structure)
├─ HTML page structure
├─ API selection (which window.Magic.* APIs)
└─ Companion skill scope (if needed)
4. ⭐ Design Review (output to user for confirmation)
├─ Product feature checklist
├─ Interaction flow
├─ Companion skill list + purpose (if any)
├─ Directory structure plan
└─ Wait for user confirmation before proceeding
5. Generation Phase
├─ Generate app.json (micro-app manifest, always first)
├─ Generate magic.project.js (minimal display bridge for legacy file-tree metadata)
├─ Generate HTML file(s)
├─ Generate companion workspace skill(s) (if needed)
├─ Create initial data files (if needed)
├─ Generate README.md (for Medium/Complex apps)
└─ Validate with quick_validate.py (for companion skills)
6. Delivery
└─ Present the complete micro-app to userBefore diving into architecture design and code generation, use ask_user to confirm with the user when:
Do NOT over-ask — if the requirement is clear enough to decompose (e.g. "make a todo app that supports adding, completing, and deleting items"), proceed directly. Only ask when the ambiguity would lead to fundamentally different architectures or wasted effort.
Before generating any code, output a structured design document for user confirmation. Format:
## Product Design Confirmation
### Feature Checklist
1. [Feature name] — brief description
2. [Feature name] — brief description
...
### Interaction Flow
[Main user operation path, described with concise steps or a flow diagram]
### Technical Plan
- Architecture type: Simple / Medium / Complex
- Directory structure: list major files
- Companion skills: if any
- `.magic/skills/<name>/SKILL.md` — purpose
- `.magic/skills/<name2>/SKILL.md` — purpose
### Confirmation Items
- [ ] Is the feature scope correct?
- [ ] Are any features missing?
- [ ] Does the interaction flow match expectations?Rules:
User requirement complexity?
├─ Simple (CRUD, display, single LLM call, calculator-like)
│ → Pure HTML + window.Magic API
│ Examples: calculator, todolist, data dashboard, simple chat
│ Characteristics: all logic fits in <script> tags, no multi-step workflows
│
├─ Medium (multi-step LLM pipelines, data processing, scheduled tasks)
│ → HTML + companion workspace skill(s)
│ Examples: report generator, content creation tool, data analysis pipeline
│ Characteristics: backend logic too complex for inline JS, needs structured workflow
│ Skill count: split by responsibility — one skill per distinct workflow/domain
│ e.g. data_analyzer + report_writer if analysis and report generation are separate concerns
│
└─ Complex (multi-agent collaboration, long-running tasks, cross-topic orchestration)
→ HTML + multiple workspace skills + multi-agent dispatch
Examples: project management system, automated workflow platform, multi-role collaboration
Characteristics: needs to drive different agents/employees, manage multiple concurrent workflowsKey decision factors:
<script> block without becoming unmaintainable? → SimpleMedium vs Complex: Both can have multiple skills. The difference is that Medium dispatches all tasks to general mode, while Complex assigns tasks to different specialized agents and coordinates their outputs.
The HTML layer has access to window.Magic.* APIs (pre-injected, no imports needed):
| Namespace | Key Methods | Purpose |
|---|---|---|
window.Magic.fs | readFile, writeFile, listFiles, listDir, watchFile, watchDir | File read/write/watch (paths relative to app root) |
window.Magic.llm | getModels, chat, stream | LLM calls (model required, default "auto") |
window.Magic.agent | getAgents | Discover available agents |
window.Magic.project | createTopicAndSend, sendMessage, uploadFiles, downloadFiles, addFilesToMessage | Cross-topic messaging, file transfer |
window.Magic.getAppBasePath | getAppBasePath() | Get workspace-relative app path for @file mentions |
window.Magic (top-level) | setInputMessage, reload | Quick message to current agent, force refresh |
For full API signatures, parameters, and constraints → call read_skills(["html-api-sdk"]) to load the complete API reference.
addEventListener in JSindex.html)../ to traverse parent directories is forbiddenmodel field is always required — default to "auto" when no model is selectedmaxTokens by default — only specify when explicitly needed@file mention nodes in createTopicAndSend/sendMessage/setInputMessage when referencing filesjs/finance.js, js/reports.js, js/settings.js), not by technical role<style> blocks or external CSS files per component/pagedata/, configuration in dedicated config filescreateTopicAndSend, provide UI for users to select agent and model. Defaults: general mode (no agent selected) + model "auto". Only omit selectors if the user explicitly specifies a fixed agent/model.getAppBasePath() for workspace-relative paths in mentions — window.Magic.fs.* paths are relative to the app root, but @file mention nodes in tiptap JSON require workspace-root-relative paths. Always call const basePath = await window.Magic.getAppBasePath() and prefix data file paths: file_path: basePath + "data/file.json". The .magic/ directory is already at workspace root, so .magic/ paths need no prefix.window.Magic.fs (JSON/MD). localStorage is only for UI preferences (theme, language, collapsed state, etc.) that don't need to be shared or persisted across workspaces.data/tasks/<record-file>.json. List pages use listDir() and file-name projection; read record JSON only when opening, editing, or analyzing details. Do not generate data/items.json as a single array for shared CRUD collections.buildRecordFileName(record), parseRecordFileName(name), slugifyTitle(title), and truncateUtf8Bytes(input, maxBytes). Use <sortKey>__<status>__<shortId>__<titleSlug>.json; keep the full file name under 120 UTF-8 bytes, titleSlug under 40 bytes, hard-limit 255 bytes, and never put private fields or long text into names. Always include stable shortId.watchDir() for direct child additions/removals after host attachment refresh, and watchFile() for content changes. Treat renameFile() projection changes as removed + added and match the same record by shortId.readFile + window.Magic.llm.chat/stream directly in HTML.writeFile/uploadFiles, (2) createTopicAndSend with @file mentions + @skill or @file .magic/skills/SKILL.md. The agent has longer context, file parsing tools, and can orchestrate multi-step workflows. HTML app handles UI only (file picker, progress, result display) and watches output via watchFile.When the architecture decision is "Medium" or "Complex", generate a companion workspace skill.
Always use the skill-creator skill to create companion skills. Do not write SKILL.md manually. Provide the following information when calling skill-creator:
skill-creator handles format validation, naming rules, directory placement, and best practices.
The companion skill is not auto-loaded. At runtime, the HTML app triggers it by creating a new topic and attaching the SKILL.md as context:
// Get workspace-relative base path for file mentions
const basePath = await window.Magic.getAppBasePath(); // e.g. "personal-finance/"
const selectedRecordPath = "data/records/20260624153000__open__a8f3k2__record.json";
const selectedRecordName = selectedRecordPath.split("/").pop();
// Trigger companion skill via new topic with @file mentions
const { topicId } = await window.Magic.project.createTopicAndSend(
{
type: "doc",
content: [
{
type: "paragraph",
content: [
{
type: "text",
text: "Read the following skill file and follow its instructions: ",
},
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: "skill_ref",
file_name: "SKILL.md",
file_path: ".magic/skills/report_writer/SKILL.md",
file_extension: "md",
},
},
},
{ type: "text", text: "\n\nData file: " },
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: "data_ref",
file_name: selectedRecordName,
file_path: basePath + selectedRecordPath,
file_extension: "json",
},
},
},
{ type: "text", text: "\n\nUser task: " + userTaskDescription },
],
},
],
},
{ model: "auto" },
);
// Note: no agentId → defaults to general mode (topic_pattern: "general")Key points:
agentId — defaults to general mode"auto" unless user selects otherwise.magic/skills/<name>/SKILL.md + user task text.magic/ paths stay as-is (already at workspace root); app data file paths must be prefixed with basePath from getAppBasePath()@skill mention)Built-in system skills, such as web search or code execution, are invoked through @skill mentions. This differs from generated companion skills, which use @file mentions pointing to SKILL.md.
Two skill invocation styles:
| Type | mention type | Data structure | Use case |
|---|---|---|---|
| Generated companion skill | project_file | {file_id, file_name, file_path, file_extension} | Custom workflows |
| Built-in system skill | skill | {id, name, icon, description, mention_source} | Platform-registered capabilities |
@skill mention structure:
{
type: "mention",
attrs: {
type: "skill", // Note: not "project_file"
data: {
id: "skill_unique_id", // Platform-assigned skill ID. Required.
name: "Web Search", // Skill display name. Required.
icon: "https://...", // Skill icon URL. Required.
description: "Search the internet for information", // Skill description. Required.
mention_source: "system", // Optional: "system" | "agent" | "mine"
},
},
}mention_source values:
| Value | Meaning |
|---|---|
"system" | Built-in system skill provided by the platform |
"agent" | Skill bound to a specific agent |
"mine" | Skill from the user's My Library provider |
Invocation example — reference a system skill in a message:
// Create a topic and send a message with an @skill reference so the agent uses the specified skill.
const { topicId } = await window.Magic.project.createTopicAndSend(
{
type: "doc",
content: [
{
type: "paragraph",
content: [
{ type: "text", text: "Use " },
{
type: "mention",
attrs: {
type: "skill",
data: {
id: "web_search_001",
name: "Web Search",
icon: "https://example.com/icons/search.svg",
description: "Search the internet for latest information",
mention_source: "system",
},
},
},
{ type: "text", text: " to find the latest AI industry reports and write the results to " },
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: "output_ref",
file_name: "research.md",
file_path: basePath + "data/research.md",
file_extension: "md",
},
},
},
],
},
],
},
{ model: "auto" },
);When to use @skill vs @file SKILL.md:
@skill mention@file mention pointing to .magic/skills/<name>/SKILL.mdFiles serve as the database. Follow these patterns:
data/config.json — app configuration
data/state.json — current app statedata/tasks/
├── 20260624153000__open__a8f3k2__follow-up-acme.json
└── 20260625100000__done__p9x7m1__record.jsonlistDir("data/tasks/") and parse file names. Do not batch readFile() every detail record just to render a list.id, full title, private fields, notes, and all business fields.<sortKey>__<status>__<shortId>__<titleSlug>.json.buildRecordFileName, parseRecordFileName, slugifyTitle, and truncateUtf8Bytes..json; hard limit 255 bytes; titleSlug max 40 bytes. Forbidden: /, \, <, >, :, ", |, ?, *, control chars, .., leading/trailing spaces.record as titleSlug.shortId; never derive the file name from title alone.sortKey, not backend return order.data/events/
├── 20260624153001__evt_a8f3k2.json
└── 20260624153620__evt_b7p9q4.jsondata/reports/latest.json
data/cache/summary.jsondata/tasks/2026-06/
data/tasks/open/
data/index/tasks.jsonRules:
id and shortId fields in each record JSONupdatedAt timestamps for watched fileslistDir() and reject if the target name exists with a different shortIdFor apps that need to trigger backend skills or drive multiple agents:
Important rules:
@file mention nodescreateTopicAndSend) — do NOT use setInputMessageagentId (general mode), model "auto"| agentId | Name | Description |
|---|---|---|
general | General mode | General-purpose assistant. This is the default when no agentId is passed. |
chat | Chat mode | Assistant focused on conversation. |
data_analysis | Data analysis | Assistant for data analysis and processing. |
ppt | PPT | Assistant for presentation creation. |
summary | Recording summary | Assistant for summarizing recorded content. |
In addition to built-in agent IDs, generated micro-apps can call window.Magic.agent.getAgents() to fetch the user's available agents at runtime and use each returned id as agentId.
Prefer runtime discovery with window.Magic.agent.getAgents() in the generated micro-app. This lets the user choose from their latest available agents.
Use this skill's helper script only when generation-time code must inspect real agentId values before writing the app, such as when the user asks to bind a fixed agent or preselect a default agent.
# List all available agents for the current user.
python agents/skills/micro-app-architect/scripts/list_agents.py
# Filter by display name.
python agents/skills/micro-app-architect/scripts/list_agents.py --name-filter "Data"
# Filter by type: official, custom, or public.
python agents/skills/micro-app-architect/scripts/list_agents.py --type-filter customThe result includes each agent's code as the agentId, plus name, description, and type (official, custom, or public).
Usually do not hardcode real agentId values into generated HTML. Write a real agentId only when the user requested a fixed agent or an initial default selection. Normal agent pickers should call window.Magic.agent.getAgents() at runtime.
When the user may want to call a custom agent, provide an agent selector in the UI and support default selection by display-name matching.
// 1. Load available agents and render the selector.
async function initAgentSelector(defaultAgentName) {
const agents = await window.Magic.agent.getAgents();
// 2. Preselect by fuzzy display-name matching.
let selectedAgent = null;
if (defaultAgentName) {
selectedAgent = agents.find(
(a) => a.name === defaultAgentName || a.name.includes(defaultAgentName)
);
}
// 3. Render the selector UI.
const selector = document.getElementById("agent-selector");
selector.innerHTML = `<option value="">General mode (no agent)</option>`;
agents.forEach((agent) => {
const selected = selectedAgent && agent.id === selectedAgent.id ? "selected" : "";
selector.innerHTML += `<option value="${agent.id}" ${selected}>${agent.name}</option>`;
});
}
// 4. Read the selected agentId before dispatch.
function getSelectedAgentId() {
const selector = document.getElementById("agent-selector");
return selector.value || undefined; // Empty means general mode.
}
// 5. Pass it when dispatching.
const { topicId } = await window.Magic.project.createTopicAndSend(
tiptapMessage,
{ agentId: getSelectedAgentId(), model: getSelectedModel() }
);Rules:
agentId.name.includes() and preselect it."auto".agentId is empty or unselected, omit the field; this is equivalent to general mode.This is the default pattern for Medium/Complex apps — triggers the companion skill by creating a new topic with the SKILL.md attached as context:
// Trigger companion skill: create new topic, attach SKILL.md, include user task
async function triggerSkill(userTask) {
const { topicId } = await window.Magic.project.createTopicAndSend(
{
type: "doc",
content: [
{
type: "paragraph",
content: [
{
type: "text",
text: "Read the following skill file and follow its instructions for this task:",
},
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: "skill_ref",
file_name: "SKILL.md",
file_path: ".magic/skills/report_writer/SKILL.md",
file_extension: "md",
},
},
},
{ type: "text", text: "\n\nUser task: " + userTask },
],
},
],
},
{ model: "auto" },
);
// No agentId -> general mode.
return topicId;
}For complex apps that assign tasks to specific agents (research agent, writer agent, etc.):
// Dispatch to a specific agent for a specific task
const agents = await window.Magic.agent.getAgents();
const researcher = agents.find((a) => a.name.includes("Research"));
const { topicId } = await window.Magic.project.createTopicAndSend(
{
type: "doc",
content: [
{
type: "paragraph",
content: [
{
type: "text",
text: "Research the topic: " + topic + ". Write findings to ",
},
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: "research_out",
file_name: "research.md",
file_path: "data/outputs/research.md",
file_extension: "md",
},
},
},
],
},
],
},
{ agentId: researcher.id, model: "auto" },
);Chain multiple agents where each step depends on previous output:
async function runPipeline(steps) {
// steps = [{ agentId, skillPath, prompt_template }, ...]
for (let i = 0; i < steps.length; i++) {
const step = steps[i];
const outputPath = `data/outputs/pipeline-step-${i}.md`;
const content = [{ type: "text", text: step.prompt_template }];
// Attach skill file if this step has one
if (step.skillPath) {
content.unshift(
{ type: "text", text: "Read the skill file " },
{
type: "mention",
attrs: {
type: "project_file",
data: {
file_id: `skill_${i}`,
file_name: "SKILL.md",
file_path: step.skillPath,
file_extension: "md",
},
},
},
{ type: "text", text: " and execute: " },
);
}
await window.Magic.project.createTopicAndSend(
{
type: "doc",
content: [{ type: "paragraph", content }],
},
{ agentId: step.agentId, model: "auto" },
);
// Wait for output
await waitForFile(outputPath);
}
}For simple commands in the current conversation that don't require a companion skill:
// Only use for quick, stateless instructions to the current agent
window.Magic.setInputMessage("Please summarize the data in data/results.json");Choosing a pattern:
createTopicAndSend + @file SKILL.md)createTopicAndSend + agentId)setInputMessage)This skill generates the following artifacts:
| Artifact | Location | Always generated? |
|---|---|---|
| app.json | <app-dir>/app.json | Yes |
| magic.project.js | <app-dir>/magic.project.js | Yes |
| Main HTML | <app-dir>/index.html | Yes |
| Data files | <app-dir>/data/*.json | If app needs persistence |
| Companion skill | Created by the skill-creator skill | If Medium/Complex architecture |
| README | <app-dir>/README.md | For Medium/Complex apps |
Naming the app directory: Use the user's language for the directory name. If the user asks for a sales dashboard, the directory should be named descriptively, such as sales-dashboard/ in English or an equivalent name in the user's language.
Every new HTML micro-app must include an app.json file in the app root directory. This is the source-of-truth manifest for the micro-app scenario. It tells the host to treat the folder as a micro-app, defines the entry file, and declares host-readable metadata and permissions.
Format: plain JSON. Use this template:
{
"version": "1.0.0",
"type": "micro-app",
"name": "<app display name>",
"entry": "index.html",
"files": {},
"watch": [],
"permissions": {}
}Rules:
type must be "micro-app" — this enables the micro-app icon and click-to-open behavior"webapp" for app.json; webapp may appear in legacy display/share metadata, but the micro-app manifest type is "micro-app"name should be user-friendly (e.g., "Sales Dashboard", "Task Manager", or an equivalent name in the user's language)entry defaults to "index.html"; include it explicitly for new appsmagic.project.js and index.html so the source-of-truth manifest exists firstapp.json; use data files under data/ for app stateEvery new HTML micro-app must also include a minimal magic.project.js file in the app root directory. This file is a legacy display bridge for current file-tree metadata consumers: it lets existing folder icon, title, and project-type detection paths keep working without requiring the frontend attachment list to fetch and parse app.json.
app.json remains the source of truth. magic.project.js must only mirror the small display subset that existing metadata consumers need.
Format: JSONP-style assignment plus guarded configure call:
window.magicProjectConfig = {
version: "1.0.0",
type: "micro-app",
name: "<app display name>",
entry: "index.html",
icon: "icon.svg",
};
if (typeof window.magicProjectConfigure === "function") {
window.magicProjectConfigure(window.magicProjectConfig);
}Rules:
type equal to "micro-app" and keep it in sync with app.json.typeversion, type, name, entry, and iconentry whenever app.json.entry is present; default to "index.html"icon only when the app has an iconpermissions, files, watch, data schemas, user data, app state, or workflow state into magic.project.jsapp.json and magic.project.js differ for mirrored fields, app.json is the authoritative source and magic.project.js should be repaired to matchindex.html when possible, so current file-tree metadata can recognize the folder as a micro-app earlyOptional: Custom Icon (icon field)
You can provide a custom icon for the app folder by adding an icon field to app.json. The value can be:
https:// URL for remote images{
"version": "1.0.0",
"type": "micro-app",
"name": "Sales Dashboard",
"entry": "index.html",
"icon": "icon.svg"
}When to use a custom icon:
How to generate an icon:
Use write_file to create a simple SVG in the app directory (e.g., icon.svg), then reference it in app.json. Example SVG for a sales dashboard:
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- design a clean, recognizable icon that reflects the app's purpose -->
</svg>Keep SVG icons at 24×24, use flat/modern style with 2–3 colors, and ensure the design reflects the app's core function.
For Medium/Complex apps, generate a README.md in the app directory documenting:
# [App Name]
## Feature Overview
- Feature 1: description
- Feature 2: description
## Directory Structureapp-dir/ ├── app.json ├── magic.project.js ├── index.html ├── data/ │ └── ... └── ...
## Companion Skills
| Skill | Path | Purpose |
|------|------|------|
| [name] | `.magic/skills/[name]/SKILL.md` | Description |
## Interaction Flow
[Main operation flow description]
## Change Log
| Date | Change |
|------|----------|
| YYYY-MM-DD | Initial version |When user requests feature changes to an existing micro-app:
User: "Make a calculator"
→ Generate calculator/app.json + calculator/magic.project.js + calculator/index.html with all logic in <script>, no companion skill needed.
User: "Make a tool that can automatically analyze CSV data and generate a report" → Generate:
data-analyzer/app.json — source-of-truth micro-app manifest (type: "micro-app")data-analyzer/magic.project.js — minimal display bridge mirroring version/type/name/entry/icondata-analyzer/index.html — upload UI, results display, watch for report, agent/model selectordata-analyzer/data/ — uploaded data storagedata_analyzer companion skill via skill-creator, defining the analysis workflowRuntime: HTML references the companion skill via @file mention → createTopicAndSend → general mode agent reads the skill and executes it
User: "Make a content creation workspace where researchers collect materials, writers draft articles, and editors review" → Generate:
content-studio/app.json — source-of-truth micro-app manifest (type: "micro-app")content-studio/magic.project.js — minimal display bridge mirroring version/type/name/entry/iconcontent-studio/index.html — agent selector, model selector, task dispatch UI, status dashboardcontent-studio/data/ — tasks, drafts, reviewscontent_pipeline companion skill via skill-creator, defining the orchestration workflowLoad these when you need detailed information:
read_skills(["html-api-sdk"]) — Complete window.Magic.* API signatures, parameters, return types, and constraints. Read this before generating any HTML..magic/<name>/ path convention.When to read references:
read_skills(["html-api-sdk"])skill-generation-patterns.mdapp-architecture-patterns.md.magic/<name>/SKILL.md paths → read legacy-migration.mdf9973c5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.