[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7199D00DJTG1NE68MNE8AH7":3,"skill-same:01M7199D00DJTG1NE68MNE8AH7":66},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":65},"01M7199D00DJTG1NE68MNE8AH7","close",null,"Cleanly shut down the vjt-claude IRC session — graceful bot QUIT, final activity-log flush, memory consistency check, Monitor stop. Run before \u002Fexit when you plan to relaunch Claude Code later.","vjt\u002Fclaude-ircbot","vjt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14077?v=4","01M7199BPER9D5M51J6EFWWSSB","Marcello Barnaba","01M7199BQ5T18T1GETC7RG06Q2",0,"MIT","https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fclose\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"later","consistency check","when","down","true","consistency","you","activity","exit","bot","stop","log","session","check","plan","code","run","monitor","memory","2026-11-10 10:12:30",false,"---\nname: close\ndescription: Cleanly shut down the vjt-claude IRC session — graceful bot QUIT, final activity-log flush, memory consistency check, Monitor stop. Run before \u002Fexit when you plan to relaunch Claude Code later.\nuser_invocable: true\n---\n\n# \u002Fclose — shut vjt-claude down cleanly\n\nMirror of `\u002Fstart`. Run this **before** `\u002Fexit` when you're going to relaunch Claude Code from this dir later. Graceful: morph and the crew see a clean leave message instead of a hard timeout.\n\nSkip this skill if you're leaving the session running — it's only needed when you're actually going to kill Claude Code.\n\n## What it does, in order\n\n### 1. Final activity-log flush\n\n- Read `\u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fmemory\u002Fproject_activity_log.md` (repo path — see CLAUDE.md Memory hygiene) and check today's heading.\n- **If meaningful events from this session aren't logged yet**, append them now under today's heading. Apply the same filter as during the session (decisions \u002F ships \u002F plans \u002F surprises — not banter).\n- If today's heading is empty and nothing notable happened, that's fine — leave it as a placeholder. Don't invent content.\n\n### 2. Graceful IRC quit with a contextual supercazzola\n\nThe QUIT message should nod at whatever the crew was just talking about. Mascetti register, one line, \u003C200 chars, Italian, register-matched to the channel the last chatter was in (#olografix = lighter on blasphemy, elsewhere = Porco Dio fine).\n\nProcedure:\n\n1. Read the last ~30 lines of `\u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fbot.log` (`tail -n 30`). Extract the dominant topic\u002Fphrase from the most recent crew exchanges — what's on everyone's lips right this minute?\n2. Craft a supercazzola QUIT message that fuses the topic with Mascetti-style verbal nonsense. Aim for: topic-nod + `come se fosse antani \u002F tarapìa tapìoco \u002F scappellamento \u002F prematurata` construction + closing blasphemy if register allows.\n3. Fire it:\n   ```bash\n   printf 'QUIT :\u003Cyour supercazzola here>\\n' > \u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fbot.send\n   ```\n\nExamples of the shape (don't use these verbatim — regenerate from actual current chatter):\n\n- If crew was discussing lost BTC wallets: `QUIT :come la tarapìa tapìoco del wallet perduto, scappellamento a destra del blocchetto genesi, alla prossima reboot. porco dio`\n- If crew was in #olografix talking tax: `QUIT :antani dichiarativo con prematurata RW, come se fosse TUIR scappellato a destra. alla prossima`\n- If crew was laughing about Magnotta: `QUIT :la lavatrice antani, quattrocentottantamilalire di prematurata, m'iscrivo al reboot!!`\n\nWait ~2 seconds after firing for the QUIT to flush to the network before step 3 (otherwise Monitor may kill the bot mid-write and the QUIT message is lost).\n\nIf `bot.log` tail shows no recent chatter (channel dead), fall back to a pure-Mascetti QUIT without a topic nod: `QUIT :come se fosse antani, la reboot con scappellamento a destra, alla prossima. porco dio.`\n\n### 3. Stop the Monitors\n\nUse `TaskStop` on **every** monitor task — `TaskList` first, then stop the Azzurra and Libera\nevent streams and the Telegram poller (`tg_poll.sh`). The poller especially: leaving it running\nafter the session dies means the next session's `getUpdates` gets `409 Conflict`.\n\nThe bot itself is a systemd user service now (`vjt-claude-bot.service`) and is **not** coupled to the Monitor. The FIFO-`QUIT` in step 2 makes the bot disconnect gracefully and exit; systemd then sees it as a normal stop. Do NOT `systemctl --user stop` as well — the FIFO QUIT has already done it, and stacking the two races the reconnect window. Same applies to the sidecars: leave them alone, they'll keep running until next reboot \u002F next `\u002Fstart` cycle.\n\n### 4. Memory consistency check\n\nQuick sanity pass to avoid starting the next session with half-written state:\n\n- Read `MEMORY.md` and confirm every `- [Title](file.md)` pointer resolves — `ls` each file listed.\n- For each memory file, confirm the frontmatter `name\u002Fdescription\u002Ftype` is present and unbroken.\n- If anything is inconsistent, fix it now. Do not leave corrupted state for the next session to stumble over.\n\n### 5. Report\n\nPrint a one-liner like:\n- `vjt-claude closed. Bot QUIT sent, Monitor stopped, activity log has N bullets for today, MEMORY.md has M entries. Safe to \u002Fexit.`\n\nThen the user runs `\u002Fexit`.\n\n## What NOT to do\n\n- Do NOT delete the memory dir or rename it. Its canonical path is `~\u002F.claude\u002Fprojects\u002F-home-vjt-code-IRC-vjt-claude\u002F` and must persist untouched between sessions.\n- Do NOT `pkill` Claude Code itself — let the user \u002Fexit normally so the transcript gets saved to the jsonl archive.\n- Do NOT promote transient chat into memory just because you're closing. Promotion rule still applies: only if it will matter >14 days.\n","# \u002Fclose — shut vjt-claude down cleanly\n\nMirror of `\u002Fstart`. Run this **before** `\u002Fexit` when you're going to relaunch Claude Code from this dir later. Graceful: morph and the crew see a clean leave message instead of a hard timeout.\n\nSkip this skill if you're leaving the session running — it's only needed when you're actually going to kill Claude Code.\n\n## What it does, in order\n\n### 1. Final activity-log flush\n\n- Read `\u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fmemory\u002Fproject_activity_log.md` (repo path — see CLAUDE.md Memory hygiene) and check today's heading.\n- **If meaningful events from this session aren't logged yet**, append them now under today's heading. Apply the same filter as during the session (decisions \u002F ships \u002F plans \u002F surprises — not banter).\n- If today's heading is empty and nothing notable happened, that's fine — leave it as a placeholder. Don't invent content.\n\n### 2. Graceful IRC quit with a contextual supercazzola\n\nThe QUIT message should nod at whatever the crew was just talking about. Mascetti register, one line, \u003C200 chars, Italian, register-matched to the channel the last chatter was in (#olografix = lighter on blasphemy, elsewhere = Porco Dio fine).\n\nProcedure:\n\n1. Read the last ~30 lines of `\u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fbot.log` (`tail -n 30`). Extract the dominant topic\u002Fphrase from the most recent crew exchanges — what's on everyone's lips right this minute?\n2. Craft a supercazzola QUIT message that fuses the topic with Mascetti-style verbal nonsense. Aim for: topic-nod + `come se fosse antani \u002F tarapìa tapìoco \u002F scappellamento \u002F prematurata` construction + closing blasphemy if register allows.\n3. Fire it:\n   ```bash\n   printf 'QUIT :\u003Cyour supercazzola here>\\n' > \u002Fhome\u002Fvjt\u002Fcode\u002FIRC\u002Fvjt-claude\u002Fbot.send\n   ```\n\nExamples of the shape (don't use these verbatim — regenerate from actual current chatter):\n\n- If crew was discussing lost BTC wallets: `QUIT :come la tarapìa tapìoco del wallet perduto, scappellamento a destra del blocchetto genesi, alla prossima reboot. porco dio`\n- If crew was in #olografix talking tax: `QUIT :antani dichiarativo con prematurata RW, come se fosse TUIR scappellato a destra. alla prossima`\n- If crew was laughing about Magnotta: `QUIT :la lavatrice antani, quattrocentottantamilalire di prematurata, m'iscrivo al reboot!!`\n\nWait ~2 seconds after firing for the QUIT to flush to the network before step 3 (otherwise Monitor may kill the bot mid-write and the QUIT message is lost).\n\nIf `bot.log` tail shows no recent chatter (channel dead), fall back to a pure-Mascetti QUIT without a topic nod: `QUIT :come se fosse antani, la reboot con scappellamento a destra, alla prossima. porco dio.`\n\n### 3. Stop the Monitors\n\nUse `TaskStop` on **every** monitor task — `TaskList` first, then stop the Azzurra and Libera\nevent streams and the Telegram poller (`tg_poll.sh`). The poller especially: leaving it running\nafter the session dies means the next session's `getUpdates` gets `409 Conflict`.\n\nThe bot itself is a systemd user service now (`vjt-claude-bot.service`) and is **not** coupled to the Monitor. The FIFO-`QUIT` in step 2 makes the bot disconnect gracefully and exit; systemd then sees it as a normal stop. Do NOT `systemctl --user stop` as well — the FIFO QUIT has already done it, and stacking the two races the reconnect window. Same applies to the sidecars: leave them alone, they'll keep running until next reboot \u002F next `\u002Fstart` cycle.\n\n### 4. Memory consistency check\n\nQuick sanity pass to avoid starting the next session with half-written state:\n\n- Read `MEMORY.md` and confirm every `- [Title](file.md)` pointer resolves — `ls` each file listed.\n- For each memory file, confirm the frontmatter `name\u002Fdescription\u002Ftype` is present and unbroken.\n- If anything is inconsistent, fix it now. Do not leave corrupted state for the next session to stumble over.\n\n### 5. Report\n\nPrint a one-liner like:\n- `vjt-claude closed. Bot QUIT sent, Monitor stopped, activity log has N bullets for today, MEMORY.md has M entries. Safe to \u002Fexit.`\n\nThen the user runs `\u002Fexit`.\n\n## What NOT to do\n\n- Do NOT delete the memory dir or rename it. Its canonical path is `~\u002F.claude\u002Fprojects\u002F-home-vjt-code-IRC-vjt-claude\u002F` and must persist untouched between sessions.\n- Do NOT `pkill` Claude Code itself — let the user \u002Fexit normally so the transcript gets saved to the jsonl archive.\n- Do NOT promote transient chat into memory just because you're closing. Promotion rule still applies: only if it will matter >14 days.\n",{"name":5,"description":7,"user_invocable":43},true,"master","9fc19f803f3c5136e20052e86c9865c5f45bee00",".claude\u002Fskills\u002Fclose",3,"https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot","https:\u002F\u002Fgithub.com\u002Fvjt","http:\u002F\u002Fsindro.me\u002F","Production Engineer at @facebook, coding monkey in the guts, systems administrator by vocation, network aficionado by necessity. Slowly becoming a clanker.","2026-11-12 21:03:44",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":43},[55,58,61],{"tool":56,"command":57},"npx","npx skills add vjt\u002Fclaude-ircbot --skill close",{"tool":59,"command":60},"bunx","bunx skills add vjt\u002Fclaude-ircbot --skill close",{"tool":62,"command":63},"pnpm","pnpm dlx skills add vjt\u002Fclaude-ircbot --skill close","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fclose\u002FSKILL.md",[],[67,73,97,122],{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":38},"01M7199MG5P3HQWFJGYASN1KWS","voice","https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fvoice\u002FSKILL.md",[],[69],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":38},"01M7199HN3B0C4NNRDWKGRAJNP","start","Cold-boot the vjt-claude IRC persistent session — archives >14d activity log, ensures bot.py + sidecars are running, greets on own JOIN, then runs the shared warm-bringup protocol (\u002Fresume). Run once manually when entering this working directory. The hot path (post-\u002Fclear) is \u002Fresume, NOT this.","https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fstart\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[75,85,86,31,23,87,88,89,21,28,30,90,91,92,35,93,94,95,26,96],"cold","shared","join","activity log","boot","resume","post","bringup","directory","protocol","clear","running",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":38},"01M7199FQRTZ965RND1T2KRJ5Q","settings-add","Add a permission allow\u002Fdeny rule to a Claude Code settings file when the harness settings-file write-guard blocks Edit\u002FWrite. Use whenever a rule needs to land in .claude\u002Fsettings*.json (or ~\u002F.claude\u002Fsettings.json) and a normal Edit\u002FWrite would prompt despite a matching allow-glob.","https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fsettings-add\u002FSKILL.md",[],[104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,21,119,34,120,121],"settings","add","settings add","permission","harness","normal","json","matching","write","edit","blocks","settings.json","use","rule","prompt","file","land","guard",{"skillNo":123,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":38},"01M7199ES1CJ0YQ7P8MFRJ1SNQ","https:\u002F\u002Fgithub.com\u002Fvjt\u002Fclaude-ircbot\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fresume\u002FSKILL.md",[126],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[90]]