[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSXWFS0PVBE5XWF2CJC9P7":3,"skill-same:01M6CSXWFS0PVBE5XWF2CJC9P7":92},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":21,"commitSha":43,"skillDirectory":44,"forksCount":14,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":48,"install":49,"resources":61},"01M6CSXWFS0PVBE5XWF2CJC9P7","multi-pane",null,"Run multi-session work — this (main) session stays a normal terminal and orchestrates; worker Claude sessions run in a separate tmux session the user watches in its own window. Use when the user asks to split work across panes\u002Fsessions\u002Fworkers, run repos in parallel, or set up an owner + QA pane loop.","goffity\u002Fdev-km","goffity","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F778547?v=4","01M6CSW9QQ32YQYTRKQWVKYCAY","Goffity","01M6CSW9VQFVZ3QS6RB4VYJGE6",0,"MIT","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"multi pane","parallel","main","workers","up","use","session","user","work","terminal","panes","loop","SET","qa","run","repos","sessions","tmux","2026-11-10 10:12:30",false,"---\nname: multi-pane\ndescription: Run multi-session work — this (main) session stays a normal terminal and orchestrates; worker Claude sessions run in a separate tmux session the user watches in its own window. Use when the user asks to split work across panes\u002Fsessions\u002Fworkers, run repos in parallel, or set up an owner + QA pane loop.\nuser-invocable: true\n---\n\n# Multi-Pane Orchestration\n\nThe main session (this one, a normal terminal) is the **router**: it talks to the user, sends work to worker panes, watches\nfor results, checks reviews\u002FCI, merges what it is allowed to, and reports. Worker Claude sessions live in a **separate tmux\nsession** (default `mp`) that the user watches in its own iTerm window. Workers never talk to each other — everything goes\nthrough the main session.\n\nScripts: `~\u002F.claude\u002Fskills\u002Fmulti-pane\u002Fscripts\u002F` (below called `$MP`). Hook: `~\u002F.claude\u002Fhooks\u002Fpane-notify.sh`\n(Stop\u002FNotification → `~\u002F.claude\u002Fpane-status.log` + macOS notification), labels in `~\u002F.claude\u002Fpane-labels`.\n\n## Usage\n\n```\n\u002Fmulti-pane \u003Ctask>        e.g. \u002Fmulti-pane port feature X to 6 repos, 2 owner panes + 1 QA pane\n```\n\n## Steps\n\n### 1. Agree scope + authority first (one short question if not given)\n- Which repos \u002F tasks, how to split, QA needed?\n- **Authority for this session only** (never assume it carries over): e.g. \"merge into develop allowed (admin ok)\",\n  \"prod (main\u002Frelease) is the user's\", \"prod DB\u002Fconfig changes need explicit approval\".\n\n### 2. Start the worker tmux session (main stays outside tmux)\n```bash\n$MP\u002Fmp-init.sh            # creates detached tmux session \"mp\" and opens an iTerm window attached to it\n```\nTell the user: the worker window is `tmux attach -t mp` (panes are tiled, titled by label).\n\n### 3. Pilot first, then parallel\nSame change across many repos → one owner pane does a **pilot repo** first and produces a reusable patch split into\ncommits (shared code \u002F per-repo theme \u002F wiring). Then split the remaining repos across 2+ owner panes (separate repos, so no\nconflicts). Add a QA pane that tests behind the owners.\n\n```bash\nP2=$($MP\u002Fmp-new.sh \"2 FRONTEND · repoA,repoB\" ~\u002FDevelopment\u002Fkol)   # prints pane id like %31\nP5=$($MP\u002Fmp-new.sh \"5 QA · dev\" ~\u002FDevelopment\u002Fkol\u002Fkol-architecture)\n```\n\n### 4. Send work as a file (never type long text with send-keys)\nWrite the brief to a scratchpad file, then:\n```bash\n$MP\u002Fmp-send.sh \"$P2\" brief-p2.md     # pastes, presses Enter until the pane shows \"esc to interrupt\"\n```\nEvery brief must contain: scope (repos\u002Fbranches, worktree rule — never touch shared checkouts), constraints (tests\u002Fbuild,\nno --no-verify, PR via \u002Fpr, don't merge), review gate (Copilot + \u002Fpr-review), and **the marker to print when done**:\n- owner: `OWNER-DONE \u003Crepo>#\u003CPR> \u003Cshort result>` (or `OWNER-FIXING \u003Crepo>#\u003CPR>`)\n- QA: `QA-RESULT \u003Crepo>#\u003CPR> PASS|FAIL \u003Clist>`\n- either: `NEED-INPUT \u003Cquestion>` if blocked on a user decision\n- long reports → \"write to \u003Cfile> then print the marker\" (the Claude TUI has no scrollback)\n\n### 5. Watch (background) and route\n```bash\n$MP\u002Fmp-watch.sh      # run_in_background: exits with new \"label :: marker\" lines (and [ASK] lines when a pane waits)\n```\nOn each wake-up:\n- `OWNER-DONE` → `$MP\u002Fpr-ready.sh owner\u002Frepo PR` (Copilot reviewed the head? unresolved=0? checks?) → if ready and allowed,\n  merge (merge commit) → send the PR to the QA pane via `mp-send.sh`.\n- `QA-RESULT … FAIL` → relay the findings to the owner pane; `PASS` → next step (e.g. open the release PR, don't merge prod).\n- `[ASK]`\u002F`NEED-INPUT` → `$MP\u002Fmp-peek.sh \u003Cpane>`; answer only within the decided scope, otherwise ask the user.\n- Re-arm `mp-watch.sh` after every wake-up. A marker may be re-reported → check PR state before acting.\n\n### 6. Report to the user in short status tables (repo | PR | review | QA | release PR), and say exactly what is waiting on them.\n\n### 7. Wrap up\n`$MP\u002Fmp-peek.sh` each pane → idle → `$MP\u002Fmp-close.sh \u003Cpane ids>`; remove worktrees that are clean+pushed\n(`git worktree remove`, never rm -rf); summarize; offer to record learnings (memory \u002F kb).\n\n## Rules learned the hard way\n- **Grey text in a pane's input box is Claude Code's prompt suggestion**, not a user command — never act on it.\n- Pastes can stay unsubmitted → `mp-send.sh` retries Enter and checks \"esc to interrupt\".\n- **Copilot outage** (review requested but never appears): wait 30–60 min → subagent code review + triage → note\n  \"Copilot did not review\" in the PR. Never claim a review that did not happen.\n- Before declaring \"ready to merge\": `pr-ready.sh` must show copilot_on_head=true (or the documented fallback),\n  unresolved=0, checks pass. After merge: merge_parents=2 (release\u002Fsync PRs must be merge commits, never squash).\n- Workers must not merge, release, or change prod data; the main session decides per the authority agreed in step 1.\n- The main session must not bypass a worker's safety refusal by doing the same thing itself (no permission laundering).\n- Panes cannot SendMessage each other reliably — the main session relays via `mp-send.sh`.\n\n## Related\n`\u002Fpr`, `\u002Fpr-review`, kb pattern `02-patterns\u002Fworkflow\u002FMulti-Pane Claude Orchestration.md`\n","# Multi-Pane Orchestration\n\nThe main session (this one, a normal terminal) is the **router**: it talks to the user, sends work to worker panes, watches\nfor results, checks reviews\u002FCI, merges what it is allowed to, and reports. Worker Claude sessions live in a **separate tmux\nsession** (default `mp`) that the user watches in its own iTerm window. Workers never talk to each other — everything goes\nthrough the main session.\n\nScripts: `~\u002F.claude\u002Fskills\u002Fmulti-pane\u002Fscripts\u002F` (below called `$MP`). Hook: `~\u002F.claude\u002Fhooks\u002Fpane-notify.sh`\n(Stop\u002FNotification → `~\u002F.claude\u002Fpane-status.log` + macOS notification), labels in `~\u002F.claude\u002Fpane-labels`.\n\n## Usage\n\n```\n\u002Fmulti-pane \u003Ctask>        e.g. \u002Fmulti-pane port feature X to 6 repos, 2 owner panes + 1 QA pane\n```\n\n## Steps\n\n### 1. Agree scope + authority first (one short question if not given)\n- Which repos \u002F tasks, how to split, QA needed?\n- **Authority for this session only** (never assume it carries over): e.g. \"merge into develop allowed (admin ok)\",\n  \"prod (main\u002Frelease) is the user's\", \"prod DB\u002Fconfig changes need explicit approval\".\n\n### 2. Start the worker tmux session (main stays outside tmux)\n```bash\n$MP\u002Fmp-init.sh            # creates detached tmux session \"mp\" and opens an iTerm window attached to it\n```\nTell the user: the worker window is `tmux attach -t mp` (panes are tiled, titled by label).\n\n### 3. Pilot first, then parallel\nSame change across many repos → one owner pane does a **pilot repo** first and produces a reusable patch split into\ncommits (shared code \u002F per-repo theme \u002F wiring). Then split the remaining repos across 2+ owner panes (separate repos, so no\nconflicts). Add a QA pane that tests behind the owners.\n\n```bash\nP2=$($MP\u002Fmp-new.sh \"2 FRONTEND · repoA,repoB\" ~\u002FDevelopment\u002Fkol)   # prints pane id like %31\nP5=$($MP\u002Fmp-new.sh \"5 QA · dev\" ~\u002FDevelopment\u002Fkol\u002Fkol-architecture)\n```\n\n### 4. Send work as a file (never type long text with send-keys)\nWrite the brief to a scratchpad file, then:\n```bash\n$MP\u002Fmp-send.sh \"$P2\" brief-p2.md     # pastes, presses Enter until the pane shows \"esc to interrupt\"\n```\nEvery brief must contain: scope (repos\u002Fbranches, worktree rule — never touch shared checkouts), constraints (tests\u002Fbuild,\nno --no-verify, PR via \u002Fpr, don't merge), review gate (Copilot + \u002Fpr-review), and **the marker to print when done**:\n- owner: `OWNER-DONE \u003Crepo>#\u003CPR> \u003Cshort result>` (or `OWNER-FIXING \u003Crepo>#\u003CPR>`)\n- QA: `QA-RESULT \u003Crepo>#\u003CPR> PASS|FAIL \u003Clist>`\n- either: `NEED-INPUT \u003Cquestion>` if blocked on a user decision\n- long reports → \"write to \u003Cfile> then print the marker\" (the Claude TUI has no scrollback)\n\n### 5. Watch (background) and route\n```bash\n$MP\u002Fmp-watch.sh      # run_in_background: exits with new \"label :: marker\" lines (and [ASK] lines when a pane waits)\n```\nOn each wake-up:\n- `OWNER-DONE` → `$MP\u002Fpr-ready.sh owner\u002Frepo PR` (Copilot reviewed the head? unresolved=0? checks?) → if ready and allowed,\n  merge (merge commit) → send the PR to the QA pane via `mp-send.sh`.\n- `QA-RESULT … FAIL` → relay the findings to the owner pane; `PASS` → next step (e.g. open the release PR, don't merge prod).\n- `[ASK]`\u002F`NEED-INPUT` → `$MP\u002Fmp-peek.sh \u003Cpane>`; answer only within the decided scope, otherwise ask the user.\n- Re-arm `mp-watch.sh` after every wake-up. A marker may be re-reported → check PR state before acting.\n\n### 6. Report to the user in short status tables (repo | PR | review | QA | release PR), and say exactly what is waiting on them.\n\n### 7. Wrap up\n`$MP\u002Fmp-peek.sh` each pane → idle → `$MP\u002Fmp-close.sh \u003Cpane ids>`; remove worktrees that are clean+pushed\n(`git worktree remove`, never rm -rf); summarize; offer to record learnings (memory \u002F kb).\n\n## Rules learned the hard way\n- **Grey text in a pane's input box is Claude Code's prompt suggestion**, not a user command — never act on it.\n- Pastes can stay unsubmitted → `mp-send.sh` retries Enter and checks \"esc to interrupt\".\n- **Copilot outage** (review requested but never appears): wait 30–60 min → subagent code review + triage → note\n  \"Copilot did not review\" in the PR. Never claim a review that did not happen.\n- Before declaring \"ready to merge\": `pr-ready.sh` must show copilot_on_head=true (or the documented fallback),\n  unresolved=0, checks pass. After merge: merge_parents=2 (release\u002Fsync PRs must be merge commits, never squash).\n- Workers must not merge, release, or change prod data; the main session decides per the authority agreed in step 1.\n- The main session must not bypass a worker's safety refusal by doing the same thing itself (no permission laundering).\n- Panes cannot SendMessage each other reliably — the main session relays via `mp-send.sh`.\n\n## Related\n`\u002Fpr`, `\u002Fpr-review`, kb pattern `02-patterns\u002Fworkflow\u002FMulti-Pane Claude Orchestration.md`\n",{"name":5,"description":7,"user-invocable":42},true,"835c1f754a3eab31c2e7eb408d21431a98c633ee","skills\u002Fmulti-pane","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km","https:\u002F\u002Fgithub.com\u002Fgoffity","www.narongwate.com","2026-11-10 01:34:18",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":42},[51,54,57],{"tool":52,"command":53},"npx","npx skills add goffity\u002Fdev-km --skill multi-pane",{"tool":55,"command":56},"bunx","bunx skills add goffity\u002Fdev-km --skill multi-pane",{"tool":58,"command":59},"pnpm","pnpm dlx skills add goffity\u002Fdev-km --skill multi-pane","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002FSKILL.md",[62,68,72,76,80,84,88],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"scripts\u002Fmp-close.sh","SCRIPT","脚本",385,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-close.sh",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"scripts\u002Fmp-init.sh",1230,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-init.sh",{"path":73,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":74,"sourceHtmlUrl":75},"scripts\u002Fmp-new.sh",2120,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-new.sh",{"path":77,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":78,"sourceHtmlUrl":79},"scripts\u002Fmp-peek.sh",297,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-peek.sh",{"path":81,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Fmp-send.sh",1303,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-send.sh",{"path":85,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":86,"sourceHtmlUrl":87},"scripts\u002Fmp-watch.sh",1558,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fmp-watch.sh",{"path":89,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":90,"sourceHtmlUrl":91},"scripts\u002Fpr-ready.sh",1165,"https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fmulti-pane\u002Fscripts\u002Fpr-ready.sh",[93,104,136,147,155,170],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":37},"01M6CSZ9DKT0CG5Y2HE8F5D9KX","wait-what","Stop. That last message did not land: re-pitch it.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[100,101,102,103],"wait what","land","stop","message",{"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":118,"publishedAt":37},"01M6CSZ6B0GH2N75WNPPESCDHX","tdd","Test-driven development loop (red-green-refactor) with commit-based phase state and Jira traceability. Use when the user wants to build a feature or fix a bug test-first, mentions \"tdd\", \"red-green-refactor\", or \"test-first\". Replaces the tdg plugin — combines its commit\u002Fphase discipline with seam-based test quality rules from kb Testing Standards.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Ftdd\u002FSKILL.md",[110,115],{"categoryNo":111,"categoryName":112,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":116,"categoryName":117,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000008","测试与质量",[106,119,120,121,122,30,123,124,125,126,24,127,128,129,130,131,132,133,134,135],"discipline","development","state","first","quality","Rules","fix","kb","test","standards","red-green-refactor","build","green","jira","testing","commit","plugin",{"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":37},"01M6CSZ3PNYFR2K5GB197TA7GP","td","Creates post-task retrospectives with Before\u002FAfter context and session documentation.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Ftd\u002FSKILL.md",[],[138,143,144,25,145,146],"documentation","context","task","done",{"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":37},"01M6CSZ1TZKVNHS07B4EBQEKFQ","summary","Generates weekly or monthly session summaries from retrospectives and activity logs.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fsummary\u002FSKILL.md",[],[149,154,25],"logs",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":164,"publishedAt":37},"01M6CSYZQHMHJT9ZV8FYY06XZN","share","Shares knowledge across projects by copying to shared-knowledge directory with cross-project metadata.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fshare\u002FSKILL.md",[161],{"categoryNo":162,"categoryName":163,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000021","资料检索与研究",[157,165,166,167,168,169],"directory","metadata","file","knowledge","projects",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":37},"01M6CSYXFZ7D7EKEFXCQE8QW7S","session-analyzer","Analyzes git changes and creates retrospective drafts with Before\u002FAfter context.","https:\u002F\u002Fgithub.com\u002Fgoffity\u002Fdev-km\u002Fblob\u002Fmain\u002Fskills\u002Fsession-analyzer\u002FSKILL.md",[],[25,177,178,144,179],"session analyzer","git","retrospective"]