[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H81TYAHSRP3D8P2M8X6RPK":3,"skill-same:01M6H81TYAHSRP3D8P2M8X6RPK":117},{"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":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":14,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":66,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6H81TYAHSRP3D8P2M8X6RPK","htmx-go-templates",null,"htmx on Go html\u002Ftemplate: how a handler picks page, fragment or redirect, how templates carry hx-* attributes, where client JS lives, and how errors and polling surface. TRIGGER — load BEFORE writing, not after: a .tmpl or .gohtml file is created or edited; an hx-* attribute or HX-* header is added or changed; a Go handler calls ExecuteTemplate or reads HX-Request; the prompt names htmx, hx-get, hx-swap, a fragment, partial, swap target, polling or an htmx event. Trigger on plain requests in a Go + htmx repo — \"add a page\", \"make this form inline\", \"refresh this every 5s\", \"why doesn't the error show\". Load alongside go-idiomatic. SKIP for templ components, JSON APIs and React or Solid UIs.","O-Marsters-1997\u002Fmy-claude-code","O-Marsters-1997","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72571979?v=4","01M6H800V7V9BSXYZKDM0JXTJ2","Olly Marsters","01M6H800ZYDJR42TNRH0E6ZVZ7",0,"MIT","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"go","htmx go templates","templates","htmx","request","writing","inline","for","fragment","load","templ","calls","errors","attributes","event","error","form","trigger","get","show","read","prompt","repo","page","template","Bash","why","how","react","components","2026-11-10 10:12:30",false,"---\nname: htmx-go-templates\ndescription: >\n  htmx on Go html\u002Ftemplate: how a handler picks page, fragment or redirect, how templates\n  carry hx-* attributes, where client JS lives, and how errors and polling surface.\n  TRIGGER — load BEFORE writing, not after: a .tmpl or .gohtml file is created or edited;\n  an hx-* attribute or HX-* header is added or changed; a Go handler calls ExecuteTemplate\n  or reads HX-Request; the prompt names htmx, hx-get, hx-swap, a fragment, partial, swap\n  target, polling or an htmx event. Trigger on plain requests in a Go + htmx repo — \"add a\n  page\", \"make this form inline\", \"refresh this every 5s\", \"why doesn't the error show\".\n  Load alongside go-idiomatic. SKIP for templ components, JSON APIs and React or Solid UIs.\nallowed-tools: Read, Edit, Write, Glob, Grep, Bash(go:*), Bash(git:*)\n---\n\n# htmx on Go html\u002Ftemplate\n\nThe server owns state; a template only presents it; htmx moves HTML between the two. Most drift\nin these apps comes from that split being decided ad hoc, per handler and per template: seven ways\nto detect an htmx request, the same four attributes hand-copied across files, errors that vanish.\nThe rules below make each of those decisions once.\n\nThis skill holds the general rules. The repo's AGENTS.md holds what only the repo knows: its\nswap-target ids, the names of its shared partials, and the htmx version it vendors. Read it first.\n\n## Where to look\n\n| If you're working on… | Load |\n|---|---|\n| A handler: choosing page \u002F fragment \u002F redirect, htmx headers, `Vary`, 303, error responses | `references\u002Fresponses.md` |\n| A template: partials, repeated attribute bundles, forms, live regions, conditionals | `references\u002Ftemplates.md` |\n| Any client JS: whether you need it at all, islands, htmx glue, polling guards, `aria-busy` | `references\u002Fclient.md` |\n\n## The rules\n\n1. **htmx headers go through one helper set, never hand-typed strings.**\n   A typo in `\"HX-Request\"` or a check for `\"\"` instead of `\"true\"` fails silently; one package\n   of constants and predicates makes the wrong spelling unrepresentable. If the repo has no such\n   set yet, introduce it the first time a handler you touch needs an htmx header — `Vary` included.\n2. **Every route declares its response shape — page, fragment or redirect — in one place.**\n   A handler that sniffs headers inline grows a new branch per feature. When one URL can return\n   either a page or a fragment, set `Vary: HX-Request`, or a cache or the back button can serve\n   the bare fragment as a page. A history-restore request (`HX-History-Restore-Request: true`)\n   always gets the full page.\n3. **A non-htmx form POST answers 303 to a GET; an htmx one answers `HX-Location` or a fragment.**\n   303 stops a refresh from resubmitting. A 303 to an htmx request is followed by the XHR and the\n   whole redirected page gets swapped into the target, which is never what you want.\n4. **Forms work without JavaScript.** Real `action` and `method`, a real submit button; htmx\n   attributes layer on top. The non-JS path is also the path the 303 rule serves.\n5. **A repeated attribute bundle becomes a named `{{define}}` partial.** Four attributes copied to\n   seventeen links drift the moment one copy changes. One partial, one place to change it.\n   (`codebase-design` has the vocabulary for why: one deep module beats many shallow copies.)\n6. **Polling never fights the user.** `hx-sync` on every polling element, a guard that skips the\n   poll while the user is focused or typing inside the target, and a target that never contains\n   an input the user may be editing.\n7. **Errors reach the user.** htmx 2.x does not swap 4xx\u002F5xx bodies by default, so a refused\n   action looks like nothing happened. Fix it in two halves: a `responseHandling` entry that swaps\n   the status you use (typically 422), *and* `HX-Retarget` \u002F `HX-Reswap` from the server so the\n   error lands in a known region. That region is a persistent `aria-live` container.\n8. **In-flight state is visible.** `hx-disabled-elt` on submit controls so a double-click cannot\n   double-submit; `hx-indicator` or `aria-busy` on the region being replaced.\n9. **Client JS is the exception, and it is never inline.** Before writing any, ask whether the\n   server can own it (a preference, a re-rendered region) or HTML can (`\u003Cdetails>`, `\u003Cdialog>`,\n   `popover`). A widget with real client state becomes an island in the repo's frontend framework,\n   mounted through `htmx.onLoad` and unmounted on swap. The only other JS is a fixed set of htmx\n   glue listeners. No `\u003Cscript>` blocks, `onclick` or `hx-on` in templates: inline handlers are\n   untestable and re-run unpredictably on swaps. htmx config goes in `\u003Cmeta name=\"htmx-config\">`\n   with `\"allowEval\": false`, so htmx itself refuses `hx-on` and `js:` values.\n10. **Templates branch on presentation only.** `{{if eq .Status \"failed\"}}` chains are domain\n    logic in the wrong layer. Compute a view-model field in Go (`.Badge`, `.CanRetry`) and let the\n    template read it.\n\n## Choosing a response shape\n\n```\nrequest ──► HX-History-Restore-Request: true? ──yes──► page\n               │ no\n               ▼\n            HX-Request: true? ──no──► POST? ──yes──► 303 to GET (or re-render page with 422 on invalid)\n               │ yes                       └─no──► page\n               ▼\n            route declares: fragment ──► ExecuteTemplate(w, \"\u003Cblock>\", vm)\n                            page+select ──► page (template uses hx-select)\n                            redirect ──► HX-Location (or HX-Redirect for a full reload)\n```\n\n`references\u002Fresponses.md` has the helper set and a handler written both ways.\n\n## htmx version\n\nThese rules target **htmx 2.x**. Check the version the repo vendors before relying on defaults.\nIf it is on 4.x, re-check rules 7 and 9 against the\n[4.x migration notes](https:\u002F\u002Ffour.htmx.org\u002Fdocs\u002Fwhats-new-in-htmx-4):\n\n- error responses swap by default, with per-status control through `hx-status`;\n- attribute inheritance is explicit, so bundles that relied on inheriting `hx-target` break;\n- event names changed, so listeners in the TS module need renaming.\n\n## What not to do\n\n- Don't reach for the `response-targets` extension to route errors. It moves a server decision\n  into markup and adds a second mechanism next to `HX-Retarget`.\n- Don't swap an `aria-live` region with `outerHTML`. Screen readers track the original node; a\n  replaced live region announces nothing. Swap its `innerHTML`.\n- Don't render into the `ResponseWriter` directly. Execute into a buffer first, so a template\n  error becomes a 500 rather than a half-written 200.\n- Don't add `hx-boost` to fix a navigation problem. Declare the nav-link partial instead; boost\n  changes every link and form under it at once.\n- Don't restate the htmx attribute reference here or in the repo; link\n  [htmx.org\u002Freference](https:\u002F\u002Fhtmx.org\u002Freference\u002F).\n","# htmx on Go html\u002Ftemplate\n\nThe server owns state; a template only presents it; htmx moves HTML between the two. Most drift\nin these apps comes from that split being decided ad hoc, per handler and per template: seven ways\nto detect an htmx request, the same four attributes hand-copied across files, errors that vanish.\nThe rules below make each of those decisions once.\n\nThis skill holds the general rules. The repo's AGENTS.md holds what only the repo knows: its\nswap-target ids, the names of its shared partials, and the htmx version it vendors. Read it first.\n\n## Where to look\n\n| If you're working on… | Load |\n|---|---|\n| A handler: choosing page \u002F fragment \u002F redirect, htmx headers, `Vary`, 303, error responses | `references\u002Fresponses.md` |\n| A template: partials, repeated attribute bundles, forms, live regions, conditionals | `references\u002Ftemplates.md` |\n| Any client JS: whether you need it at all, islands, htmx glue, polling guards, `aria-busy` | `references\u002Fclient.md` |\n\n## The rules\n\n1. **htmx headers go through one helper set, never hand-typed strings.**\n   A typo in `\"HX-Request\"` or a check for `\"\"` instead of `\"true\"` fails silently; one package\n   of constants and predicates makes the wrong spelling unrepresentable. If the repo has no such\n   set yet, introduce it the first time a handler you touch needs an htmx header — `Vary` included.\n2. **Every route declares its response shape — page, fragment or redirect — in one place.**\n   A handler that sniffs headers inline grows a new branch per feature. When one URL can return\n   either a page or a fragment, set `Vary: HX-Request`, or a cache or the back button can serve\n   the bare fragment as a page. A history-restore request (`HX-History-Restore-Request: true`)\n   always gets the full page.\n3. **A non-htmx form POST answers 303 to a GET; an htmx one answers `HX-Location` or a fragment.**\n   303 stops a refresh from resubmitting. A 303 to an htmx request is followed by the XHR and the\n   whole redirected page gets swapped into the target, which is never what you want.\n4. **Forms work without JavaScript.** Real `action` and `method`, a real submit button; htmx\n   attributes layer on top. The non-JS path is also the path the 303 rule serves.\n5. **A repeated attribute bundle becomes a named `{{define}}` partial.** Four attributes copied to\n   seventeen links drift the moment one copy changes. One partial, one place to change it.\n   (`codebase-design` has the vocabulary for why: one deep module beats many shallow copies.)\n6. **Polling never fights the user.** `hx-sync` on every polling element, a guard that skips the\n   poll while the user is focused or typing inside the target, and a target that never contains\n   an input the user may be editing.\n7. **Errors reach the user.** htmx 2.x does not swap 4xx\u002F5xx bodies by default, so a refused\n   action looks like nothing happened. Fix it in two halves: a `responseHandling` entry that swaps\n   the status you use (typically 422), *and* `HX-Retarget` \u002F `HX-Reswap` from the server so the\n   error lands in a known region. That region is a persistent `aria-live` container.\n8. **In-flight state is visible.** `hx-disabled-elt` on submit controls so a double-click cannot\n   double-submit; `hx-indicator` or `aria-busy` on the region being replaced.\n9. **Client JS is the exception, and it is never inline.** Before writing any, ask whether the\n   server can own it (a preference, a re-rendered region) or HTML can (`\u003Cdetails>`, `\u003Cdialog>`,\n   `popover`). A widget with real client state becomes an island in the repo's frontend framework,\n   mounted through `htmx.onLoad` and unmounted on swap. The only other JS is a fixed set of htmx\n   glue listeners. No `\u003Cscript>` blocks, `onclick` or `hx-on` in templates: inline handlers are\n   untestable and re-run unpredictably on swaps. htmx config goes in `\u003Cmeta name=\"htmx-config\">`\n   with `\"allowEval\": false`, so htmx itself refuses `hx-on` and `js:` values.\n10. **Templates branch on presentation only.** `{{if eq .Status \"failed\"}}` chains are domain\n    logic in the wrong layer. Compute a view-model field in Go (`.Badge`, `.CanRetry`) and let the\n    template read it.\n\n## Choosing a response shape\n\n```\nrequest ──► HX-History-Restore-Request: true? ──yes──► page\n               │ no\n               ▼\n            HX-Request: true? ──no──► POST? ──yes──► 303 to GET (or re-render page with 422 on invalid)\n               │ yes                       └─no──► page\n               ▼\n            route declares: fragment ──► ExecuteTemplate(w, \"\u003Cblock>\", vm)\n                            page+select ──► page (template uses hx-select)\n                            redirect ──► HX-Location (or HX-Redirect for a full reload)\n```\n\n`references\u002Fresponses.md` has the helper set and a handler written both ways.\n\n## htmx version\n\nThese rules target **htmx 2.x**. Check the version the repo vendors before relying on defaults.\nIf it is on 4.x, re-check rules 7 and 9 against the\n[4.x migration notes](https:\u002F\u002Ffour.htmx.org\u002Fdocs\u002Fwhats-new-in-htmx-4):\n\n- error responses swap by default, with per-status control through `hx-status`;\n- attribute inheritance is explicit, so bundles that relied on inheriting `hx-target` break;\n- event names changed, so listeners in the TS module need renaming.\n\n## What not to do\n\n- Don't reach for the `response-targets` extension to route errors. It moves a server decision\n  into markup and adds a second mechanism next to `HX-Retarget`.\n- Don't swap an `aria-live` region with `outerHTML`. Screen readers track the original node; a\n  replaced live region announces nothing. Swap its `innerHTML`.\n- Don't render into the `ResponseWriter` directly. Execute into a buffer first, so a template\n  error becomes a 500 rather than a half-written 200.\n- Don't add `hx-boost` to fix a navigation problem. Declare the nav-link partial instead; boost\n  changes every link and form under it at once.\n- Don't restate the htmx attribute reference here or in the repo; link\n  [htmx.org\u002Freference](https:\u002F\u002Fhtmx.org\u002Freference\u002F).\n",{"name":5,"description":59,"allowed-tools":60},"htmx on Go html\u002Ftemplate: how a handler picks page, fragment or redirect, how templates carry hx-* attributes, where client JS lives, and how errors and polling surface. TRIGGER — load BEFORE writing, not after: a .tmpl or .gohtml file is created or edited; an hx-* attribute or HX-* header is added or changed; a Go handler calls ExecuteTemplate or reads HX-Request; the prompt names htmx, hx-get, hx-swap, a fragment, partial, swap target, polling or an htmx event. Trigger on plain requests in a Go + htmx repo — \"add a page\", \"make this form inline\", \"refresh this every 5s\", \"why doesn't the error show\". Load alongside go-idiomatic. SKIP for templ components, JSON APIs and React or Solid UIs.\n","Read, Edit, Write, Glob, Grep, Bash(go:*), Bash(git:*)","main","aede9f7bc29a2d9127fa7ce29682c242596c7759","skills\u002Fcode\u002Fhtmx-go-templates","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997","https:\u002F\u002Fpersonal-portfolio-v2-phi.vercel.app","Go & TypeScript developer building tooling for AI-assisted development: git worktree workflows, Claude Code skills and agent orchestration.","2026-11-11 22:26:34",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add O-Marsters-1997\u002Fmy-claude-code --skill htmx-go-templates",{"tool":75,"command":76},"bunx","bunx skills add O-Marsters-1997\u002Fmy-claude-code --skill htmx-go-templates",{"tool":78,"command":79},"pnpm","pnpm dlx skills add O-Marsters-1997\u002Fmy-claude-code --skill htmx-go-templates","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002FSKILL.md",true,[83,89,95,99,105,109,113],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"evals\u002Fevals.json","REFERENCE","参考文档",8900,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Fevals\u002Fevals.json",{"path":90,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":93,"sourceHtmlUrl":94},"evals\u002Ffixtures\u002Fboard.tmpl","OTHER","其他",817,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Fevals\u002Ffixtures\u002Fboard.tmpl",{"path":96,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":97,"sourceHtmlUrl":98},"evals\u002Ffixtures\u002Flayout.tmpl",1010,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Fevals\u002Ffixtures\u002Flayout.tmpl",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"evals\u002Ffixtures\u002Fserver.go","SCRIPT","脚本",1677,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Fevals\u002Ffixtures\u002Fserver.go",{"path":106,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fclient.md",6719,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Freferences\u002Fclient.md",{"path":110,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fresponses.md",5302,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Freferences\u002Fresponses.md",{"path":114,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Ftemplates.md",4712,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fhtmx-go-templates\u002Freferences\u002Ftemplates.md",[118,126,133,159,185,212],{"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":125},"01M745F5J4Z2W32G4QXESCN5PM","vault-recall","Answer the user's conceptual or technical question using their Obsidian vault as well as general knowledge. Use when the user asks a question (not a task) whose topic appears in the vault MOC digest from session start. Not for task instructions, not mid-task, and not for writing to the vault (that is to-vault).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fvault-recall\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":125},"01M745EW5W0A7K9016Z54A4KG2","ingest","Ingest one external source (an article, course lesson, doc, PDF or URL) into the user's Obsidian vault: save the original to raw\u002F, then build wiki\u002F pages per the vault's § Ingest. Use when the user types \u002Fingest, or says \"ingest this\", \"add this source to my wiki\", \"put this article\u002Flesson in the vault as a wiki page\". Works from any repo. Routing rule: someone else's words go to wiki\u002F (this skill); the user's own learnings and decisions go to notes\u002F (\u002Fto-vault).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fingest\u002FSKILL.md",[],[],{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":54},"01M6H88J6TYRV9T8RKWW569YM8","to-tickets","Breaks a source into independently-grabbable GitHub tickets. For a code feature the source is the plan (`docs\u002Fplans\u002F\u003Cfeature>.md`, from \u002Fto-plan) and every new or changed symbol lands in exactly one ticket, its signatures copied into the ticket body; a non-code feature is cut from the PRD's slices. Cuts tickets for one feature per run. If a code feature has no approved plan, offers \u002Fto-plan instead of cutting from prose. In a repo that runs command-centre, also emits `[[task]]` blocks into its config; in a plain treepad repo, emits a Batch Manifest instead so the tickets materialise as stacked worktrees.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-tickets\u002FSKILL.md",[],[140,141,142,143,144,145,146,147,148,149,150,151,152,153,46,31,154,155,156,157,158],"tickets","to tickets","new","signatures","github","plan","batch","task","code","manifest","plans","true","ticket","command","feature","run","worktrees","as","cut",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":54},"01M6H88E98X9KGGYBGSVDS1E8H","to-seams","Records an agreed-but-unlanded cross-repo interface as a seam: the file a consumer's agent gets pasted into its prompt as ground truth, plus the `[[seam]]` block command-centre reads for the retirement pointer. Use when two repos need to build against an interface neither has landed yet — \"record a seam for X\", \"we agreed on this schema, seam it\", \"add a seam so Y can build against Z's new field\". Halts for approval before writing either file.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-seams\u002FSKILL.md",[165],{"categoryNo":166,"categoryName":167,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[169,170,142,171,172,173,174,45,175,176,29,177,178,151,179,180,181,46,31,182,183,184,157,153],"to seams","schema","neither","it","but","file","either","use","when","interface","repos","block","records","build","can","record",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":196,"publishedAt":54},"01M6H889PSQM2E1ATS2JC10QRV","to-roadmap","Prioritises settled features into a Now \u002F Next \u002F Later kanban board, rendered as a self-contained .\u002Fideas\u002Froadmap.html. Each card is a feature, not a ticket — one card later becomes several tickets via \u002Fto-prd -> \u002Fto-plan -> \u002Fto-tickets. Boards the features in .\u002Fdocs\u002Fapproach.md, or the \"## Accepted ideas\" in .\u002Fideas\u002FCONTEXT.md when there is no approach doc. The approach doc is settled truth: this assigns tiers and reasons about ordering, it never re-litigates what was decided.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-roadmap\u002FSKILL.md",[191],{"categoryNo":192,"categoryName":193,"taxonomyType":194,"taxonomyTypeDesc":195},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[197,198,199,157,154,200,201,177,202,203,204,140,205,206,145,207,208,151,152,209,210,211],"to roadmap","roadmap","never","via","features","doc","board","about","next","later","self","now","card","re","ideas",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":219,"publishedAt":54},"01M6H885QAK839Q771ZBKBK1KA","to-prd","Turns one feature idea into a PRD built on journeys: a one-line problem, journeys (each ending in an observable state) and delivery slices that say what is usable after each. Interviews, explores the codebase, and saves to docs\u002Fprds\u002F\u003Cfeature>.md. Covers exactly one feature: given a multi-feature source, ask which one. Reads any approach doc or ideate report as priors so it doesn't re-ask what's settled, but needs none. Starts the per-feature spine (\u002Fto-prd -> \u002Fto-plan -> \u002Fto-tickets).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-prd\u002FSKILL.md",[218],{"categoryNo":192,"categoryName":193,"taxonomyType":194,"taxonomyTypeDesc":195},[220,221,222,223,224,225,226,227,140,228,145,229,230,231,151,210,154,232,233,157],"prd","to prd","say","interviews","codebase","report","line","delivery","spine","state","multi","ask","problem","which"]