@bompus/house-rules 0.0.0-stage → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/CONTRIBUTING.md +54 -0
  3. package/LICENSE +21 -0
  4. package/README.md +378 -2
  5. package/THIRD_PARTY_NOTICES.md +188 -0
  6. package/compose.mjs +125 -0
  7. package/composition.mjs +361 -0
  8. package/config-view.mjs +209 -0
  9. package/config.mjs +381 -0
  10. package/docs/assets/banner-dark.png +0 -0
  11. package/docs/assets/banner-light.png +0 -0
  12. package/docs/assets/overview.png +0 -0
  13. package/docs/configuration.md +269 -0
  14. package/docs/skill-names.md +50 -0
  15. package/examples/person/house-rules.json +15 -0
  16. package/examples/person/rules/10-tooling.md +8 -0
  17. package/examples/person/rules/20-reporting.md +9 -0
  18. package/examples/project/AGENTS.md +18 -0
  19. package/package.json +42 -4
  20. package/rule-references.mjs +91 -0
  21. package/rules/core.md +340 -0
  22. package/rules/modifiers/backlog-outline.md +25 -0
  23. package/rules/modifiers/backlog-visual.md +16 -0
  24. package/rules/modifiers/coded-offers.md +70 -0
  25. package/rules/modifiers/cross-session-relay.md +23 -0
  26. package/rules/modifiers/effort-estimates.md +41 -0
  27. package/rules/modifiers/land-when-done.md +12 -0
  28. package/rules/modifiers/low-quota-handoff.md +20 -0
  29. package/rules/modifiers/model-default-questions.md +33 -0
  30. package/rules/modifiers/multi-agent.md +38 -0
  31. package/rules/modifiers/no-attribution.md +16 -0
  32. package/rules/modifiers/periodic-updates.md +25 -0
  33. package/rules/modifiers/plan-files.md +82 -0
  34. package/rules/modifiers/question-cards.md +48 -0
  35. package/rules/modifiers/release-batching.md +15 -0
  36. package/rules/modifiers/scratch-on-disk.md +15 -0
  37. package/rules/modifiers/shared-host-load.md +19 -0
  38. package/rules/modifiers/solo-operator.md +13 -0
  39. package/rules/modifiers/squash-landing.md +22 -0
  40. package/rules/modifiers/upstream-contributions.md +45 -0
  41. package/rules/modifiers/web-image-formats.md +35 -0
  42. package/rules/references/backlog-view.md +154 -0
  43. package/rules/references/github-actions.md +45 -0
  44. package/rules/references/landing.md +39 -0
  45. package/rules/references/multi-agent.md +51 -0
  46. package/rules/references/release-batching.md +66 -0
  47. package/rules/references/squash-landing.md +50 -0
  48. package/rules/references/thread-visuals.md +45 -0
  49. package/setup.mjs +445 -0
  50. package/skills/hr-agent-guidance-audit/LICENSE +21 -0
  51. package/skills/hr-agent-guidance-audit/SKILL.md +91 -0
  52. package/skills/hr-agent-guidance-audit/agents/openai.yaml +2 -0
  53. package/skills/hr-agent-guidance-audit/references/prune-workflow.md +72 -0
  54. package/skills/hr-agent-guidance-audit/references/records-and-lessons.md +60 -0
  55. package/skills/hr-agent-guidance-audit/references/retirement-verdicts.md +49 -0
  56. package/skills/hr-agent-guidance-refresh/LICENSE +21 -0
  57. package/skills/hr-agent-guidance-refresh/SKILL.md +36 -0
  58. package/skills/hr-agent-guidance-refresh/agents/openai.yaml +2 -0
  59. package/skills/hr-agent-guidance-refresh/references/verification.md +47 -0
  60. package/skills/hr-api-exposure-check/SKILL.md +159 -0
  61. package/skills/hr-api-exposure-check/agents/openai.yaml +3 -0
  62. package/skills/hr-audit-choices/SKILL.md +67 -0
  63. package/skills/hr-audit-choices/agents/openai.yaml +2 -0
  64. package/skills/hr-benchmarking/NOTICE.md +36 -0
  65. package/skills/hr-benchmarking/SKILL.md +279 -0
  66. package/skills/hr-benchmarking/agents/openai.yaml +2 -0
  67. package/skills/hr-benchmarking/references/javascript.md +130 -0
  68. package/skills/hr-benchmarking/references/tools.md +165 -0
  69. package/skills/hr-benchmarking/scripts/process-attribution.ps1 +20 -0
  70. package/skills/hr-benchmarking/scripts/process-attribution.py +107 -0
  71. package/skills/hr-better-accessibility/LICENSE +22 -0
  72. package/skills/hr-better-accessibility/NOTICE.md +46 -0
  73. package/skills/hr-better-accessibility/SKILL.md +119 -0
  74. package/skills/hr-better-accessibility/agents/openai.yaml +3 -0
  75. package/skills/hr-better-accessibility/focus-and-keyboard.md +130 -0
  76. package/skills/hr-better-accessibility/forms.md +82 -0
  77. package/skills/hr-better-accessibility/hit-areas.md +98 -0
  78. package/skills/hr-better-accessibility/motion-and-zoom.md +81 -0
  79. package/skills/hr-better-accessibility/screen-readers.md +102 -0
  80. package/skills/hr-better-accessibility/semantics-and-aria.md +84 -0
  81. package/skills/hr-better-colors/LICENSE +21 -0
  82. package/skills/hr-better-colors/NOTICE.md +37 -0
  83. package/skills/hr-better-colors/SKILL.md +114 -0
  84. package/skills/hr-better-colors/agents/openai.yaml +3 -0
  85. package/skills/hr-better-colors/color-formats.md +90 -0
  86. package/skills/hr-better-colors/color-usage.md +140 -0
  87. package/skills/hr-better-colors/contrast.md +80 -0
  88. package/skills/hr-better-colors/palette-generation.md +104 -0
  89. package/skills/hr-better-colors/palette-structure.md +76 -0
  90. package/skills/hr-better-colors/token-naming.md +97 -0
  91. package/skills/hr-better-layout/LICENSE +22 -0
  92. package/skills/hr-better-layout/NOTICE.md +48 -0
  93. package/skills/hr-better-layout/SKILL.md +92 -0
  94. package/skills/hr-better-layout/agents/openai.yaml +3 -0
  95. package/skills/hr-better-layout/grouping-and-alignment.md +144 -0
  96. package/skills/hr-better-layout/spacing-and-adaptivity.md +215 -0
  97. package/skills/hr-better-typography/LICENSE +22 -0
  98. package/skills/hr-better-typography/NOTICE.md +46 -0
  99. package/skills/hr-better-typography/SKILL.md +172 -0
  100. package/skills/hr-better-typography/agents/openai.yaml +3 -0
  101. package/skills/hr-better-typography/choosing-fonts.md +69 -0
  102. package/skills/hr-better-typography/css-cheat-sheet.md +65 -0
  103. package/skills/hr-better-typography/details-and-accessibility.md +119 -0
  104. package/skills/hr-better-typography/spacing-and-sizing.md +131 -0
  105. package/skills/hr-better-typography/variable-fonts-and-opentype.md +105 -0
  106. package/skills/hr-better-typography/wrapping-and-punctuation.md +57 -0
  107. package/skills/hr-better-writing/LICENSE +22 -0
  108. package/skills/hr-better-writing/NOTICE.md +46 -0
  109. package/skills/hr-better-writing/SKILL.md +122 -0
  110. package/skills/hr-better-writing/agents/openai.yaml +3 -0
  111. package/skills/hr-code-review/LICENSE +21 -0
  112. package/skills/hr-code-review/NOTICE.md +26 -0
  113. package/skills/hr-code-review/SKILL.md +163 -0
  114. package/skills/hr-code-review/agents/openai.yaml +3 -0
  115. package/skills/hr-code-review/references/acp-client.md +43 -0
  116. package/skills/hr-code-review/references/evidence.md +57 -0
  117. package/skills/hr-code-review/references/impact.md +103 -0
  118. package/skills/hr-code-review/references/panel-adjudication.md +58 -0
  119. package/skills/hr-code-review/references/panel-plan.md +61 -0
  120. package/skills/hr-code-review/references/panel-recommendations.json +105 -0
  121. package/skills/hr-code-review/references/panel-recommendations.md +46 -0
  122. package/skills/hr-code-review/references/panel-setup.md +54 -0
  123. package/skills/hr-code-review/references/reviewer-role.md +31 -0
  124. package/skills/hr-code-review/scripts/acp-panel-client.mjs +299 -0
  125. package/skills/hr-code-review/scripts/check-receipts.mjs +263 -0
  126. package/skills/hr-code-review/scripts/panel-plan.mjs +69 -0
  127. package/skills/hr-code-review/scripts/panel-preferences.mjs +220 -0
  128. package/skills/hr-design-exploration/SKILL.md +105 -0
  129. package/skills/hr-design-exploration/agents/openai.yaml +4 -0
  130. package/skills/hr-diagnosing-bugs/NOTICE.md +45 -0
  131. package/skills/hr-diagnosing-bugs/SKILL.md +108 -0
  132. package/skills/hr-diagnosing-bugs/agents/openai.yaml +3 -0
  133. package/skills/hr-diagnosing-bugs/references/reporting.md +97 -0
  134. package/skills/hr-diagnosing-bugs/scripts/check-pr-offer.mjs +47 -0
  135. package/skills/hr-explain-code/NOTICE.md +37 -0
  136. package/skills/hr-explain-code/SKILL.md +110 -0
  137. package/skills/hr-explain-code/agents/openai.yaml +5 -0
  138. package/skills/hr-explain-code/references/helper-brief.md +39 -0
  139. package/skills/hr-extract-shared-steps/SKILL.md +134 -0
  140. package/skills/hr-extract-shared-steps/agents/openai.yaml +3 -0
  141. package/skills/hr-forgotten-work-audit/SKILL.md +130 -0
  142. package/skills/hr-forgotten-work-audit/references/brief-template.md +56 -0
  143. package/skills/hr-forgotten-work-audit/references/result-format.md +46 -0
  144. package/skills/hr-handoff/LICENSE +21 -0
  145. package/skills/hr-handoff/NOTICE.md +29 -0
  146. package/skills/hr-handoff/SKILL.md +114 -0
  147. package/skills/hr-handoff/agents/openai.yaml +5 -0
  148. package/skills/hr-handoff/assets/ledger.example.json +10 -0
  149. package/skills/hr-handoff/assets/receipt.example.json +76 -0
  150. package/skills/hr-handoff/assets/source.example.json +20 -0
  151. package/skills/hr-handoff/references/reconciliation.md +124 -0
  152. package/skills/hr-handoff/references/successor-thread.md +76 -0
  153. package/skills/hr-handoff/scripts/check-reconciliation.mjs +324 -0
  154. package/skills/hr-house-rules-setup/SKILL.md +114 -0
  155. package/skills/hr-house-rules-setup/agents/openai.yaml +5 -0
  156. package/skills/hr-issue-tracker-setup/SKILL.md +49 -0
  157. package/skills/hr-issue-tracker-setup/agents/openai.yaml +5 -0
  158. package/skills/hr-lean-plan/SKILL.md +146 -0
  159. package/skills/hr-lean-plan/agents/openai.yaml +5 -0
  160. package/skills/hr-maintainability-review/SKILL.md +186 -0
  161. package/skills/hr-maintainability-review/agents/openai.yaml +5 -0
  162. package/skills/hr-manual-qa/NOTICE.md +36 -0
  163. package/skills/hr-manual-qa/SKILL.md +37 -0
  164. package/skills/hr-manual-qa/agents/openai.yaml +3 -0
  165. package/skills/hr-navigation-retro/LICENSE +21 -0
  166. package/skills/hr-navigation-retro/NOTICE.md +5 -0
  167. package/skills/hr-navigation-retro/SKILL.md +86 -0
  168. package/skills/hr-navigation-retro/agents/openai.yaml +4 -0
  169. package/skills/hr-navigation-retro/references/inputs.md +67 -0
  170. package/skills/hr-navigation-retro/scripts/retro.py +552 -0
  171. package/skills/hr-navigation-retro/scripts/transcripts.py +205 -0
  172. package/skills/hr-ordering-tests/SKILL.md +51 -0
  173. package/skills/hr-ordering-tests/agents/openai.yaml +2 -0
  174. package/skills/hr-plain-prose/SKILL.md +264 -0
  175. package/skills/hr-plain-prose/agents/openai.yaml +3 -0
  176. package/skills/hr-plain-prose/scripts/check.mjs +331 -0
  177. package/skills/hr-pr-followup/LICENSE +21 -0
  178. package/skills/hr-pr-followup/NOTICE.md +9 -0
  179. package/skills/hr-pr-followup/SKILL.md +74 -0
  180. package/skills/hr-pr-followup/agents/openai.yaml +2 -0
  181. package/skills/hr-pr-followup/references/review-helpers.md +111 -0
  182. package/skills/hr-pr-followup/scripts/check-landing.py +204 -0
  183. package/skills/hr-pr-followup/scripts/check-pr-review.ts +510 -0
  184. package/skills/hr-pr-followup/scripts/merge-pr.sh +100 -0
  185. package/skills/hr-pr-followup/scripts/resolve-pr-thread.ts +219 -0
  186. package/skills/hr-pr-followup/scripts/verify-landed.sh +184 -0
  187. package/skills/hr-progress-report/SKILL.md +49 -0
  188. package/skills/hr-progress-report/agents/openai.yaml +5 -0
  189. package/skills/hr-read-reddit/SKILL.md +44 -0
  190. package/skills/hr-read-reddit/agents/openai.yaml +2 -0
  191. package/skills/hr-read-reddit/scripts/reddit.ts +252 -0
  192. package/skills/hr-read-x-links/SKILL.md +42 -0
  193. package/skills/hr-read-x-links/agents/openai.yaml +2 -0
  194. package/skills/hr-read-x-links/scripts/x-post.ts +264 -0
  195. package/skills/hr-research-shared-links/SKILL.md +103 -0
  196. package/skills/hr-split-to-prs/LICENSE +21 -0
  197. package/skills/hr-split-to-prs/NOTICE.md +9 -0
  198. package/skills/hr-split-to-prs/SKILL.md +61 -0
  199. package/skills/hr-split-to-prs/agents/openai.yaml +2 -0
  200. package/skills/hr-sqlite/SKILL.md +174 -0
  201. package/skills/hr-sqlite/agents/openai.yaml +2 -0
  202. package/skills/hr-sqlite/references/evidence.md +94 -0
  203. package/skills/hr-sqlite/references/tool-decisions.md +39 -0
  204. package/skills/hr-sqlite/scripts/inspect-sqlite.py +245 -0
  205. package/skills/hr-stock-ui-audit/SKILL.md +132 -0
  206. package/skills/hr-stock-ui-audit/agents/openai.yaml +3 -0
  207. package/skills/hr-stock-ui-audit/scripts/scan.mjs +619 -0
  208. package/skills/hr-tdd/LICENSE +21 -0
  209. package/skills/hr-tdd/NOTICE.md +10 -0
  210. package/skills/hr-tdd/SKILL.md +40 -0
  211. package/skills/hr-tdd/agents/openai.yaml +3 -0
  212. package/skills/hr-tdd/mocking.md +39 -0
  213. package/skills/hr-tdd/tests.md +77 -0
  214. package/skills/hr-test-audit/LICENSE +21 -0
  215. package/skills/hr-test-audit/NOTICE.md +67 -0
  216. package/skills/hr-test-audit/SKILL.md +146 -0
  217. package/skills/hr-test-audit/agents/openai.yaml +3 -0
  218. package/skills/hr-test-audit/scripts/floor-guard.ts +137 -0
  219. package/skills/hr-usage-report/SKILL.md +90 -0
  220. package/skills/hr-usage-report/agents/openai.yaml +2 -0
  221. package/skills/hr-usage-report/assets/example-report.json +125 -0
  222. package/skills/hr-usage-report/assets/report-template.html +377 -0
  223. package/skills/hr-usage-report/scripts/render-report.ts +86 -0
  224. package/skills/hr-usage-report/scripts/usage-by-model.ts +499 -0
  225. package/skills/hr-what-next/SKILL.md +151 -0
  226. package/skills/hr-what-next/agents/openai.yaml +4 -0
  227. package/skills/hr-what-next/references/reporting.md +59 -0
  228. package/skills/hr-what-next/scripts/check-open-work.mjs +711 -0
  229. package/skills/hr-writing-for-agents/NOTICE.md +46 -0
  230. package/skills/hr-writing-for-agents/SKILL-MECHANICS.md +83 -0
  231. package/skills/hr-writing-for-agents/SKILL.md +108 -0
  232. package/skills/hr-writing-for-agents/agents/openai.yaml +3 -0
  233. package/skills/hr-writing-pr/NOTICE.md +48 -0
  234. package/skills/hr-writing-pr/SKILL.md +119 -0
  235. package/skills/hr-writing-pr/agents/openai.yaml +2 -0
  236. package/skills/hr-writing-pr/scripts/benefit-chart.py +200 -0
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Commits, pull requests and comments carry no agent or tool credit lines unless the target repository asks for a disclosure.
3
+ after: Writing
4
+ ---
5
+
6
+ ## No attribution
7
+
8
+ Commits, pull requests, issues and comments carry no agent or tool credit: no
9
+ "Generated with" lines, no `Co-Authored-By` agent trailers, no "Made with"
10
+ footers. Where a host has a setting that turns attribution off, set it.
11
+
12
+ When the target repository's contribution guidelines or pull request template
13
+ ask for agent or model disclosure, give exactly what they ask for, where they
14
+ ask for it, and nothing beyond it. If models are asked for, name each that did
15
+ the work; one in a higher published tier of the same provider that reviewed or
16
+ advised goes first (Opus reviewing Sonnet: Opus, Sonnet); else in work order.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: A job expected to run longer than about 10 minutes posts a short status update every 5 minutes by default, with progress, an ETA with its basis or "unmeasured", and findings so far, until the job ends; a watcher event that changes nothing gets at most one line.
3
+ after: Reporting
4
+ ---
5
+
6
+ ## Periodic status updates
7
+
8
+ A job expected to run longer than about 10 minutes gets a status update on its
9
+ own schedule, without the user asking. So does a job that has run that long with
10
+ no estimate. This covers a build, test suite, benchmark, CI run, long search or
11
+ similar. The default interval is 5 minutes. That figure is a default, not a
12
+ measured value; use the interval the user names instead.
13
+
14
+ Each update is one short line, not a report, posted even when nothing has
15
+ changed. It gives completed/total or a percent (the current step when the job
16
+ reports no total), the ETA with its basis or the word "unmeasured", and a
17
+ one-line summary of findings so far. A milestone, failure, stall or change in
18
+ the forecast goes in full instead.
19
+
20
+ Where the host can run a background watcher or timer, arm it to post the
21
+ updates and to report in full only a milestone, failure, stall, forecast change
22
+ or the run's completion. A watcher event that changes nothing gets at most one
23
+ line. Otherwise post at the first natural checkpoint after each interval has
24
+ passed, when a step finishes or a tool call returns. Stop the updates when the
25
+ job ends; the final report replaces them.
@@ -0,0 +1,82 @@
1
+ ---
2
+ description: Multi-step work keeps a visible task list mirrored to a plan file with a ledger of every item's outcome.
3
+ after: Durable notes
4
+ requires: hr-handoff, hr-what-next
5
+ ---
6
+
7
+ ## Task tracking
8
+
9
+ For work with two or more steps, create the task list up front, keep exactly
10
+ one item in progress and mark each item done as it finishes. When no task tool
11
+ is available, keep the list in short progress messages and say so once.
12
+
13
+ Mirror the list to a plan file: the project's plans directory when it documents
14
+ one, otherwise `plans/<topic>/plan.md` in your notes directory (§ Durable
15
+ notes). At session start, read the relevant plans and every `blocked-on-user`
16
+ plan whatever its owner, so unanswered decisions stay visible; that read is not
17
+ the sweep below. Update the plan when you update the list, add findings as they
18
+ turn up, and use the same item states in both. At each reconciliation event in
19
+ § Finishing work, update both records before choosing the next action. Point at
20
+ the plan or handoff that owns an item instead of copying it; a handoff points
21
+ at its plan.
22
+
23
+ When you rebuild a ledger or inventory from an earlier one, carry
24
+ each open or deferred line over as an item, marked done with its outcome
25
+ when it has closed. Several lines may share one item only when the same next
26
+ action and completion evidence satisfy every line. A summary row such as "the
27
+ rest, reopen only if asked" loses them. The `hr-handoff` skill's `scripts/check-reconciliation.mjs` checks that
28
+ every such line maps to an item when the earlier plan is named as a source; it
29
+ does not judge the outcome.
30
+
31
+ - Head the plan with `Owner:` (session name, or `none` for a shared backlog)
32
+ and `Status:` (`active`, `paused`, `blocked-on-user`, `completed`); update both
33
+ when they change. Add `Purpose:` with the session's purpose in one sentence
34
+ (§ Session purpose).
35
+ - For substantial plans, state the intended outcome and the evidence that will
36
+ show it is done; update both when findings change the task.
37
+ - When new work arrives mid-task, add it as pending before switching; never
38
+ drop an in-progress item silently.
39
+ - Keep the whole ledger in the plan: deferred items, follow-ups and incidental
40
+ findings with a one-line reason (`user-flagged`, `deferred-by`,
41
+ `blocked-by`, `low priority`), and closed items with their outcome (landed
42
+ commit, won't do and why, moved elsewhere) and start and end times. Note the
43
+ start time when you pick an item up.
44
+ - When repeated attempts leave an item unresolved without new evidence, record
45
+ whether it is blocked, deferred or using an approach that is not working. For
46
+ an approach that is not working, change method within the authorized scope,
47
+ or propose a smaller deliverable or dropping the item; the user decides scope
48
+ changes and drops. Judge progress by evidence, not age or retry counts;
49
+ waiting on a dependency or ruling out a hypothesis does not by itself show
50
+ that an approach is not working.
51
+ - Keep the ledger as a `## Ledger` section of item lines a script can read:
52
+ `- [ ] text` is open, `- [~] text … trigger: <what reopens it>` deferred,
53
+ `- [x] text … evidence: <result>` done and `- [-] text … by: <who dropped it>`
54
+ dropped (`by: user, not selected` for an option the user passed over). Name
55
+ each scratch directory, checkout and branch you own in an item. Write each
56
+ follow-up as an item, not as a sentence elsewhere in the plan.
57
+ - An item that waits on another thread (an upstream issue or pull request, a
58
+ maintainer, another session) carries `recheck: YYYY-MM-DD`, because a
59
+ trigger such as "maintainer replies" does not fire by itself. A question you
60
+ send to another thread is an open item that names where the reply will
61
+ arrive and carries a `recheck:` date. On that date, look at the thread,
62
+ record what you found, and set a new date or close the item.
63
+ - Before claiming that nothing remains or the session can close, and before
64
+ archiving a plan, run the `hr-what-next` skill's
65
+ `scripts/check-open-work.mjs <plan>`, adding `--checkout <path>` for each
66
+ checkout you touched and `--repo <owner/repo>` when items name pull requests
67
+ or issues by number alone, and quote its result. Open or deferred items, and owned
68
+ resources no open item names, mean work remains. Check each item it lists as
69
+ possibly finished or due for a re-check, and update its line.
70
+ - Before archiving a completed plan, save its completed status, completion
71
+ time and evidence. Apply § Finishing work before marking the whole session
72
+ completed. Then archive with the same script's `--archive` flag; it moves the
73
+ plan to `plans/archive/<topic>-<date>/` beside it only when the status is
74
+ completed and nothing is open. A plan whose status is `active`, `paused` or
75
+ `blocked-on-user` stays where the session-start read finds it.
76
+
77
+ Sweep other sessions' plans and handoffs only when the user asks, such as
78
+ "what's waiting on me?", and only for the current project. Offer unowned items,
79
+ `blocked-on-user` items and items whose owner has no live session in the host's
80
+ session list or coordination roster, naming each owner. When you cannot tell
81
+ whether an owner is live, or who owns an item, mention it as another session's
82
+ context instead of offering it.
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Opt in to question cards beside complete text offers when the host supports them; availability and presentation can vary by host, provider and model.
3
+ after: Offers
4
+ ---
5
+
6
+ ## Question cards
7
+
8
+ This modifier opts in to cards beside text. Availability, invocation and
9
+ presentation can vary by host, provider and model: a card may be unavailable,
10
+ skipped or shown unexpectedly. Keep the complete text offer usable on its
11
+ own; do not promise identical behavior across sessions. If the user chooses
12
+ text only, disable this modifier and do not call question-card tools, even
13
+ when they are exposed.
14
+
15
+ Asking the user to choose between options is an offer, even when the user
16
+ asked you to ask them, so it gets the full text offer on every host.
17
+
18
+ When your host gives you a multiple-choice question tool (one that shows the
19
+ user a question with selectable options), send every offer as a question card
20
+ as well as text, unless the choice depends on content only the text carries:
21
+ images, tables, code, links, or a comparison longer than a card option holds.
22
+ Some hosts show the card before the text written ahead of it, so the user
23
+ would answer without that content. Send those offers as text alone.
24
+
25
+ 1. Write the complete text offer first, with every part § Offers lists. A
26
+ one-line question, a line saying you will ask, or no text at all is not a
27
+ text offer. The card never replaces it, because some hosts cannot display
28
+ cards and some drop short text sent beside one.
29
+ 2. In the same reply, right after the text offer, call the tool. Do not end
30
+ the reply between the two.
31
+ 3. Ask one card question per offer question, in the same order. Give each
32
+ option the label it has in the text offer, code included when the offer
33
+ uses codes, with "(Recommended)" where the text offer has it: for example
34
+ `1A (Recommended) pylon` under coded offers, not `pylon`. Write each
35
+ option's description so it stands alone, saying what the option does and
36
+ what it costs or risks: on some hosts the card is all the user sees before
37
+ answering. Use multi-select when the options combine. Leave out an "Other"
38
+ option; hosts add their own free-text choice.
39
+ 4. Treat the card's answer as a typed reply naming the same options. On some
40
+ hosts the answer arrives as a new turn; it still answers the offer.
41
+
42
+ When no such tool is available, send the text offer alone. Do not search for
43
+ a substitute or call another tool in its place.
44
+
45
+ When you answer a card that a delegated agent raised, key each answer by the
46
+ question id in the request, because hosts use different ids. Then read the
47
+ agent's result again: some hosts report the task finished while its card
48
+ waits and deliver the real result only after the answer.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Batch approved, compatible changes for releases and audit factual claims before releases or public announcements.
3
+ after: Landing
4
+ reference: ../references/release-batching.md
5
+ ---
6
+
7
+ ## Release batching
8
+
9
+ Landing does not authorize publishing. Follow the repository's release requirements.
10
+ Before preparing or publishing a release or public announcement, read
11
+ [the release procedure](../references/release-batching.md), including its factual
12
+ accuracy audit and changelog audit. Run the accuracy audit on every public
13
+ repository's version bump and the changelog audit on every version bump, before
14
+ the first publish step, and land their corrections first. Do not publish with
15
+ unresolved accuracy blockers or expand scope to new benchmarks.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Task scratch lives on disk under the user data directory, never in RAM-backed /tmp.
3
+ after: Durable notes
4
+ ---
5
+
6
+ ## Scratch files
7
+
8
+ Keep task scratch on disk-backed storage, under `tmp/<topic>/` in your notes
9
+ directory (§ Durable notes), even when a tool or harness defaults to `/tmp` or
10
+ to a temp path it pre-approves. On many Linux systems
11
+ `/tmp` is RAM-backed, so large files there compete with running programs for
12
+ memory. Files that can approach 1 GB (databases, traces, downloads, extracted
13
+ archives) never go there, whatever a tool's default says. Write in-progress
14
+ receipts straight to their final location, and delete scratch when the task
15
+ ends.
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: On a shared machine, follow its resource budgets; without one, get operator direction before parallel workers or whole-repository commands, and use memory controls.
3
+ after: Coordination and isolation
4
+ ---
5
+
6
+ ## Shared machine load
7
+
8
+ When local work shares a host, follow its declared resource budgets. A phase is
9
+ resource-intensive when its expected CPU, memory or I/O demand exceeds the
10
+ host's budget for concurrent work. Before such a phase, check current load and
11
+ running jobs. Without a budget, get operator direction before launching
12
+ parallel local workers or commands that build, test, index or process an
13
+ entire repository or dataset; bounded reads and edits may continue.
14
+
15
+ Work risks exhausting memory when its expected or last measured peak leaves
16
+ little headroom in the memory available to it, or when its peak is unknown and
17
+ its input is large. Constrain such work using the host's supported controls.
18
+ Retry with a larger budget only when host evidence shows memory pressure caused
19
+ the failure; without that evidence, find the cause before raising the budget.
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: For repositories with one maintainer, the user's direction is the review; no review-gated steps.
3
+ after: Landing
4
+ ---
5
+
6
+ ## Solo operator
7
+
8
+ The user's repositories have no second reviewer: the user's explicit direction
9
+ is the review. Never offer "await review", "open a pull request for review" or
10
+ any other review-gated next step. Land each task through a pull request, so
11
+ the pull request records why the default branch moved; skip it only for
12
+ trivially mechanical changes, or when the user, directly or in the
13
+ repository's own guidance, directs a direct push.
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: Pull requests land by squash merge after review-bot findings are handled, and the session's checkout moves off the landed branch.
3
+ after: Landing
4
+ reference: ../references/squash-landing.md
5
+ ---
6
+
7
+ ## Squash landing
8
+
9
+ Prefer squash merges unless the repository requires another strategy or the user
10
+ picks one. Before integration, handling review feedback, or moving off a landed
11
+ branch, read [the squash procedure](../references/squash-landing.md).
12
+ When a review bot reviews pull requests, merge only after it finishes; fix or
13
+ answer all findings, resolve threads, and read the full review body.
14
+
15
+ During integration, never switch, reset, force-move or remove the session's
16
+ checkout. Default-branch updates must meet the fast-forward and ownership
17
+ conditions in § Landing. After the merge, fetch first; move off a landed branch
18
+ only when its content is in the base and the tree is clean. When the base is
19
+ checked out elsewhere, detach at the fetched base. Never merge, reset or stash
20
+ to move the checkout. Leave app-managed checkouts for the app to retire.
21
+ If the tree is dirty or ownership is uncertain, stop and record its owner.
22
+ Update the task record and follow § Cleanup after each landing.
@@ -0,0 +1,45 @@
1
+ ---
2
+ description: A measured optimization, fix or defect found in a third-party project is offered for submission to that project through its own contribution route.
3
+ after: Repository work
4
+ requires: hr-benchmarking, hr-writing-pr
5
+ ---
6
+
7
+ ## Upstream contributions
8
+
9
+ When work on a third-party project produces a finding that is worth a
10
+ maintainer's time, offer to submit it to that project rather than leaving it in
11
+ a local branch or a note. It qualifies when you reproduced or measured the
12
+ effect and it matches a kind of change the project's contribution guide or open
13
+ issues invite, such as performance fixes or a reported defect.
14
+
15
+ 1. Offer the submission under § Offers as soon as the evidence is complete.
16
+ Name the channel and the scope.
17
+ 2. Pick the channel from the project's contribution guide: a comment on an
18
+ existing matching issue, a new issue, a discussion for proposals, or a pull
19
+ request. A behavior change, or a project that asks for prior approval, starts
20
+ with a comment or discussion, not a pull request. Count the underlying
21
+ problems and split the submission when the guide asks for one per request.
22
+ 3. Meet § Repository work first: the search for existing reports, the review of
23
+ the diff, the relevant checks, and the project's template and disclosure ask.
24
+ 4. Show the user the exact text and channel once before posting. Posting is
25
+ public and cannot be undone; this rule makes submitting the expected next
26
+ step, not a waiver of that look. Only a user instruction naming the kind of
27
+ submission and the projects, such as "post issue comments on project X
28
+ without asking", removes it.
29
+ 5. Title a performance discussion or issue with its headline result and the
30
+ workload it holds for, such as "saving a file takes 1.1 s with 500
31
+ open tabs, 0.17 s with the fix". Use a figure only when it clears the
32
+ `hr-benchmarking` bar (outside the declared variation criterion,
33
+ repetitions stated) and keep the caveats in the body. Title a defect by what
34
+ the person sees, not by the code involved, and add how often only when the
35
+ evidence supports a rate. Open the body with the same headline. A qualified
36
+ measured result also gets a chart of it (`hr-writing-pr`). A pull request keeps
37
+ the project's title convention; its opening body sentence carries the figure
38
+ (`hr-writing-pr`).
39
+ 6. When a later measurement or review changes the headline, edit the title and
40
+ opening lines of your own submission to match, and say in a comment what
41
+ changed. A submission that buries its benefit under background gets rewritten,
42
+ not left.
43
+
44
+ A finding outside the session's purpose stays parked under § Session purpose
45
+ until the user opens it.
@@ -0,0 +1,35 @@
1
+ ---
2
+ description: Prefer WebP for web raster images when it saves bytes at acceptable quality, with format exceptions and delivered-file checks.
3
+ after: Writing
4
+ ---
5
+
6
+ ## Web image formats
7
+
8
+ When creating, importing or replacing raster images a web project controls,
9
+ prefer WebP when its target browsers and publishing pipeline support it.
10
+ Compare files at the required dimensions and acceptable visual quality; use
11
+ WebP when it reduces bytes while preserving required detail, transparency and
12
+ animation. Convert existing assets only within the selected task's scope.
13
+
14
+ WebP supports lossy and lossless compression and transparency, with broad
15
+ browser support. Smaller files reduce data transfer and can shorten image
16
+ downloads. Page rendering also depends on discovery, layout and rendering
17
+ work; measure page timing separately before claiming a speed gain.
18
+
19
+ Keep SVG for suitable vector artwork. Use PNG or lossless WebP when exact
20
+ pixels or sharp text require it. Choose another supported format, including
21
+ AVIF, when a size/quality comparison or required consumer favors it. Preserve
22
+ fallbacks that supported clients or integrations require. Keep externally
23
+ hosted images in their provider's permitted delivery format; this preference
24
+ does not authorize downloading, transcoding or rehosting them.
25
+
26
+ Preserve editing sources when needed, attribution, alt text, intended crop,
27
+ dimensions and responsive sources. Compare the actual derivatives delivered
28
+ by the publishing system, whose encoder settings may differ from a local
29
+ preview. Verify image responses, MIME types and appearance at the relevant
30
+ viewports. A WebP filename alone establishes neither correct encoding nor
31
+ smaller delivery. Format and quality selection require judgment; this
32
+ preference has no automatic enforcement check.
33
+
34
+ References: [WebP overview](https://developers.google.com/speed/webp) and
35
+ [MDN image formats](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types).
@@ -0,0 +1,154 @@
1
+ ## Backlog view
2
+
3
+ Whenever any item remains in a backlog, remaining-work or walk-through report,
4
+ show one panel of every open item beside the table, not only when the user asks
5
+ to see the backlog. Group the items by what each waits on and order the groups
6
+ bottom-up, so the items that can move sit last, next to the offer:
7
+
8
+ 1. **Waiting on others or a date**, with its count and "not work to start yet".
9
+ A table with Trigger, Item and Owner columns, in date order with undated
10
+ events last. A long path or list goes on a second line under its item.
11
+ Never start these items or offer them.
12
+ 2. **Needs your decision**, with its count. One bordered row per question: a Q
13
+ badge carrying the offer's question number, the item, a muted second line
14
+ with its status and owner, and answer chips on the right: the question's own
15
+ option codes when the offer uses codes (`1A`, `1B`), otherwise yes, no and
16
+ defer. The chips repeat the offer's choices; they are not controls and are
17
+ never a second set of reply labels. Mark the group being
18
+ asked "group N of M, this reply" in the header, tinted, with an accent rail
19
+ beside its rows. Put that group last, with its highest-ranked question last
20
+ within it.
21
+ 3. **Actionable now**, with its count. Keep the group when it is empty: write
22
+ "Nothing." and the reason.
23
+
24
+ The panel has a fixed dark background (`#12151c`) with text `#e6e8ee` and muted
25
+ text `#98a1b5` (7.0:1 on the panel). Triggers are `#8fb4ff`; the current group
26
+ and Q badges use `#ffd479`, with dark text on the badge. Group names, counts,
27
+ Q numbers and the words "this reply" carry the meaning, not color alone. Below
28
+ about 520 px wide it becomes one column: hide the column headings and stack
29
+ trigger, item and owner. Render it with the host's own preview or rendering
30
+ tool, and check it at desktop and phone widths when the tool allows. Build it
31
+ from this skeleton, with the report's own items:
32
+
33
+ ```html
34
+ <div class="w">
35
+ <section>
36
+ <h4>1. Waiting on others or a date · 2 <small>not work to start yet</small></h4>
37
+ <div class="cols"><span>Trigger</span><span>Item</span><span>Owner</span></div>
38
+ <div class="r">
39
+ <span class="d">Oct 14</span><span>Vendor replies to the support ticket</span
40
+ ><span class="mu">vendor</span>
41
+ </div>
42
+ </section>
43
+ <section class="cur">
44
+ <h4>2. Needs your decision · 1 <small>group 1 of 1, this reply</small></h4>
45
+ <div class="dq">
46
+ <span class="q">Q1</span>
47
+ <span class="t">Drop the unused cache layer?<span class="m">parked · web app</span></span>
48
+ <span class="a"><span>yes</span><span>no</span><span>defer</span></span>
49
+ </div>
50
+ </section>
51
+ <section>
52
+ <h4>3. Actionable now · 0</h4>
53
+ <div class="none">Nothing. Every other open item waits on a date or someone else.</div>
54
+ </section>
55
+ </div>
56
+ <style>
57
+ .w {
58
+ background: #12151c;
59
+ color: #e6e8ee;
60
+ border-radius: 10px;
61
+ padding: 16px;
62
+ font:
63
+ 13px/1.45 system-ui,
64
+ sans-serif;
65
+ }
66
+ .w section {
67
+ margin: 0 0 14px;
68
+ }
69
+ .w section:last-child {
70
+ margin: 0;
71
+ }
72
+ .w h4 {
73
+ margin: 0 0 6px;
74
+ padding: 5px 10px;
75
+ background: #181c27;
76
+ border-radius: 6px;
77
+ color: #c9d1e3;
78
+ display: flex;
79
+ justify-content: space-between;
80
+ }
81
+ .w small,
82
+ .mu,
83
+ .m {
84
+ color: #98a1b5;
85
+ font-weight: 400;
86
+ }
87
+ .cols,
88
+ .r {
89
+ display: grid;
90
+ grid-template-columns: 132px 1fr 168px;
91
+ gap: 10px;
92
+ padding: 6px 10px;
93
+ border-bottom: 1px solid #1c2130;
94
+ }
95
+ .cols {
96
+ color: #98a1b5;
97
+ font-size: 12px;
98
+ }
99
+ .d {
100
+ color: #8fb4ff;
101
+ }
102
+ .none {
103
+ padding: 6px 10px;
104
+ color: #98a1b5;
105
+ }
106
+ .cur h4 {
107
+ background: #2a2410;
108
+ color: #ffd479;
109
+ box-shadow: inset 3px 0 0 #ffd479;
110
+ }
111
+ .dq {
112
+ display: grid;
113
+ grid-template-columns: 34px 1fr auto;
114
+ gap: 8px;
115
+ border: 1px solid #ffd479;
116
+ border-radius: 8px;
117
+ padding: 7px 10px;
118
+ margin: 8px 0;
119
+ }
120
+ .q {
121
+ background: #ffd479;
122
+ color: #12151c;
123
+ border-radius: 4px;
124
+ font-weight: 700;
125
+ text-align: center;
126
+ align-self: start;
127
+ }
128
+ .m {
129
+ display: block;
130
+ font-size: 12px;
131
+ }
132
+ .a span {
133
+ border: 1px solid #2a3040;
134
+ border-radius: 5px;
135
+ padding: 0 7px;
136
+ margin-left: 4px;
137
+ }
138
+ @media (max-width: 520px) {
139
+ .cols {
140
+ display: none;
141
+ }
142
+ .r {
143
+ grid-template-columns: 1fr;
144
+ }
145
+ }
146
+ </style>
147
+ ```
148
+
149
+ Where the host has no render tool, give the same groups as a Markdown outline:
150
+ numbered group headings with counts, one bullet per item with its trigger in
151
+ bold first and its owner last, Q labels in bold with the item and its status,
152
+ "Nothing." and the reason for an empty actionable group, and "▶ group N of M,
153
+ this reply" on the group being asked. The offer keeps its own format; the view
154
+ adds no offer.
@@ -0,0 +1,45 @@
1
+ ## GitHub Actions
2
+
3
+ Inspect the current workflows, run logs and effective repository policies before
4
+ changing CI. Distinguish runner startup or action-policy failures from test
5
+ failures, timeouts and missing credentials. Preserve checks and assertions;
6
+ qualify timeout changes with the actual failing operation and comparable runs.
7
+ Give jobs finite timeouts. Cancel an older pull-request run only when a newer
8
+ run for the same pull request covers the same required checks; preserve required
9
+ default-branch and release evidence.
10
+
11
+ ### Choose the concurrency boundary
12
+
13
+ Independent jobs can run on separate runners. A job's steps normally run in
14
+ sequence, but GitHub also supports native parallel steps. Confirm current
15
+ [workflow syntax](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsparallel)
16
+ before using it; older model knowledge may omit this capability.
17
+
18
+ - A `parallel` group starts its steps together and waits for the group.
19
+ - `background: true` starts a step without waiting. Use its `id` with `wait` or
20
+ `cancel`, or use `wait-all` to wait for every active background step, as the
21
+ dependency and failure policy requires.
22
+ - Parallel steps share a runner, workspace and resource budget. Inspect writes,
23
+ caches, outputs and prerequisites before overlapping commands. Install shared
24
+ dependencies first. Do not infer a speedup without measurements.
25
+ - Workflow `concurrency` controls overlapping runs; it does not parallelize steps.
26
+
27
+ Keep failure propagation and required evidence intact. More parallelism can
28
+ increase contention or duplicate work. Prefer the smallest independent group
29
+ that addresses a measured or operational need.
30
+
31
+ ### Forks and notifications
32
+
33
+ Establish whether a fork is maintained independently or only hosts contributions
34
+ upstream. Honor that purpose before enabling workflows, publishing or changing
35
+ automation settings. Inspect repository Actions permissions separately from
36
+ workflow triggers and notification subscriptions.
37
+
38
+ Disabling repository Actions stops ordinary workflows, but enabled Dependabot
39
+ can still run on Actions. Check dependency-update automation separately when
40
+ investigating continuing runs. Keep security alerts and notification preferences
41
+ distinct from update automation; do not silence unrelated failures.
42
+
43
+ Sources: [parallel-step announcement](https://github.blog/changelog/2026-06-25-actions-steps-can-now-be-run-in-parallel/),
44
+ [Actions settings](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository),
45
+ [Dependabot on Actions](https://docs.github.com/en/code-security/concepts/supply-chain-security/dependabot-on-actions).
@@ -0,0 +1,39 @@
1
+ ## Landing
2
+
3
+ A branch or worktree is an intermediate step. Land a change (merge or push it
4
+ into the remote default branch) only when the user has directed it, for this
5
+ task or as a standing rule in their rules or the repository's guidance. Until
6
+ then, a task finishes committed on its branch with landing offered. Choosing an
7
+ offer option that includes landing, or replying with the accept line when the
8
+ recommended option includes it, is that direction.
9
+
10
+ At task completion, unlanded or uncommitted task changes get one landing option, `Land PR #<n>` or `Commit and land <change>`, never a bare done; only an explicit user deferral (recorded with branch, commits and reason) leaves it out. The option covers this section and § Cleanup, merge included; name only departures from that. Land through the repository's required path without bypassing checks. Landing is done when a fresh fetch shows the change in the default branch.
11
+
12
+ Leave alone a checkout another
13
+ session or job uses, or whose use you cannot tell. Never merge, reset, stash or
14
+ switch it to make it match the default.
15
+
16
+ After integration:
17
+
18
+ - Fetch, then bring the local default branch current. When it is clean,
19
+ strictly behind and not checked out elsewhere, fast-forward it. When another
20
+ worktree has it checked out and you know no session or running job is using
21
+ that worktree (your own main checkout, for example), run
22
+ `git merge --ff-only <sha>` there with the remote head you just fetched and
23
+ verified; unrelated uncommitted files may stay. Avoid `git pull` there: a
24
+ fetch by another process can rewrite the shared `FETCH_HEAD` mid-pull and
25
+ fail it with "Cannot fast-forward to multiple branches". When you cannot
26
+ tell, treat it as in use. Confirm the local and fetched remote heads match.
27
+ - If the default branch is diverged, on another branch, in use, or the merge
28
+ refuses because local edits would be overwritten, leave it and report its
29
+ path and the blocker. Never merge, reset, stash or switch branches to make it
30
+ match, and never update other sessions' worktrees or separate clones.
31
+ - Delete the merged remote branch when it is this task's own branch
32
+ (`git push origin --delete <branch>` when the merge did not); § Cleanup
33
+ covers branches others may rely on. Before merging a pull request that another open pull
34
+ request targets, retarget that one to the default branch first.
35
+ - When the change landed by squash, verify the pull request's recorded squash
36
+ commit is in the fetched default branch and the intended changes landed; the
37
+ original feature commits need not be ancestors.
38
+
39
+ Before the first publish step of a version bump (tag, publish, release, announcement), review unreleased changelog entries and public materials (READMEs, charts, graphics with alt text, listing text, announcement) and fix what is stale first; an urgent release may limit only the materials to what it affects.
@@ -0,0 +1,51 @@
1
+ ## Working with other agents
2
+
3
+ A worker's report that leaves items open without naming a blocker is a
4
+ checkpoint, not completion: send it back naming them, and after two or three
5
+ continuations review the work yourself. A worker with a background command or
6
+ subagent still running is not done. Take its elapsed time from the host's
7
+ durations or timestamps, not from its report. When wall-clock time matters,
8
+ give a budget and restate the elapsed time in each follow-up, or say that an
9
+ earlier correct result beats a later one; budgets are advisory, hard timeouts
10
+ are not. Reuse workers for related follow-ups, do independent work while they
11
+ run instead of polling, and keep workers from delegating further unless asked.
12
+
13
+ Split standards by where they are enforced. Give implementers the task, file
14
+ boundaries, public APIs and load-bearing architectural constraints, even ones
15
+ no tool can check. Keep style and judgment calls for the review pass, where the
16
+ reviewer reads the applicable guidance itself; a convention that does not fit
17
+ one line with a yes/no test is taste and reviewer-only. What a formatter,
18
+ linter, type check or automated gate can enforce belongs in tooling for both,
19
+ never in prose for either. When no second reviewer runs, the user's direction
20
+ is the only judgment backstop; say so instead of assuming review happened.
21
+ Asking an advisor model is not a second review.
22
+
23
+ After a model review, treat each finding as a claim. Fix it when a reproduced
24
+ failure (a test that fails before the fix, where one fits) or a cited
25
+ requirement confirms it, with the smallest change that clears it; a reviewer's
26
+ proposed remedy is a suggestion. Answer an unconfirmed finding with the reason.
27
+ Run the relevant checks. A fix that changes code logic permits a follow-up
28
+ review; it does not require one.
29
+ Code logic includes control flow, data handling, interfaces, queries and values
30
+ a program reads. Request a follow-up only for a named remaining risk that
31
+ local checks cannot resolve. Batch known fixes first, then focus the review on
32
+ changed logic and unresolved findings. Never restart a whole-change review
33
+ solely because a fix changed logic.
34
+
35
+ Before a follow-up, record its scope and round limit in the plan. A further
36
+ logic fix does not reset that limit. When the limit is reached, report any
37
+ remaining blocker and get the user's direction before another model round.
38
+ Fixes that touch only docs, comments, changelog text or tests ship on local
39
+ checks. The pull request body names the findings fixed and says when no
40
+ further round ran. Required repository checks and review gates still apply.
41
+
42
+ Before cleaning up a branch, directory or worktree by hand or on a schedule,
43
+ check that no session of any installed agent host uses it: session records and
44
+ workspace or branch associations as well as processes, including idle, paused,
45
+ disconnected and resumable sessions. Resolve equivalent paths and check
46
+ sessions in child directories before removing a parent. Recheck right before
47
+ deleting; scheduled cleanup skips what it could not verify. When you finish,
48
+ offer an app-managed session's branch to its owner for deletion, unless the
49
+ session is still on it. Before creating a task worktree, check the
50
+ repository's worktree list and report unexplained leftovers; `git worktree
51
+ prune --dry-run` shows stale registrations.