[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RRZG26JEP7JTK3FSCTKTS":3,"skill-same:01M71RRZG26JEP7JTK3FSCTKTS":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M71RRZG26JEP7JTK3FSCTKTS","Morning Briefing",null,"Daily synthetic prompt that asks the session to compose a Trello + Calendar briefing and post it to Slack.","gongiskhan\u002Fagent-garrison","gongiskhan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1997392?v=4","01M71RKMFR53TKXE308C22QTNZ","01M71RKMJA57KZHNDCBNKTWZRR",1,"MIT","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fmorning-briefing\u002F.apm\u002Fskills\u002Fmorning-briefing\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31],"morning","morning briefing","briefing","slack","trello","prompt","session","daily","compose","calendar","synthetic","calendar briefing","post","it","2026-11-10 13:02:02",false,"---\nname: Morning Briefing\ndescription: Daily synthetic prompt that asks the session to compose a Trello + Calendar briefing and post it to Slack.\n---\n\n# Morning Briefing\n\nOnce a day (default 08:00 weekdays, configurable) the scheduler\nfires a synthetic prompt at the gateway. The gateway formats it as\n`Heartbeat job: morning-briefing\\n\\nPayload:\\n{...}` and routes it\nto the session the same way `\u002Fjobs` heartbeat ticks are routed.\n\n## What the session does on receipt\n\n1. Treat the prompt like any other inbound message — same tier\n   classifier, same orchestrator routing.\n2. Read today's calendar (the `data\u002Fcalendar.md` mirror kept fresh\n   by the `google-calendar` Fitting's sync, or the calendar.py CLI\n   for ad-hoc lookups). Skip if the Calendar Fitting isn't\n   selected.\n3. Read open Trello tasks (the trello data source's \"A Fazer\"\n   list). Skip if the Trello Fitting isn't selected.\n4. Compose a Slack message — events first (chronological), then up\n   to two task suggestions with one-sentence reasons each. Skip\n   any section whose data source is empty. Skip a \"blocking\"\n   section unless a real blocker exists (no fabrication).\n5. Post via `mcp__claude_ai_Slack__slack_send_message` to the\n   orchestrator's `report_channel`. **If `report_channel` is empty,\n   log to stdout and stop — don't search Slack for a channel.**\n6. If both calendar and tasks are empty, post a one-line\n   acknowledgement (\"Quiet day.\") rather than staying silent —\n   briefings have a fixed cadence and the principal expects\n   proof-of-life.\n\n## Hard rules\n\n- Under 200 words. No filler (\"Good morning!\", \"Have a great day!\").\n- Informational only. Do not offer to do work autonomously here. If\n  the principal wants to act, they reply in Slack and the existing\n  heartbeat approval flow (Phase 2 T4) takes it from there.\n- Don't post anywhere except the configured Slack target.\n\n## Configuration knobs\n\n- `GARRISON_BRIEFING_TIME` (default `08:00`) — local fire time.\n- `GARRISON_BRIEFING_WEEKDAYS_ONLY` (default `true`) — Mon–Fri.\n- Re-running setup with new env values replaces the cron entry by\n  id (`morning-briefing`). No need to remove the old job manually.\n\n## Manual trigger\n\n```\nnode apm_modules\u002F_local\u002Fscheduler\u002Fscripts\u002Fscheduler.mjs run-now morning-briefing\n```\n\nUseful for empty-state tests and same-day re-fires.\n","# Morning Briefing\n\nOnce a day (default 08:00 weekdays, configurable) the scheduler\nfires a synthetic prompt at the gateway. The gateway formats it as\n`Heartbeat job: morning-briefing\\n\\nPayload:\\n{...}` and routes it\nto the session the same way `\u002Fjobs` heartbeat ticks are routed.\n\n## What the session does on receipt\n\n1. Treat the prompt like any other inbound message — same tier\n   classifier, same orchestrator routing.\n2. Read today's calendar (the `data\u002Fcalendar.md` mirror kept fresh\n   by the `google-calendar` Fitting's sync, or the calendar.py CLI\n   for ad-hoc lookups). Skip if the Calendar Fitting isn't\n   selected.\n3. Read open Trello tasks (the trello data source's \"A Fazer\"\n   list). Skip if the Trello Fitting isn't selected.\n4. Compose a Slack message — events first (chronological), then up\n   to two task suggestions with one-sentence reasons each. Skip\n   any section whose data source is empty. Skip a \"blocking\"\n   section unless a real blocker exists (no fabrication).\n5. Post via `mcp__claude_ai_Slack__slack_send_message` to the\n   orchestrator's `report_channel`. **If `report_channel` is empty,\n   log to stdout and stop — don't search Slack for a channel.**\n6. If both calendar and tasks are empty, post a one-line\n   acknowledgement (\"Quiet day.\") rather than staying silent —\n   briefings have a fixed cadence and the principal expects\n   proof-of-life.\n\n## Hard rules\n\n- Under 200 words. No filler (\"Good morning!\", \"Have a great day!\").\n- Informational only. Do not offer to do work autonomously here. If\n  the principal wants to act, they reply in Slack and the existing\n  heartbeat approval flow (Phase 2 T4) takes it from there.\n- Don't post anywhere except the configured Slack target.\n\n## Configuration knobs\n\n- `GARRISON_BRIEFING_TIME` (default `08:00`) — local fire time.\n- `GARRISON_BRIEFING_WEEKDAYS_ONLY` (default `true`) — Mon–Fri.\n- Re-running setup with new env values replaces the cron entry by\n  id (`morning-briefing`). No need to remove the old job manually.\n\n## Manual trigger\n\n```\nnode apm_modules\u002F_local\u002Fscheduler\u002Fscripts\u002Fscheduler.mjs run-now morning-briefing\n```\n\nUseful for empty-state tests and same-day re-fires.\n",{"name":5,"description":7},"main","31458d7e0e08a7b3494c27bf2b912ed41c87a138","fittings\u002Fseed\u002Fmorning-briefing\u002F.apm\u002Fskills\u002Fmorning-briefing",0,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison","https:\u002F\u002Fgongiskhan.github.io\u002Fagent-garrison\u002F","https:\u002F\u002Fgithub.com\u002Fgongiskhan","2026-11-07 05:27:23",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add gongiskhan\u002Fagent-garrison --skill \"Morning Briefing\"",{"tool":51,"command":52},"bunx","bunx skills add gongiskhan\u002Fagent-garrison --skill \"Morning Briefing\"",{"tool":54,"command":55},"pnpm","pnpm dlx skills add gongiskhan\u002Fagent-garrison --skill \"Morning Briefing\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fmorning-briefing\u002F.apm\u002Fskills\u002Fmorning-briefing\u002FSKILL.md",true,[],[60,71,81,92,103,134],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":32},"01M71RTFA0HD83YBE1TE7DCE6B","pinned-helper","An owned skill the human has pinned so the Improver must not touch it.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fpinned-helper\u002FSKILL.md",[],[67,68,69,70,31],"pinned helper","helper","human","touch",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":32},"01M71RTDKBG0WQHPHKFZKFWDHF","legacy-helper","A rarely used helper kept around from an earlier workflow.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Flegacy-helper\u002FSKILL.md",[],[78,68,79,80],"Legacy","legacy helper","workflow",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":32},"01M71RTCC6ZVVJ9MHHESXPHWA6","human-notes","A human-authored skill not deployed by APM (loose, not in the lock).","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fhuman-notes\u002FSKILL.md",[],[88,69,89,90,91],"notes","human notes","lock","apm",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":32},"01M71RTB83ZP6VK6XH19Z93FAC","garrison-helper","Helps compose and station Garrison Fittings into Faculty role slots.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fgarrison-helper\u002FSKILL.md",[],[68,99,100,101,102,26],"garrison","garrison helper","slots","role",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":114,"publishedAt":32},"01M71RT6MBGJC4QQZBGHF4H1M8","walkthrough","Record a short, narrated, captioned video walkthrough that proves a finished coding task and shows how it behaves, then self-verify the video via vision on extracted frames and publish it as one scrubbable Tailscale link. Use after completing a change\u002Ffix\u002Ffeature on a web project (Next.js\u002FReact etc.) when the user wants visual proof of work, a demo of a user flow, or to avoid manually retesting and watching a long raw screen recording. Triggers on requests like \"record a walkthrough\", \"show me it working\", \"make a demo video of this\", \"prove the feature\", or finishing a UI\u002Froute\u002Fform\u002FAPI change worth demonstrating. Not for walking through a full from-scratch project build.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fwalkthrough\u002F.apm\u002Fskills\u002Fwalkthrough\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[105,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133],"when","project","project build","api","react","change","demo video","publish","recording","Video","show me","work","short","fix","show","route","me","next","self",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":32},"01M71RT54T0SQS42XEP5FVQ28K","Trello","Manage tasks via Trello REST API.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Ftrello\u002F.apm\u002Fskills\u002Ftrello\u002FSKILL.md",[],[22,141,142,118,143,144,145],"tasks","REST","manage","rest api","via"]