[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H88E98X9KGGYBGSVDS1E8H":3,"skill-same:01M6H88E98X9KGGYBGSVDS1E8H":76},{"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":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":14,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":75},"01M6H88E98X9KGGYBGSVDS1E8H","to-seams",null,"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.","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\u002Fworkflow\u002Fto-seams\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","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],"to seams","as","new","when","neither","for","can","true","interface","block","it","records","writing","record","either","but","build","schema","use","command","prompt","repo","file","repos","2026-11-10 10:12:30",false,"---\nname: to-seams\ndescription: >\n  Records an agreed-but-unlanded cross-repo interface as a seam: the file a consumer's agent gets\n  pasted into its prompt as ground truth, plus the `[[seam]]` block command-centre reads for the\n  retirement pointer. Use when two repos need to build against an interface neither has landed\n  yet — \"record a seam for X\", \"we agreed on this schema, seam it\", \"add a seam so Y can build\n  against Z's new field\". Halts for approval before writing either file.\ndisable-model-invocation: true\n---\n\n# Record a seam\n\nA seam is a pasted-in agreement, not a parsed contract: the file goes into a consumer's prompt\nbyte-for-byte, so what you write here is what the agent reads as ground truth until the producer\nlands the real thing (design §6).\n\n## Process\n\n1. **Find the workspace.** Same resolution `to-tickets` step 7 uses:\n\n   ```bash\n   ls \"$(git rev-parse --show-toplevel)\u002F..\u002F.claude\u002Fcommand-centre.toml\" 2>\u002Fdev\u002Fnull\n   ```\n\n   If it's absent, say so and stop — a seam with no `[[seam]]` config to read it is pointless.\n\n2. **Ask for the four things a seam needs:**\n   - **Name** — a short slug (`customer-tier-field`). Becomes the seam filename and the\n     `[[seam]]` key.\n   - **Producer repo** — the `[[repo]]` name in `command-centre.toml` that will land the real\n     thing.\n   - **Consumer repo(s)** — whichever repos are building against the agreement now. Not written\n     to config — only `producer_repo` and `lands_at` are read by anything, the retirement pointer\n     — this is so you know which tickets' next `to-tickets` run should list this seam by name in\n     their `seams = [...]`.\n   - **`lands_at`** — one or more paths, in the producer repo, the real thing will live at once it\n     merges. Optional: if the landing path isn't settled yet, leave it empty and say so — an empty\n     `lands_at` just means \"no retirement\", not an error.\n\n3. **Get the agreed interface itself.** Ask the user to paste or dictate exactly what a consumer's\n   agent should read — a schema, a type, a function signature, whatever the two sides agreed on.\n   Paste it in verbatim: nothing here is parsed, marked up, or addressed by symbol (design §6). If\n   the user hands you prose describing the agreement rather than the interface text itself, ask\n   for the actual text instead of summarising it back to them.\n\n4. **Show both writes, then halt for approval.** Before touching disk, show:\n   - The seam file's exact planned content, in full.\n   - The `[[seam]]` block exactly as it will be appended:\n     ```toml\n     [[seam]]\n     name          = \"\u003Cname>\"\n     producer_repo = \"\u003Cproducer repo>\"\n     lands_at      = [\"\u003Cpath>\", …]\n     ```\n   Wait for explicit confirmation before writing either file (§10) — a seam silently written is a\n   prompt silently changed under whoever cuts a task against it next.\n\n5. **Write, in this order:** the seam file at `\u003Cworkspace>\u002F.claude\u002Fseams\u002F\u003Cname>`, then append the\n   `[[seam]]` block to `\u003Cworkspace>\u002F.claude\u002Fcommand-centre.toml`. Upsert on `name`: if a\n   `[[seam]]` block for this name already exists, replace it in place rather than duplicating it,\n   and say so.\n\n## Finishing up\n\nTell the user the seam's name and which consumer tickets should list it in `seams = [...]` the\nnext time `to-tickets` runs for those repos.\n","# Record a seam\n\nA seam is a pasted-in agreement, not a parsed contract: the file goes into a consumer's prompt\nbyte-for-byte, so what you write here is what the agent reads as ground truth until the producer\nlands the real thing (design §6).\n\n## Process\n\n1. **Find the workspace.** Same resolution `to-tickets` step 7 uses:\n\n   ```bash\n   ls \"$(git rev-parse --show-toplevel)\u002F..\u002F.claude\u002Fcommand-centre.toml\" 2>\u002Fdev\u002Fnull\n   ```\n\n   If it's absent, say so and stop — a seam with no `[[seam]]` config to read it is pointless.\n\n2. **Ask for the four things a seam needs:**\n   - **Name** — a short slug (`customer-tier-field`). Becomes the seam filename and the\n     `[[seam]]` key.\n   - **Producer repo** — the `[[repo]]` name in `command-centre.toml` that will land the real\n     thing.\n   - **Consumer repo(s)** — whichever repos are building against the agreement now. Not written\n     to config — only `producer_repo` and `lands_at` are read by anything, the retirement pointer\n     — this is so you know which tickets' next `to-tickets` run should list this seam by name in\n     their `seams = [...]`.\n   - **`lands_at`** — one or more paths, in the producer repo, the real thing will live at once it\n     merges. Optional: if the landing path isn't settled yet, leave it empty and say so — an empty\n     `lands_at` just means \"no retirement\", not an error.\n\n3. **Get the agreed interface itself.** Ask the user to paste or dictate exactly what a consumer's\n   agent should read — a schema, a type, a function signature, whatever the two sides agreed on.\n   Paste it in verbatim: nothing here is parsed, marked up, or addressed by symbol (design §6). If\n   the user hands you prose describing the agreement rather than the interface text itself, ask\n   for the actual text instead of summarising it back to them.\n\n4. **Show both writes, then halt for approval.** Before touching disk, show:\n   - The seam file's exact planned content, in full.\n   - The `[[seam]]` block exactly as it will be appended:\n     ```toml\n     [[seam]]\n     name          = \"\u003Cname>\"\n     producer_repo = \"\u003Cproducer repo>\"\n     lands_at      = [\"\u003Cpath>\", …]\n     ```\n   Wait for explicit confirmation before writing either file (§10) — a seam silently written is a\n   prompt silently changed under whoever cuts a task against it next.\n\n5. **Write, in this order:** the seam file at `\u003Cworkspace>\u002F.claude\u002Fseams\u002F\u003Cname>`, then append the\n   `[[seam]]` block to `\u003Cworkspace>\u002F.claude\u002Fcommand-centre.toml`. Upsert on `name`: if a\n   `[[seam]]` block for this name already exists, replace it in place rather than duplicating it,\n   and say so.\n\n## Finishing up\n\nTell the user the seam's name and which consumer tickets should list it in `seams = [...]` the\nnext time `to-tickets` runs for those repos.\n",{"name":5,"description":53,"disable-model-invocation":54},"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.\n",true,"main","aede9f7bc29a2d9127fa7ce29682c242596c7759","skills\u002Fworkflow\u002Fto-seams","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":64,"prompt":74,"zipAvailable":54},[65,68,71],{"tool":66,"command":67},"npx","npx skills add O-Marsters-1997\u002Fmy-claude-code --skill to-seams",{"tool":69,"command":70},"bunx","bunx skills add O-Marsters-1997\u002Fmy-claude-code --skill to-seams",{"tool":72,"command":73},"pnpm","pnpm dlx skills add O-Marsters-1997\u002Fmy-claude-code --skill to-seams","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-seams\u002FSKILL.md",[],[77,85,92,114,141,163],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":84},"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":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":84},"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":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":48},"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",[],[99,100,25,101,26,102,103,104,43,105,106,107,108,109,110,31,111,112,45,29,113],"to tickets","tickets","code","cut","worktrees","run","github","plan","batch","task","manifest","plans","ticket","signatures","feature",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":125,"publishedAt":48},"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",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[126,127,128,129,27,130,131,132,100,133,134,106,135,136,31,111,137,138,139,113,140,25],"to roadmap","roadmap","via","features","doc","board","about","next","later","self","now","card","re","ideas","never",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":48},"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",[147],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},[149,150,151,152,25,113,100,153,154,155,156,157,158,106,159,160,161,162,31,138],"prd","to prd","problem","which","interviews","codebase","report","line","delivery","spine","say","state","multi","ask",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":48},"01M6H881QEEP49HPBMDYDFJQP9","to-plan","Turns one feature's PRD into a skimmable plan in docs\u002Fplans\u002F\u003Cfeature>.md: a short overview, then per phase a glossary, the journeys it satisfies, and its new and modified definitions (types, enums, ports, schema), with the project:\u003Cslug> label. No code, branch or PR; the user's review of the file is the gate. Use for \"plan this feature\", \"write the contract\", \"what are the types\". One feature per run. Slash-only.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-plan\u002FSKILL.md",[],[170,106,171,172,173,113,26,174,101,46,42,41,175,176,110,177,31,178,179,180,181,29],"to plan","ports","glossary","types","\u003Cslug>","only","contract","overview","short","project","branch","pr"]