[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C43KZ2X5FN5VJBBGSCG78M":3,"skill-same:01M6C43KZ2X5FN5VJBBGSCG78M":78},{"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":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M6C43KZ2X5FN5VJBBGSCG78M","prototype",null,"Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.","colliery-io\u002Fkairos","colliery-io","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F167646339?v=4","01M6C4368BHZH1AYSJ3SX124ET","Colliery","01M6C436CSYPJ80ZNK1SA2Q7Z3",1,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fengineering\u002Fprototype\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"when","design","throwaway","state model","answer","sanity","logic","build","look","use","user","question","check","model","explore","ui","state","2026-11-10 10:12:30",false,"---\nname: prototype\ndescription: Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.\n---\n\n# Prototype\n\nA prototype is **throwaway code that answers a question**. The question decides the shape.\n\n## Pick a branch\n\nIdentify which question is being answered — from the user's prompt, the surrounding code, or by asking if the user is around:\n\n- **\"Does this logic \u002F state model feel right?\"** → [LOGIC.md](LOGIC.md). Build a tiny interactive terminal app that pushes the state machine through cases that are hard to reason about on paper.\n- **\"What should this look like?\"** → [UI.md](UI.md). Generate several radically different UI variations on a single route, switchable via a URL search param and a floating bottom bar.\n\nThe two branches produce very different artifacts — getting this wrong wastes the whole prototype. If the question is genuinely ambiguous and the user isn't reachable, default to whichever branch better matches the surrounding code (a backend module → logic; a page or component → UI) and state the assumption at the top of the prototype.\n\n## Rules that apply to both\n\n1. **Throwaway from day one, and clearly marked as such.** Locate the prototype code close to where it will actually be used (next to the module or page it's prototyping for) so context is obvious — but name it so a casual reader can see it's a prototype, not production. For throwaway UI routes, obey whatever routing convention the project already uses; don't invent a new top-level structure.\n2. **One command to run.** Whatever the project's existing task runner supports — `pnpm \u003Cname>`, `python \u003Cpath>`, `bun \u003Cpath>`, etc. The user must be able to start it without thinking.\n3. **No persistence by default.** State lives in memory. Persistence is the thing the prototype is _checking_, not something it should depend on. If the question explicitly involves a database, hit a scratch DB or a local file with a clear \"PROTOTYPE — wipe me\" name.\n4. **Skip the polish.** No tests, no error handling beyond what makes the prototype _runnable_, no abstractions. The point is to learn something fast and then delete it.\n5. **Surface the state.** After every action (logic) or on every variant switch (UI), print or render the full relevant state so the user can see what changed.\n6. **Delete or absorb when done.** When the prototype has answered its question, either delete it or fold the validated decision into the real code — don't leave it rotting in the repo.\n\n## When done\n\nThe _answer_ is the only thing worth keeping from a prototype. Capture it somewhere durable, along with the question it was answering: on the Kairos item the prototype was serving (`append_note`), or — when the answer is a hard-to-reverse decision worth recording on its own — as a Kairos ADR (`create_item` with `item_type: adr`, linked to that item). When no item is in play, make one (a task on the team board, `create_item`) and write the answer there: a note file next to the prototype is lost with the prototype, and a decision about the system belongs in Kairos, not in the repository (COLLIERY-I-0628). The commit message of the prototype names the item. If the user is around, that capture is a quick conversation; if not, leave the placeholder so they (or you, on the next pass) can fill in the verdict before deleting the prototype.\n","# Prototype\n\nA prototype is **throwaway code that answers a question**. The question decides the shape.\n\n## Pick a branch\n\nIdentify which question is being answered — from the user's prompt, the surrounding code, or by asking if the user is around:\n\n- **\"Does this logic \u002F state model feel right?\"** → [LOGIC.md](LOGIC.md). Build a tiny interactive terminal app that pushes the state machine through cases that are hard to reason about on paper.\n- **\"What should this look like?\"** → [UI.md](UI.md). Generate several radically different UI variations on a single route, switchable via a URL search param and a floating bottom bar.\n\nThe two branches produce very different artifacts — getting this wrong wastes the whole prototype. If the question is genuinely ambiguous and the user isn't reachable, default to whichever branch better matches the surrounding code (a backend module → logic; a page or component → UI) and state the assumption at the top of the prototype.\n\n## Rules that apply to both\n\n1. **Throwaway from day one, and clearly marked as such.** Locate the prototype code close to where it will actually be used (next to the module or page it's prototyping for) so context is obvious — but name it so a casual reader can see it's a prototype, not production. For throwaway UI routes, obey whatever routing convention the project already uses; don't invent a new top-level structure.\n2. **One command to run.** Whatever the project's existing task runner supports — `pnpm \u003Cname>`, `python \u003Cpath>`, `bun \u003Cpath>`, etc. The user must be able to start it without thinking.\n3. **No persistence by default.** State lives in memory. Persistence is the thing the prototype is _checking_, not something it should depend on. If the question explicitly involves a database, hit a scratch DB or a local file with a clear \"PROTOTYPE — wipe me\" name.\n4. **Skip the polish.** No tests, no error handling beyond what makes the prototype _runnable_, no abstractions. The point is to learn something fast and then delete it.\n5. **Surface the state.** After every action (logic) or on every variant switch (UI), print or render the full relevant state so the user can see what changed.\n6. **Delete or absorb when done.** When the prototype has answered its question, either delete it or fold the validated decision into the real code — don't leave it rotting in the repo.\n\n## When done\n\nThe _answer_ is the only thing worth keeping from a prototype. Capture it somewhere durable, along with the question it was answering: on the Kairos item the prototype was serving (`append_note`), or — when the answer is a hard-to-reverse decision worth recording on its own — as a Kairos ADR (`create_item` with `item_type: adr`, linked to that item). When no item is in play, make one (a task on the team board, `create_item`) and write the answer there: a note file next to the prototype is lost with the prototype, and a decision about the system belongs in Kairos, not in the repository (COLLIERY-I-0628). The commit message of the prototype names the item. If the user is around, that capture is a quick conversation; if not, leave the placeholder so they (or you, on the next pass) can fill in the verdict before deleting the prototype.\n",{"name":5,"description":7},"main","f8e176327eded0a5699a22509fbf8a8338cbffc6","plugin\u002Fskills\u002Fengineering\u002Fprototype",4,"https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos","https:\u002F\u002Fgithub.com\u002Fcolliery-io","https:\u002F\u002Fcolliery.io\u002F","2026-11-13 04:24:21",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add colliery-io\u002Fkairos --skill prototype",{"tool":60,"command":61},"bunx","bunx skills add colliery-io\u002Fkairos --skill prototype",{"tool":63,"command":64},"pnpm","pnpm dlx skills add colliery-io\u002Fkairos --skill prototype","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fengineering\u002Fprototype\u002FSKILL.md",true,[68,74],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"LOGIC.md","REFERENCE","参考文档",5648,"https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fengineering\u002Fprototype\u002FLOGIC.md",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"UI.md",6797,"https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fengineering\u002Fprototype\u002FUI.md",[79,106,121,136,147,170],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":41},"01M6C4534Y6DB5N1V03Q5N9HVG","triage","Groom the delivery board — refine acceptance criteria, prioritize bugs, weigh tech debt, archive stale items, restock Todo, escalate cross-team blockers.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Ftriage\u002FSKILL.md",[],[81,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105],"todo","debt","stale","true","refine","delivery","escalate","restock","groom","tech","bugs","acceptance criteria","archive","short","board","team","code","acceptance","prioritize","tech debt",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":41},"01M6C450QYKWYHEA0VHZCM5XEW","to-initiative","Turn the current conversation into a Kairos initiative with an attached PRD — no interview, just synthesis of what's already been discussed.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Fto-initiative\u002FSKILL.md",[],[113,114,115,116,117,118,119,120,89],"to initiative","kairos","interview","just","prd","with","Synthesis","conversation",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":41},"01M6C44YQG7CESHVHC6Z0TADZC","ralph","Run Kairos tasks one by one in a Ralph loop, through the steps of \u002Fkairos:implement.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Fralph\u002FSKILL.md",[],[123,128,129,130,89,99,131,132,102,133,134,114,135],"max","ralph loop","task","implement","tasks","run","loop","max-iterations",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":41},"01M6C44WW9QWDTG173VFRA7E1Y","ralph-initiative","Run the open tasks of a Kairos initiative in a Ralph loop, in the sequence of their blocks edges.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Fralph-initiative\u002FSKILL.md",[],[123,143,129,128,144,145,99,132,102,133,134,114,135,146,89],"ralph initiative","blocks","sequence","open",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":41},"01M6C44SW6JFF3946GAV7CKJYH","onboard-team","Take a new or half-set-up delivery team to a working state with the person — its team, members, board, repositories, team page and charter, dispatch, and local wiring. Reads first, lists the gaps, asks before each write; safe to run again.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Fonboard-team\u002FSKILL.md",[],[101,154,155,100,156,133,157,158,159,40,160,161,91,162,163,118,164,165,166,167,89,168,169],"onboard team","onboard","write","page","dispatch","first","SET","safe","name","charter","wiring","gaps","repositories","new","local","up",{"skillNo":171,"name":131,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":41},"01M6C44QPDV3F8F6JC9B2NEDNX","Implement one Kairos task from Todo to Completed. Use when the user names a task or short code to implement, asks to pick up the next todo item, or when groomed work is handed off for execution.","https:\u002F\u002Fgithub.com\u002Fcolliery-io\u002Fkairos\u002Fblob\u002Fmain\u002Fplugin\u002Fskills\u002Fworkflow\u002Fimplement\u002FSKILL.md",[],[131,176,130,24,177,86,34,102,33,114,178,169,179,99,180],"next","for","execution","pick","work"]