[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EZGSA4RFS3Z5A07PTYZHNR":3,"skill-same:01M6EZGSA4RFS3Z5A07PTYZHNR":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":68,"commitSha":69,"skillDirectory":70,"forksCount":71,"repositoryHtmlUrl":72,"repositoryHomepageUrl":6,"ownerHtmlUrl":73,"ownerBlogUrl":6,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6EZGSA4RFS3Z5A07PTYZHNR","htmx-interaction-patterns",null,"Build dynamic web interfaces with htmx using hypermedia-driven patterns for partial page updates, lazy loading, infinite scroll, and server-sent events without writing JavaScript. Triggers on htmx usage, hypermedia architecture, or progressive enhancement requests.","luokai0\u002Fai-agent-skills-by-luo-kai","luokai0","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F266954973?v=4","01M6E16VNT42JB8B3X3254QWJ7","luo kai","01M6E16VTFVP6S5XJF1V1MPV90",14,"MIT","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F21-external-registries\u002F18-organvm-skills\u002Fdevelopment\u002Fhtmx-interaction-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"htmx interaction patterns","htmx","interaction","patterns","project","loading","rendering","events","triggers","server-side","responsive","design","fastapi","context","page","Meta","server","architecture","javascript","writing","2026-11-10 10:12:30",false,"---\nname: htmx-interaction-patterns\ndescription: Build dynamic web interfaces with htmx using hypermedia-driven patterns for partial page updates, lazy loading, infinite scroll, and server-sent events without writing JavaScript. Triggers on htmx usage, hypermedia architecture, or progressive enhancement requests.\nlicense: MIT\ncomplexity: intermediate\ntime_to_learn: 30min\ntags:\n  - htmx\n  - hypermedia\n  - progressive-enhancement\n  - server-side-rendering\ngovernance_phases: [build]\norgan_affinity: [meta]\ntriggers: [user-asks-about-htmx, project-has-htmx, context:hypermedia, context:progressive-enhancement]\ncomplements: [fastapi-patterns, backend-implementation-patterns, responsive-design-patterns]\n---\n\n# htmx Interaction Patterns\n\nBuild dynamic interfaces with HTML-over-the-wire — server renders HTML fragments, htmx swaps them in.\n\n## Core Concepts\n\nhtmx extends HTML with attributes that make AJAX requests and swap content — no JavaScript required.\n\n```html\n\u003C!-- Click button → GET \u002Fitems → replace #item-list content -->\n\u003Cbutton hx-get=\"\u002Fitems\" hx-target=\"#item-list\" hx-swap=\"innerHTML\">\n  Load Items\n\u003C\u002Fbutton>\n\u003Cdiv id=\"item-list\">\u003C\u002Fdiv>\n```\n\n### Key Attributes\n\n| Attribute | Purpose | Example |\n|-----------|---------|---------|\n| `hx-get` | GET request | `hx-get=\"\u002Fapi\u002Fitems\"` |\n| `hx-post` | POST request | `hx-post=\"\u002Fapi\u002Fitems\"` |\n| `hx-put` | PUT request | `hx-put=\"\u002Fapi\u002Fitems\u002F1\"` |\n| `hx-delete` | DELETE request | `hx-delete=\"\u002Fapi\u002Fitems\u002F1\"` |\n| `hx-target` | Where to put response | `hx-target=\"#results\"` |\n| `hx-swap` | How to insert | `hx-swap=\"outerHTML\"` |\n| `hx-trigger` | When to fire | `hx-trigger=\"click\"` |\n| `hx-indicator` | Loading indicator | `hx-indicator=\"#spinner\"` |\n\n### Swap Strategies\n\n| Strategy | Behavior |\n|----------|----------|\n| `innerHTML` | Replace children (default) |\n| `outerHTML` | Replace entire target element |\n| `afterbegin` | Insert as first child |\n| `beforeend` | Insert as last child |\n| `beforebegin` | Insert before target |\n| `afterend` | Insert after target |\n| `delete` | Remove target |\n| `none` | No DOM update |\n\n## Common Patterns\n\n### Search with Debounce\n\n```html\n\u003Cinput type=\"search\" name=\"q\"\n  hx-get=\"\u002Fsearch\"\n  hx-trigger=\"input changed delay:300ms\"\n  hx-target=\"#results\"\n  hx-indicator=\"#search-spinner\"\n  placeholder=\"Search skills...\">\n\u003Cspan id=\"search-spinner\" class=\"htmx-indicator\">Searching...\u003C\u002Fspan>\n\u003Cdiv id=\"results\">\u003C\u002Fdiv>\n```\n\nServer returns an HTML fragment:\n```python\n@app.get(\"\u002Fsearch\")\nasync def search(q: str = \"\"):\n    results = search_skills(q)\n    return HTMLResponse(render_results(results))\n```\n\n### Inline Editing\n\n```html\n\u003C!-- View mode -->\n\u003Cdiv id=\"skill-42\" hx-get=\"\u002Fskills\u002F42\u002Fedit\" hx-trigger=\"dblclick\" hx-swap=\"outerHTML\">\n  \u003Ch3>testing-patterns\u003C\u002Fh3>\n  \u003Cp>Write effective tests across the stack...\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!-- Edit mode (returned by server) -->\n\u003Cform id=\"skill-42\" hx-put=\"\u002Fskills\u002F42\" hx-swap=\"outerHTML\">\n  \u003Cinput name=\"name\" value=\"testing-patterns\">\n  \u003Ctextarea name=\"description\">Write effective tests...\u003C\u002Ftextarea>\n  \u003Cbutton type=\"submit\">Save\u003C\u002Fbutton>\n  \u003Cbutton hx-get=\"\u002Fskills\u002F42\" hx-swap=\"outerHTML\">Cancel\u003C\u002Fbutton>\n\u003C\u002Fform>\n```\n\n### Infinite Scroll\n\n```html\n\u003Cdiv id=\"item-list\">\n  \u003C!-- Items rendered here -->\n  \u003Cdiv hx-get=\"\u002Fitems?page=2\"\n       hx-trigger=\"revealed\"\n       hx-swap=\"outerHTML\">\n    Loading more...\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\nServer returns items + next trigger:\n```html\n\u003Cdiv class=\"item\">Item 11\u003C\u002Fdiv>\n\u003Cdiv class=\"item\">Item 12\u003C\u002Fdiv>\n\u003C!-- Next page trigger -->\n\u003Cdiv hx-get=\"\u002Fitems?page=3\" hx-trigger=\"revealed\" hx-swap=\"outerHTML\">\n  Loading more...\n\u003C\u002Fdiv>\n```\n\n### Lazy Loading\n\n```html\n\u003Cdiv hx-get=\"\u002Fdashboard\u002Fmetrics\" hx-trigger=\"load\" hx-swap=\"innerHTML\">\n  \u003Cdiv class=\"skeleton-loader\">\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\n### Active Search with URL State\n\n```html\n\u003Cinput type=\"search\" name=\"q\"\n  hx-get=\"\u002Fsearch\"\n  hx-trigger=\"input changed delay:300ms\"\n  hx-target=\"#results\"\n  hx-push-url=\"true\">\n```\n\n### Confirmation Dialogs\n\n```html\n\u003Cbutton hx-delete=\"\u002Fitems\u002F42\"\n        hx-confirm=\"Delete this item?\"\n        hx-target=\"#item-42\"\n        hx-swap=\"outerHTML swap:500ms\">\n  Delete\n\u003C\u002Fbutton>\n```\n\n### Server-Sent Events\n\n```html\n\u003Cdiv hx-ext=\"sse\" sse-connect=\"\u002Fevents\" sse-swap=\"message\">\n  Waiting for updates...\n\u003C\u002Fdiv>\n```\n\n```python\nfrom sse_starlette.sse import EventSourceResponse\n\n@app.get(\"\u002Fevents\")\nasync def events():\n    async def generate():\n        while True:\n            data = await get_update()\n            yield {\"data\": render_update(data)}\n    return EventSourceResponse(generate())\n```\n\n## Server-Side Patterns\n\n### Partial vs Full Responses\n\n```python\n@app.get(\"\u002Fitems\")\nasync def list_items(request: Request):\n    items = await get_items()\n    if \"HX-Request\" in request.headers:\n        # htmx request: return fragment\n        return HTMLResponse(render_items_fragment(items))\n    else:\n        # Normal request: return full page\n        return HTMLResponse(render_full_page(items))\n```\n\n### Response Headers\n\n```python\nfrom starlette.responses import HTMLResponse\n\n@app.post(\"\u002Fitems\")\nasync def create_item(request: Request):\n    item = await save_item(request)\n    response = HTMLResponse(render_item(item))\n    response.headers[\"HX-Trigger\"] = \"itemCreated\"  # Client-side event\n    response.headers[\"HX-Retarget\"] = \"#item-list\"\n    response.headers[\"HX-Reswap\"] = \"afterbegin\"\n    return response\n```\n\n### OOB (Out-of-Band) Swaps\n\nUpdate multiple elements from one response:\n\n```html\n\u003C!-- Primary swap -->\n\u003Cdiv id=\"item-42\">Updated item content\u003C\u002Fdiv>\n\u003C!-- OOB: also update the counter -->\n\u003Cspan id=\"item-count\" hx-swap-oob=\"true\">43 items\u003C\u002Fspan>\n```\n\n## CSS Integration\n\n```css\n\u002F* Loading indicator *\u002F\n.htmx-indicator { opacity: 0; transition: opacity 200ms; }\n.htmx-request .htmx-indicator { opacity: 1; }\n\n\u002F* Settling animation *\u002F\n.htmx-settling { opacity: 0; }\n.htmx-settled { opacity: 1; transition: opacity 300ms; }\n\n\u002F* Added items *\u002F\n.htmx-added { opacity: 0; }\n.htmx-settled.htmx-added { opacity: 1; transition: opacity 300ms; }\n```\n\n## Anti-Patterns\n\n- **Returning JSON from htmx endpoints** — Always return rendered HTML fragments\n- **Large page replacements** — Return small, targeted fragments\n- **No loading indicators** — Always show feedback during requests\n- **Ignoring non-htmx requests** — Support full-page loads for bookmarkability\n- **Client-side state management** — Keep state on the server; let HTML be the state\n","# htmx Interaction Patterns\n\nBuild dynamic interfaces with HTML-over-the-wire — server renders HTML fragments, htmx swaps them in.\n\n## Core Concepts\n\nhtmx extends HTML with attributes that make AJAX requests and swap content — no JavaScript required.\n\n```html\n\u003C!-- Click button → GET \u002Fitems → replace #item-list content -->\n\u003Cbutton hx-get=\"\u002Fitems\" hx-target=\"#item-list\" hx-swap=\"innerHTML\">\n  Load Items\n\u003C\u002Fbutton>\n\u003Cdiv id=\"item-list\">\u003C\u002Fdiv>\n```\n\n### Key Attributes\n\n| Attribute | Purpose | Example |\n|-----------|---------|---------|\n| `hx-get` | GET request | `hx-get=\"\u002Fapi\u002Fitems\"` |\n| `hx-post` | POST request | `hx-post=\"\u002Fapi\u002Fitems\"` |\n| `hx-put` | PUT request | `hx-put=\"\u002Fapi\u002Fitems\u002F1\"` |\n| `hx-delete` | DELETE request | `hx-delete=\"\u002Fapi\u002Fitems\u002F1\"` |\n| `hx-target` | Where to put response | `hx-target=\"#results\"` |\n| `hx-swap` | How to insert | `hx-swap=\"outerHTML\"` |\n| `hx-trigger` | When to fire | `hx-trigger=\"click\"` |\n| `hx-indicator` | Loading indicator | `hx-indicator=\"#spinner\"` |\n\n### Swap Strategies\n\n| Strategy | Behavior |\n|----------|----------|\n| `innerHTML` | Replace children (default) |\n| `outerHTML` | Replace entire target element |\n| `afterbegin` | Insert as first child |\n| `beforeend` | Insert as last child |\n| `beforebegin` | Insert before target |\n| `afterend` | Insert after target |\n| `delete` | Remove target |\n| `none` | No DOM update |\n\n## Common Patterns\n\n### Search with Debounce\n\n```html\n\u003Cinput type=\"search\" name=\"q\"\n  hx-get=\"\u002Fsearch\"\n  hx-trigger=\"input changed delay:300ms\"\n  hx-target=\"#results\"\n  hx-indicator=\"#search-spinner\"\n  placeholder=\"Search skills...\">\n\u003Cspan id=\"search-spinner\" class=\"htmx-indicator\">Searching...\u003C\u002Fspan>\n\u003Cdiv id=\"results\">\u003C\u002Fdiv>\n```\n\nServer returns an HTML fragment:\n```python\n@app.get(\"\u002Fsearch\")\nasync def search(q: str = \"\"):\n    results = search_skills(q)\n    return HTMLResponse(render_results(results))\n```\n\n### Inline Editing\n\n```html\n\u003C!-- View mode -->\n\u003Cdiv id=\"skill-42\" hx-get=\"\u002Fskills\u002F42\u002Fedit\" hx-trigger=\"dblclick\" hx-swap=\"outerHTML\">\n  \u003Ch3>testing-patterns\u003C\u002Fh3>\n  \u003Cp>Write effective tests across the stack...\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!-- Edit mode (returned by server) -->\n\u003Cform id=\"skill-42\" hx-put=\"\u002Fskills\u002F42\" hx-swap=\"outerHTML\">\n  \u003Cinput name=\"name\" value=\"testing-patterns\">\n  \u003Ctextarea name=\"description\">Write effective tests...\u003C\u002Ftextarea>\n  \u003Cbutton type=\"submit\">Save\u003C\u002Fbutton>\n  \u003Cbutton hx-get=\"\u002Fskills\u002F42\" hx-swap=\"outerHTML\">Cancel\u003C\u002Fbutton>\n\u003C\u002Fform>\n```\n\n### Infinite Scroll\n\n```html\n\u003Cdiv id=\"item-list\">\n  \u003C!-- Items rendered here -->\n  \u003Cdiv hx-get=\"\u002Fitems?page=2\"\n       hx-trigger=\"revealed\"\n       hx-swap=\"outerHTML\">\n    Loading more...\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\nServer returns items + next trigger:\n```html\n\u003Cdiv class=\"item\">Item 11\u003C\u002Fdiv>\n\u003Cdiv class=\"item\">Item 12\u003C\u002Fdiv>\n\u003C!-- Next page trigger -->\n\u003Cdiv hx-get=\"\u002Fitems?page=3\" hx-trigger=\"revealed\" hx-swap=\"outerHTML\">\n  Loading more...\n\u003C\u002Fdiv>\n```\n\n### Lazy Loading\n\n```html\n\u003Cdiv hx-get=\"\u002Fdashboard\u002Fmetrics\" hx-trigger=\"load\" hx-swap=\"innerHTML\">\n  \u003Cdiv class=\"skeleton-loader\">\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\n### Active Search with URL State\n\n```html\n\u003Cinput type=\"search\" name=\"q\"\n  hx-get=\"\u002Fsearch\"\n  hx-trigger=\"input changed delay:300ms\"\n  hx-target=\"#results\"\n  hx-push-url=\"true\">\n```\n\n### Confirmation Dialogs\n\n```html\n\u003Cbutton hx-delete=\"\u002Fitems\u002F42\"\n        hx-confirm=\"Delete this item?\"\n        hx-target=\"#item-42\"\n        hx-swap=\"outerHTML swap:500ms\">\n  Delete\n\u003C\u002Fbutton>\n```\n\n### Server-Sent Events\n\n```html\n\u003Cdiv hx-ext=\"sse\" sse-connect=\"\u002Fevents\" sse-swap=\"message\">\n  Waiting for updates...\n\u003C\u002Fdiv>\n```\n\n```python\nfrom sse_starlette.sse import EventSourceResponse\n\n@app.get(\"\u002Fevents\")\nasync def events():\n    async def generate():\n        while True:\n            data = await get_update()\n            yield {\"data\": render_update(data)}\n    return EventSourceResponse(generate())\n```\n\n## Server-Side Patterns\n\n### Partial vs Full Responses\n\n```python\n@app.get(\"\u002Fitems\")\nasync def list_items(request: Request):\n    items = await get_items()\n    if \"HX-Request\" in request.headers:\n        # htmx request: return fragment\n        return HTMLResponse(render_items_fragment(items))\n    else:\n        # Normal request: return full page\n        return HTMLResponse(render_full_page(items))\n```\n\n### Response Headers\n\n```python\nfrom starlette.responses import HTMLResponse\n\n@app.post(\"\u002Fitems\")\nasync def create_item(request: Request):\n    item = await save_item(request)\n    response = HTMLResponse(render_item(item))\n    response.headers[\"HX-Trigger\"] = \"itemCreated\"  # Client-side event\n    response.headers[\"HX-Retarget\"] = \"#item-list\"\n    response.headers[\"HX-Reswap\"] = \"afterbegin\"\n    return response\n```\n\n### OOB (Out-of-Band) Swaps\n\nUpdate multiple elements from one response:\n\n```html\n\u003C!-- Primary swap -->\n\u003Cdiv id=\"item-42\">Updated item content\u003C\u002Fdiv>\n\u003C!-- OOB: also update the counter -->\n\u003Cspan id=\"item-count\" hx-swap-oob=\"true\">43 items\u003C\u002Fspan>\n```\n\n## CSS Integration\n\n```css\n\u002F* Loading indicator *\u002F\n.htmx-indicator { opacity: 0; transition: opacity 200ms; }\n.htmx-request .htmx-indicator { opacity: 1; }\n\n\u002F* Settling animation *\u002F\n.htmx-settling { opacity: 0; }\n.htmx-settled { opacity: 1; transition: opacity 300ms; }\n\n\u002F* Added items *\u002F\n.htmx-added { opacity: 0; }\n.htmx-settled.htmx-added { opacity: 1; transition: opacity 300ms; }\n```\n\n## Anti-Patterns\n\n- **Returning JSON from htmx endpoints** — Always return rendered HTML fragments\n- **Large page replacements** — Return small, targeted fragments\n- **No loading indicators** — Always show feedback during requests\n- **Ignoring non-htmx requests** — Support full-page loads for bookmarkability\n- **Client-side state management** — Keep state on the server; let HTML be the state\n",{"name":5,"tags":49,"license":15,"triggers":53,"complexity":58,"complements":59,"description":7,"time_to_learn":63,"organ_affinity":64,"governance_phases":66},[25,50,51,52],"hypermedia","progressive-enhancement","server-side-rendering",[54,55,56,57],"user-asks-about-htmx","project-has-htmx","context:hypermedia","context:progressive-enhancement","intermediate",[60,61,62],"fastapi-patterns","backend-implementation-patterns","responsive-design-patterns","30min",[65],"meta",[67],"build","main","4d2fb89cdfb75f3f6fd3c6c5ec9ad90ea129eb3c","ai-agent-skills\u002F21-external-registries\u002F18-organvm-skills\u002Fdevelopment\u002Fhtmx-interaction-patterns",2,"https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai","https:\u002F\u002Fgithub.com\u002Fluokai0","a solo builder.","2026-05-06 04:29:04",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill htmx-interaction-patterns",{"tool":82,"command":83},"bunx","bunx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill htmx-interaction-patterns",{"tool":85,"command":86},"pnpm","pnpm dlx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill htmx-interaction-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F21-external-registries\u002F18-organvm-skills\u002Fdevelopment\u002Fhtmx-interaction-patterns\u002FSKILL.md",true,[],[91,118,135,161,193,228],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":44},"01M6F2SKTE208174C7S7JJCZC7","write-contracts","Generates secure Aptos Move V2 smart contracts with Object model, Digital Asset integration, security patterns, and storage type guidance. Includes comprehensive storage decision framework for optimal data structure selection. Triggers on: 'write contract', 'create NFT collection', 'build marketplace', 'implement minting', 'generate Move module', 'create token contract', 'build DAO', 'implement staking'. Ask storage questions when: 'store', 'track', 'registry', 'mapping', 'list', 'collection'.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fwrite-contracts\u002FSKILL.md",[],[98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117],"write","contracts","write contracts","storage","secure","create","generate","collection","model","decision","ask","smart-contracts","selection","objects","structure","nft","token","aptos","critical","move",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":44},"01M6F2RFXJ6T9MKW0A7N7GM45B","web-search","通用网络搜索技能，支持多引擎搜索（百度、必应、DuckDuckGo），无需API密钥即可获取实时信息","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fweb-search-ex-skill\u002FSKILL.md",[],[125,126,127,128,129,130,131,132,133,134],"web","search","web search","搜索","baidu","bing","duckduckgo","百度","多引擎","internet",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":144,"publishedAt":44},"01M6F2K968G1FZEZFPW2E6B222","solo-build","Execute implementation plan tasks with TDD workflow, auto-commit, and phase gates. Use when user says \"build it\", \"start building\", \"execute plan\", \"implement tasks\", \"ship it\", or references a track ID. Do NOT use for planning (use \u002Fplan) or scaffolding (use \u002Fscaffold).","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fsolo-build\u002FSKILL.md",[141],{"categoryNo":142,"categoryName":143,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[67,145,146,147,148,149,150,151,126,152,153,154,98,155,156,157,158,159,160,28],"solo","solo build","MCP","workflow","commit","tasks","code","Bash","plan","read","auto","references","context7","query","scaffolding","ship it",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":173,"publishedAt":44},"01M6F2GKN39SGHSPWYB3662YC8","react-email","Use when building HTML email templates with React components, adding a visual email editor to an application using the React Email visual editor, rendering emails to HTML, or sending emails with Resend. Covers welcome emails, password resets, notifications, order confirmations, newsletters, transactional emails, and the embeddable email editor component.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Freact-email-skills\u002FSKILL.md",[167,170],{"categoryNo":168,"categoryName":169,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":171,"categoryName":172,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,30,192],"react","email","react email","github","editor","components","react components","component","welcome","https","notifications","password","node","use","html","resend","visual","emails","with",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":209,"publishedAt":44},"01M6F2FBVGVDFSG8SSFJGXA40C","APITester Agent-Driven API Testing","Test API endpoints and document responses. Define tests in plain English, run them, get formatted results. Agent-driven Postman alternative.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fopenclaw-api-tester\u002FSKILL.md",[199,202,203,204],{"categoryNo":200,"categoryName":201,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":142,"categoryName":143,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":205,"categoryName":206,"taxonomyType":207,"taxonomyTypeDesc":208},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227],"testing","api","api testing","driven","APITester Agent Driven API Testing","test","run","postman","results","plain english","tester","endpoints","document","get","define","tests","english","api-tester",{"skillNo":229,"name":230,"nameZh":6,"description":231,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":232,"categories":233,"keywords":234,"publishedAt":44},"01M6F273Y3NGAPVJZ608BC0G9G","hubspot-implementation-plan","Generate a phased implementation plan from a HubSpot audit report. Creates prioritized, sequenced cleanup processes with effort estimates, dependencies, and automation feasibility. Use after running \u002Fhubspot-audit.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fhubspot-implementation-plan\u002FSKILL.md",[],[153,235,236,237,238,239,240,104,241,242,243,244,245,187,246,247,192,248],"implementation","hubspot","hubspot implementation plan","automation","feasibility","cleanup","planning","report","audit","audit report","phased implementation","dependencies","processes","hubspot audit"]