[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS0JQ7V4QR87P7KPTWEBTY":3,"skill-same:01M6CS0JQ7V4QR87P7KPTWEBTY":57},{"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":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":20,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":42,"ownerDescription":6,"updatedAt":43,"install":44,"resources":56},"01M6CS0JQ7V4QR87P7KPTWEBTY","merge-to-main",null,"Merge a feature branch to main — squash, rebase onto local main, verify no main changes lost, ff-merge into the main worktree.","kfet\u002Ffir","kfet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14585?v=4","01M6CRZCB8P1V37WM3X0GB2DA6","Kalin Fetvadjiev","01M6CRZCFG1EW1WEN4RK84W1N5",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fmerge-to-main\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"merge","main","merge to main","worktree","verify","rebase","squash","branch","local","feature","true","changes","2026-11-10 10:12:30",false,"---\nbuiltin: true\nname: merge-to-main\ndescription: Merge a feature branch to main — squash, rebase onto local main, verify no main changes lost, ff-merge into the main worktree.\noverride: true\n---\n\nMerge the current feature branch into local main with a clean, linear history.\n\n0. **Check main is current** — `git fetch origin` and confirm local `main` is\n   not behind `origin\u002Fmain` (`git rev-list --count main..origin\u002Fmain` must be\n   `0`). If it is behind, fast-forward local main first and rebase this branch\n   onto it. Merging — and especially cutting a release — on a stale base means\n   redoing it: the version may already be taken upstream.\n1. **Squash** if too many commits.\n2. **Rebase onto local main.**\n3. **Verify the diff** — run `git diff main..HEAD`. Confirm it contains only the feature's intended changes and nothing that removes or reverts existing main content. If main changes were dropped during conflict resolution, fix before proceeding.\n4. **Build** — run `make all` to confirm nothing broke.\n5. **Update CHANGELOG.md** — ensure all commits in the branch have corresponding entries in the `[Unreleased]` section. Compare `git log main..HEAD --oneline --no-merges` against existing entries; add any missing ones under the appropriate subsection (Added\u002FChanged\u002FFixed\u002FRemoved). **Check the entries are under `## [Unreleased]`, not merely present**: a rebase across a release boundary relocates them into the just-released section with no conflict, and `git diff main..HEAD` still shows a clean pure-addition diff. Read the top of the file (`sed -n '1,40p' CHANGELOG.md`) and confirm with your own eyes that each new line sits above the first `## [x.y.z]` heading; move any that don't.\n6. **FF-merge** into the main worktree.\n7. **Build again** — run `make all` from the main worktree to confirm the merge is clean.\n\nAt the end ask the user if they want to clean-up by removing the local worktree and branch. Careful, this could be destructive!\n","Merge the current feature branch into local main with a clean, linear history.\n\n0. **Check main is current** — `git fetch origin` and confirm local `main` is\n   not behind `origin\u002Fmain` (`git rev-list --count main..origin\u002Fmain` must be\n   `0`). If it is behind, fast-forward local main first and rebase this branch\n   onto it. Merging — and especially cutting a release — on a stale base means\n   redoing it: the version may already be taken upstream.\n1. **Squash** if too many commits.\n2. **Rebase onto local main.**\n3. **Verify the diff** — run `git diff main..HEAD`. Confirm it contains only the feature's intended changes and nothing that removes or reverts existing main content. If main changes were dropped during conflict resolution, fix before proceeding.\n4. **Build** — run `make all` to confirm nothing broke.\n5. **Update CHANGELOG.md** — ensure all commits in the branch have corresponding entries in the `[Unreleased]` section. Compare `git log main..HEAD --oneline --no-merges` against existing entries; add any missing ones under the appropriate subsection (Added\u002FChanged\u002FFixed\u002FRemoved). **Check the entries are under `## [Unreleased]`, not merely present**: a rebase across a release boundary relocates them into the just-released section with no conflict, and `git diff main..HEAD` still shows a clean pure-addition diff. Read the top of the file (`sed -n '1,40p' CHANGELOG.md`) and confirm with your own eyes that each new line sits above the first `## [x.y.z]` heading; move any that don't.\n6. **FF-merge** into the main worktree.\n7. **Build again** — run `make all` from the main worktree to confirm the merge is clean.\n\nAt the end ask the user if they want to clean-up by removing the local worktree and branch. Careful, this could be destructive!\n",{"name":5,"builtin":36,"override":36,"description":7},true,"76b360b35f87ec18e1776cf6feafc7a025bdea64","pkg\u002Fresources\u002Fbuiltin_skills\u002Fmerge-to-main",0,"https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir","https:\u002F\u002Fgithub.com\u002Fkfet","https:\u002F\u002Fgithub.com\u002Fkalin-sa","2026-11-13 02:17:59",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":36},[46,49,52],{"tool":47,"command":48},"npx","npx skills add kfet\u002Ffir --skill merge-to-main",{"tool":50,"command":51},"bunx","bunx skills add kfet\u002Ffir --skill merge-to-main",{"tool":53,"command":54},"pnpm","pnpm dlx skills add kfet\u002Ffir --skill merge-to-main","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fmerge-to-main\u002FSKILL.md",[],[58,81,98,121,139,169],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":31},"01M6CS290490SZNX8V35TF3N6X","wt","Spawn a fresh fir agent in its own tmux session on its own git worktree. Use whenever the user wants the work — or the conversation about the work — to happen over there, not here. If the user points at this skill, or has directly loaded it in the context, that alone is the cue — spawn, don't inline.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fwt\u002FSKILL.md",[],[60,65,66,22,67,68,69,70,71,72,73,74,75,76,77,78,29,79,80],"tmux","git","git worktree","work","context","user","spawn","session","use","conversation","cue","fresh","it","about","at","inline",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":31},"01M6CS26KAKJ7VYRQ3RJ31SJ6S","wrap-up","Wrap up work on a project branch — review, fix, and simplify in a loop until clean, then ff-merge to main.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fwrap-up\u002FSKILL.md",[],[88,89,90,91,19,92,93,94,68,26,95,96,20,21,97,29],"wrap up","up","wrap","review","simplify","loop","work on","fix","clean","project",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":31},"01M6CS23P85MSVBX11XMFB29PF","tmux-observer","Attach a tmux window to an already-running fir session — observe its transcript and drive its input via tmux send-keys. Use when you need to watch or steer another fir agent.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftmux-observer\u002FSKILL.md",[],[65,105,106,107,72,73,108,109,110,111,112,113,114,29,115,116,117,118,119,120],"tmux observer","observer","transcript","drive","observe","attach","watch","input","via","you","keys","steer","window","send","when","running",{"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":31},"01M6CS21ENQ3D7Z08TDKXHJRR6","tmux-driver","Drive interactive CLIs (python, gdb, etc.) via named tmux sessions with multi-window support. Falls back to fir's built-in PTY driver when tmux is unavailable.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftmux-driver\u002FSKILL.md",[],[65,128,129,130,131,132,133,134,108,135,136,113,137,138,29,117,119],"tmux driver","driver","python","support","sessions","interactive","PTY","back","gdb","multi","with",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":150,"publishedAt":31},"01M6CS1YWSAH2TQ7S4VK7VKJT6","telegram-bot-setup","Set up a new Telegram bot channel for a fir project — install the telegram MCP, create a per-project state dir, drop in the bot token, wire .fir\u002Fmcp.json with TELEGRAM_STATE_DIR, pair the user, and verify. Use when the user asks to add, configure, or onboard a Telegram bot for a fir worktree\u002Fproject.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftelegram-bot-setup\u002FSKILL.md",[145],{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[151,152,153,154,155,156,157,158,22,159,23,160,161,162,163,164,165,73,89,166,97,138,29,167,119,168],"bot","setup","telegram bot","telegram","telegram bot setup","MCP","create","state","SET","onboard","configure","json","pair","install","channel","drop","for","new",{"skillNo":170,"name":171,"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":31},"01M6CS1VSW4C1W1QED8NDHBHZ9","sync","Sync with an upstream source repo — detect changed files, apply equivalent downstream edits, update the baseline, and report any new features or non-trivial changes picked up.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fsync\u002FSKILL.md",[],[171,176,177,178,179,89,180,181,182,138,29,183,30,184,185,168],"update","report","baseline","repo","files","upstream","detect","source","features","apply"]