[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS0GTD8HCNDVB7WYZHMR6W":3,"skill-same:01M6CS0GTD8HCNDVB7WYZHMR6W":62},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":48,"install":49,"resources":61},"01M6CS0GTD8HCNDVB7WYZHMR6W","loop",null,"Repeatedly execute a task — on a fixed time interval, or until an exit condition holds. Re-prints the task\u002Fexit banner each cycle so the loop does not collapse. Use for watch-style polling or iterate-until-clean loops.","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\u002Floop\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"watch","iterate","for","true","re","loops","condition","style","banner","time","cycle","task","exit","clean","use","execute","2026-11-10 10:12:30",false,"---\nbuiltin: true\nname: loop\ndescription: Repeatedly execute a task — on a fixed time interval, or until an exit condition holds. Re-prints the task\u002Fexit banner each cycle so the loop does not collapse. Use for watch-style polling or iterate-until-clean loops.\noverride: true\n---\n\n# Loop Skill\n\nYou execute a task on repeat. Two modes:\n\n- **interval** — repeat every N seconds until told to stop.\n- **condition** — repeat until an exit predicate holds.\n\n## Why the per-cycle banner is mandatory\n\nA loop stated once, at the top, decays as cycles append output: the original\ninstruction sits far back, recent tokens dominate attention, and the\nlocally-coherent continuation becomes \"summarise and conclude\" instead of\n\"loop again\". You counter this by emitting the loop invariant through a `bash`\ncall **every cycle** — placing it at a recent position, behind a hard turn\nboundary, as external-looking output. This is not optional flavour; it is the\nmechanism that keeps the loop alive.\n\n## Setup (first run only)\n\nEstablish, asking the user only for what is missing:\n\n- **Task** — what to run each cycle.\n- **Mode** — interval or condition.\n- **Interval** (interval mode) — seconds between cycles (default 30).\n- **Exit predicate** (condition mode) — the exact condition that ends the loop,\n  stated so it can be evaluated objectively.\n- **Banner slugs** (optional) — short keywords pointing back to the fuller task\n  definition (e.g. another skill's section headings). Re-emitted each cycle as\n  attention anchors; do **not** restate the full task content in the banner.\n\nThen begin immediately.\n\n## Cycle — interval mode\n\n1. **Print the banner** (plain code block, survives session timeout):\n   ```\n   Next reminder command:\n   sleep \u003CN> && echo \"=== LOOP CYCLE \u003CN+1> === Task: \u003Ctask>. Slugs: \u003Cslugs>\"\n   ```\n2. **Execute the task** fully — no truncation, no skipped steps.\n3. **Report** one line: `Cycle N complete: \u003Csummary>`.\n4. **Run the reminder command** with a bash timeout of `\u003CN + 10>`s:\n   ```bash\n   sleep \u003CN> && echo \"=== LOOP CYCLE \u003CN+1> === Task: \u003Ctask>. Slugs: \u003Cslugs>\"\n   ```\n   On seeing the output, return to step 1.\n\n## Cycle — condition mode\n\nNo sleep. The banner alone re-grounds the loop, so its content carries the load.\n\n1. **Print the banner** via bash, with the exit predicate stated **in full** and\n   the cycle counter incremented:\n   ```bash\n   echo \"=== LOOP CYCLE \u003CN> ===\n   Task slugs: \u003Cslugs>\n   EXIT ONLY IF: \u003Cexit predicate, in full>. Otherwise run another cycle.\"\n   ```\n2. **Execute the task** fully.\n3. **Re-print the banner** (same bash echo) immediately before deciding — the\n   moment right after a cycle looks done is when premature exit happens, so the\n   predicate must be the most salient recent text.\n4. **Evaluate the exit predicate.** If it holds, exit and report. Otherwise\n   increment N and return to step 1.\n\n## Rules\n\n- **Carry the task verbatim.** Never paraphrase or simplify it between cycles.\n- **Exit predicate in full; task as slugs.** The predicate is what collapses, so\n  restate it fully each cycle. Slugs only point at the task definition.\n- **Report every cycle**, even if the outcome is \"nothing changed\".\n- **Adjust on request** — interval changes or predicate clarifications apply from\n  the next cycle.\n","# Loop Skill\n\nYou execute a task on repeat. Two modes:\n\n- **interval** — repeat every N seconds until told to stop.\n- **condition** — repeat until an exit predicate holds.\n\n## Why the per-cycle banner is mandatory\n\nA loop stated once, at the top, decays as cycles append output: the original\ninstruction sits far back, recent tokens dominate attention, and the\nlocally-coherent continuation becomes \"summarise and conclude\" instead of\n\"loop again\". You counter this by emitting the loop invariant through a `bash`\ncall **every cycle** — placing it at a recent position, behind a hard turn\nboundary, as external-looking output. This is not optional flavour; it is the\nmechanism that keeps the loop alive.\n\n## Setup (first run only)\n\nEstablish, asking the user only for what is missing:\n\n- **Task** — what to run each cycle.\n- **Mode** — interval or condition.\n- **Interval** (interval mode) — seconds between cycles (default 30).\n- **Exit predicate** (condition mode) — the exact condition that ends the loop,\n  stated so it can be evaluated objectively.\n- **Banner slugs** (optional) — short keywords pointing back to the fuller task\n  definition (e.g. another skill's section headings). Re-emitted each cycle as\n  attention anchors; do **not** restate the full task content in the banner.\n\nThen begin immediately.\n\n## Cycle — interval mode\n\n1. **Print the banner** (plain code block, survives session timeout):\n   ```\n   Next reminder command:\n   sleep \u003CN> && echo \"=== LOOP CYCLE \u003CN+1> === Task: \u003Ctask>. Slugs: \u003Cslugs>\"\n   ```\n2. **Execute the task** fully — no truncation, no skipped steps.\n3. **Report** one line: `Cycle N complete: \u003Csummary>`.\n4. **Run the reminder command** with a bash timeout of `\u003CN + 10>`s:\n   ```bash\n   sleep \u003CN> && echo \"=== LOOP CYCLE \u003CN+1> === Task: \u003Ctask>. Slugs: \u003Cslugs>\"\n   ```\n   On seeing the output, return to step 1.\n\n## Cycle — condition mode\n\nNo sleep. The banner alone re-grounds the loop, so its content carries the load.\n\n1. **Print the banner** via bash, with the exit predicate stated **in full** and\n   the cycle counter incremented:\n   ```bash\n   echo \"=== LOOP CYCLE \u003CN> ===\n   Task slugs: \u003Cslugs>\n   EXIT ONLY IF: \u003Cexit predicate, in full>. Otherwise run another cycle.\"\n   ```\n2. **Execute the task** fully.\n3. **Re-print the banner** (same bash echo) immediately before deciding — the\n   moment right after a cycle looks done is when premature exit happens, so the\n   predicate must be the most salient recent text.\n4. **Evaluate the exit predicate.** If it holds, exit and report. Otherwise\n   increment N and return to step 1.\n\n## Rules\n\n- **Carry the task verbatim.** Never paraphrase or simplify it between cycles.\n- **Exit predicate in full; task as slugs.** The predicate is what collapses, so\n  restate it fully each cycle. Slugs only point at the task definition.\n- **Report every cycle**, even if the outcome is \"nothing changed\".\n- **Adjust on request** — interval changes or predicate clarifications apply from\n  the next cycle.\n",{"name":5,"builtin":40,"override":40,"description":7},true,"main","76b360b35f87ec18e1776cf6feafc7a025bdea64","pkg\u002Fresources\u002Fbuiltin_skills\u002Floop",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":50,"prompt":60,"zipAvailable":40},[51,54,57],{"tool":52,"command":53},"npx","npx skills add kfet\u002Ffir --skill loop",{"tool":55,"command":56},"bunx","bunx skills add kfet\u002Ffir --skill loop",{"tool":58,"command":59},"pnpm","pnpm dlx skills add kfet\u002Ffir --skill loop","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Floop\u002FSKILL.md",[],[63,86,104,126,144,174],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":35},"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",[],[65,70,71,72,73,74,75,76,77,78,33,79,80,81,82,83,22,84,85],"tmux","git","worktree","git worktree","work","context","user","spawn","session","conversation","cue","fresh","it","about","at","inline",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":35},"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",[],[93,94,95,96,97,98,5,99,74,100,101,32,41,102,103,22],"wrap up","up","wrap","review","merge","simplify","work on","branch","fix","merge to main","project",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":35},"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",[],[70,111,112,113,78,33,114,115,116,19,117,118,119,22,120,121,122,123,124,125],"tmux observer","observer","transcript","drive","observe","attach","input","via","you","keys","steer","window","send","when","running",{"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":35},"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",[],[70,133,134,135,136,137,138,139,114,140,141,118,142,143,22,122,124],"tmux driver","driver","python","support","sessions","interactive","PTY","back","gdb","multi","with",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":155,"publishedAt":35},"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",[150],{"categoryNo":151,"categoryName":152,"taxonomyType":153,"taxonomyTypeDesc":154},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[156,157,158,159,160,161,162,163,72,164,165,166,167,168,169,170,171,33,94,172,103,143,22,21,124,173],"bot","setup","telegram bot","telegram","telegram bot setup","MCP","create","state","SET","verify","onboard","configure","json","pair","install","channel","drop","new",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":180,"publishedAt":35},"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",[],[176,181,182,183,184,94,185,186,187,143,22,188,189,190,191,173],"update","report","baseline","repo","files","upstream","detect","source","changes","features","apply"]