@bompus/house-rules 0.11.0 → 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 (111) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/README.md +91 -60
  3. package/compose.mjs +8 -2
  4. package/composition.mjs +11 -3
  5. package/config-view.mjs +18 -3
  6. package/config.mjs +74 -13
  7. package/docs/assets/overview.png +0 -0
  8. package/docs/configuration.md +85 -9
  9. package/package.json +4 -2
  10. package/rules/core.md +118 -209
  11. package/rules/modifiers/backlog-outline.md +25 -0
  12. package/rules/modifiers/backlog-visual.md +16 -0
  13. package/rules/modifiers/coded-offers.md +47 -17
  14. package/rules/modifiers/cross-session-relay.md +23 -0
  15. package/rules/modifiers/low-quota-handoff.md +4 -3
  16. package/rules/modifiers/model-default-questions.md +33 -0
  17. package/rules/modifiers/multi-agent.md +6 -2
  18. package/rules/modifiers/no-attribution.md +7 -1
  19. package/rules/modifiers/periodic-updates.md +25 -0
  20. package/rules/modifiers/plan-files.md +35 -3
  21. package/rules/modifiers/release-batching.md +4 -2
  22. package/rules/modifiers/shared-host-load.md +13 -42
  23. package/rules/modifiers/squash-landing.md +1 -1
  24. package/rules/modifiers/upstream-contributions.md +45 -0
  25. package/rules/modifiers/web-image-formats.md +35 -0
  26. package/rules/references/backlog-view.md +154 -0
  27. package/rules/references/landing.md +14 -14
  28. package/rules/references/multi-agent.md +6 -2
  29. package/rules/references/release-batching.md +27 -4
  30. package/rules/references/squash-landing.md +10 -4
  31. package/rules/references/thread-visuals.md +45 -0
  32. package/setup.mjs +87 -17
  33. package/skills/hr-agent-guidance-audit/SKILL.md +10 -5
  34. package/skills/hr-agent-guidance-audit/references/prune-workflow.md +72 -0
  35. package/skills/hr-agent-guidance-audit/references/records-and-lessons.md +1 -1
  36. package/skills/hr-agent-guidance-audit/references/retirement-verdicts.md +49 -0
  37. package/skills/hr-agent-guidance-refresh/SKILL.md +25 -57
  38. package/skills/hr-agent-guidance-refresh/references/verification.md +1 -1
  39. package/skills/hr-audit-choices/SKILL.md +1 -1
  40. package/skills/hr-benchmarking/SKILL.md +122 -159
  41. package/skills/hr-benchmarking/references/javascript.md +113 -0
  42. package/skills/hr-benchmarking/references/tools.md +62 -57
  43. package/skills/hr-better-accessibility/SKILL.md +1 -1
  44. package/skills/hr-better-accessibility/screen-readers.md +1 -0
  45. package/skills/hr-code-review/SKILL.md +19 -3
  46. package/skills/hr-code-review/agents/openai.yaml +1 -1
  47. package/skills/hr-code-review/references/acp-client.md +43 -0
  48. package/skills/{hr-change-impact/SKILL.md → hr-code-review/references/impact.md} +2 -12
  49. package/skills/hr-code-review/references/panel-adjudication.md +58 -0
  50. package/skills/hr-code-review/references/panel-plan.md +61 -0
  51. package/skills/hr-code-review/references/panel-recommendations.json +105 -0
  52. package/skills/hr-code-review/references/panel-recommendations.md +46 -0
  53. package/skills/hr-code-review/references/panel-setup.md +54 -0
  54. package/skills/hr-code-review/references/reviewer-role.md +31 -0
  55. package/skills/hr-code-review/scripts/acp-panel-client.mjs +299 -0
  56. package/skills/hr-code-review/scripts/check-receipts.mjs +263 -0
  57. package/skills/hr-code-review/scripts/panel-plan.mjs +69 -0
  58. package/skills/hr-code-review/scripts/panel-preferences.mjs +220 -0
  59. package/skills/hr-design-exploration/SKILL.md +24 -1
  60. package/skills/hr-design-exploration/agents/openai.yaml +2 -2
  61. package/skills/hr-diagnosing-bugs/SKILL.md +2 -2
  62. package/skills/hr-diagnosing-bugs/references/reporting.md +29 -4
  63. package/skills/hr-diagnosing-bugs/scripts/check-pr-offer.mjs +47 -0
  64. package/skills/hr-explain-code/SKILL.md +1 -1
  65. package/skills/hr-extract-shared-steps/SKILL.md +1 -1
  66. package/skills/hr-forgotten-work-audit/SKILL.md +130 -0
  67. package/skills/hr-forgotten-work-audit/references/brief-template.md +56 -0
  68. package/skills/hr-forgotten-work-audit/references/result-format.md +46 -0
  69. package/skills/hr-handoff/LICENSE +21 -0
  70. package/skills/hr-handoff/NOTICE.md +29 -0
  71. package/skills/hr-handoff/SKILL.md +24 -1
  72. package/skills/hr-handoff/references/reconciliation.md +25 -6
  73. package/skills/hr-handoff/references/successor-thread.md +76 -0
  74. package/skills/hr-handoff/scripts/check-reconciliation.mjs +48 -6
  75. package/skills/hr-house-rules-setup/SKILL.md +22 -8
  76. package/skills/hr-lean-plan/SKILL.md +4 -0
  77. package/skills/hr-maintainability-review/SKILL.md +14 -4
  78. package/skills/hr-maintainability-review/agents/openai.yaml +1 -1
  79. package/skills/hr-manual-qa/SKILL.md +1 -1
  80. package/skills/hr-ordering-tests/SKILL.md +1 -1
  81. package/skills/hr-plain-prose/SKILL.md +7 -4
  82. package/skills/hr-pr-followup/SKILL.md +6 -3
  83. package/skills/hr-pr-followup/references/review-helpers.md +21 -0
  84. package/skills/hr-pr-followup/scripts/check-landing.py +204 -0
  85. package/skills/hr-pr-followup/scripts/merge-pr.sh +100 -0
  86. package/skills/hr-pr-followup/scripts/verify-landed.sh +184 -0
  87. package/skills/hr-read-reddit/SKILL.md +1 -1
  88. package/skills/hr-research-shared-links/SKILL.md +103 -0
  89. package/skills/hr-sqlite/SKILL.md +174 -0
  90. package/skills/hr-sqlite/agents/openai.yaml +2 -0
  91. package/skills/hr-sqlite/references/evidence.md +94 -0
  92. package/skills/hr-sqlite/references/tool-decisions.md +39 -0
  93. package/skills/hr-sqlite/scripts/inspect-sqlite.py +245 -0
  94. package/skills/hr-stock-ui-audit/SKILL.md +1 -1
  95. package/skills/hr-test-audit/LICENSE +21 -0
  96. package/skills/hr-test-audit/NOTICE.md +67 -0
  97. package/skills/hr-usage-report/SKILL.md +90 -0
  98. package/skills/hr-usage-report/agents/openai.yaml +2 -0
  99. package/skills/hr-usage-report/assets/example-report.json +125 -0
  100. package/skills/hr-usage-report/assets/report-template.html +377 -0
  101. package/skills/hr-usage-report/scripts/render-report.ts +86 -0
  102. package/skills/hr-usage-report/scripts/usage-by-model.ts +499 -0
  103. package/skills/hr-what-next/SKILL.md +100 -10
  104. package/skills/hr-what-next/references/reporting.md +13 -22
  105. package/skills/hr-what-next/scripts/check-open-work.mjs +711 -0
  106. package/skills/hr-writing-pr/SKILL.md +29 -14
  107. package/skills/hr-writing-pr/scripts/benefit-chart.py +200 -0
  108. package/docs/npm-release.md +0 -45
  109. package/rules/modifiers/swarmail.md +0 -12
  110. package/skills/hr-benchmarking/references/priority-findings-20261006.md +0 -115
  111. package/skills/hr-change-impact/agents/openai.yaml +0 -5
@@ -0,0 +1,83 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
6
+
7
+ We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
8
+
9
+ ## Our Standards
10
+
11
+ Examples of behavior that contributes to a positive environment for our community include:
12
+
13
+ - Demonstrating empathy and kindness toward other people
14
+ - Being respectful of differing opinions, viewpoints, and experiences
15
+ - Giving and gracefully accepting constructive feedback
16
+ - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
17
+ - Focusing on what is best not just for us as individuals, but for the overall community
18
+
19
+ Examples of unacceptable behavior include:
20
+
21
+ - The use of sexualized language or imagery, and sexual attention or advances of any kind
22
+ - Trolling, insulting or derogatory comments, and personal or political attacks
23
+ - Public or private harassment
24
+ - Publishing others' private information, such as a physical or email address, without their explicit permission
25
+ - Other conduct which could reasonably be considered inappropriate in a professional setting
26
+
27
+ ## Enforcement Responsibilities
28
+
29
+ Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
30
+
31
+ Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
32
+
33
+ ## Scope
34
+
35
+ This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
36
+
37
+ ## Enforcement
38
+
39
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement through the repository's private reporting form: on the [Security tab](https://github.com/bompus/house-rules/security), choose **Report a vulnerability** and say the report is about conduct. Only the maintainer can read it. All complaints will be reviewed and investigated promptly and fairly.
40
+
41
+ All community leaders are obligated to respect the privacy and security of the reporter of any incident.
42
+
43
+ ## Enforcement Guidelines
44
+
45
+ Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
46
+
47
+ ### 1. Correction
48
+
49
+ **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
50
+
51
+ **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
52
+
53
+ ### 2. Warning
54
+
55
+ **Community Impact**: A violation through a single incident or series of actions.
56
+
57
+ **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
58
+
59
+ ### 3. Temporary Ban
60
+
61
+ **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
62
+
63
+ **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
64
+
65
+ ### 4. Permanent Ban
66
+
67
+ **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
68
+
69
+ **Consequence**: A permanent ban from any sort of public interaction within the community.
70
+
71
+ ## Attribution
72
+
73
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
74
+
75
+ Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
76
+
77
+ For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
78
+
79
+ [homepage]: https://www.contributor-covenant.org
80
+ [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
81
+ [Mozilla CoC]: https://github.com/mozilla/diversity
82
+ [FAQ]: https://www.contributor-covenant.org/faq
83
+ [translations]: https://www.contributor-covenant.org/translations
package/README.md CHANGED
@@ -16,7 +16,7 @@ Fresh installs select eight skills for setup, review, diagnosis, explanation,
16
16
  planning, tests, writing and remaining work. Modifiers start off. Add guidance
17
17
  when a task needs it, and let each repository supply its own safeguards.
18
18
 
19
- <p align="center"><img src="docs/assets/overview.png" alt="The four layers composed into one rules file: core, opt-in modifiers, your layer and each repository's AGENTS.md. The eval figures in this illustration come from an early internal run and are not a current result." width="100%"></p>
19
+ <p align="center"><img src="docs/assets/overview.png" alt="The four layers: core, opt-in modifiers and your own layer are composed into one rules file, and each repository's AGENTS.md adds to it. Beside them, what a fresh install selects: core rules on, modifiers off, eight skills." width="100%"></p>
20
20
 
21
21
  If you are an AI agent reading this for your user, the prompt under
22
22
  [Evaluate it with your agent](#evaluate-it-with-your-agent) is the evaluation
@@ -28,10 +28,10 @@ don't install or copy anything on your own.
28
28
  1. **Core** (`rules/core.md`): the base every setup gets. Its first section is
29
29
  the end-of-reply check, so an agent that reads only the top of the file
30
30
  still knows when to keep working and when to stop and ask.
31
- 2. **Modifiers** (`rules/modifiers/`): opt-in preferences, such as coded
31
+ 2. **Optional rules**, called modifiers in the files (`rules/modifiers/`): opt-in preferences, such as coded
32
32
  option lists or squash-only landing. Each one replaces a core section or
33
33
  adds a section after one.
34
- 3. **Your layer** (by default `~/.config/house-rules/`): `house-rules.json`
34
+ 3. **Your own rules**, called your layer in the files (by default `~/.config/house-rules/`): `house-rules.json`
35
35
  names the modifiers you enable, `rules/` holds your own sections, and
36
36
  `skills/` holds your own skills. A skill there replaces the house-rules
37
37
  skill of the same name. The config's other keys are optional: `layers`
@@ -95,8 +95,9 @@ Updates preserve your existing config. An explicit `skills.include` list keeps
95
95
  later shipped additions off until selected. Browse the full catalog only when
96
96
  you want more choices.
97
97
 
98
- On a later run it keeps the previous skills directory under a dated name
99
- instead of deleting it. It never edits an agent host's files. The comment at
98
+ On a later run, if the composed skills changed, it keeps the previous skills
99
+ directory under a dated name instead of deleting it; if they match, it says so
100
+ and keeps nothing extra. It never edits an agent host's files. The comment at
100
101
  the top of `install.sh` lists the environment variables that change its paths
101
102
  or runtime; `install.ps1` takes the same variables. Some skill scripts need Bun
102
103
  even when Node.js composes the rules.
@@ -105,14 +106,16 @@ Then connect the composed file to your agent. Claude Code reads
105
106
  `@~/.config/house-rules/rules.md` on its own line in `~/.claude/CLAUDE.md`;
106
107
  other hosts take a copy in their user-level rules file, with the
107
108
  `house-rules-references/` directory placed beside it. Written rules link to the
108
- procedures in that directory; stdout and configuration previews keep them
109
- inline. See [reference output](docs/configuration.md#reference-output). To change modifiers or
109
+ procedures in that directory, which hold detail; an agent may act without opening
110
+ one, so each guard stays written in the rules themselves. Stdout and configuration
111
+ previews keep the procedures inline. See [reference output](docs/configuration.md#reference-output). To change modifiers or
110
112
  skills, change to the checkout directory and run `node compose.mjs setup`,
111
113
  or `bun compose.mjs setup` when Node.js is unavailable. Review the numbered
112
- choices and use `save` to change only the configuration. Then run the
113
- installer again.
114
+ choices and use `save` to change only the configuration. Setup then prints the
115
+ command that applies the selection: the installer for a checkout, or
116
+ `house-rules --config` for the npm package.
114
117
  The [configuration CLI guide](docs/configuration.md) covers status, previews,
115
- question preferences and safe writes. The
118
+ question preferences, optional panel preferences and safe writes. The
116
119
  `hr-house-rules-setup` skill preserves selections, offers relevant additions and connects
117
120
  hosts, and asks before it touches a host file.
118
121
 
@@ -161,13 +164,6 @@ and reconcile existing notice files before replacing them. A full
161
164
  skill, keep its entire directory, including any `NOTICE.md` and `LICENSE`.
162
165
  Personal layers must also carry notices required by their own sources.
163
166
 
164
- The `hr-navigation-retro` skill finds navigation failures in selected tool-call
165
- transcripts, then proposes fixes verified against current source. Any agent with
166
- file and shell access can run it. Supported inputs include Claude Code, Codex,
167
- OpenCode exports, Cursor CLI streams and ACP v1 recordings from other agents.
168
- See its [input limits](skills/hr-navigation-retro/references/inputs.md).
169
- It is explicit-only, requires Python 3.11+ and keeps reports local.
170
-
171
167
  ## Upgrading skill names
172
168
 
173
169
  All shipped skill names use `hr-`. Before updating an older installation,
@@ -191,9 +187,6 @@ repository's AGENTS.md or equivalent). Tell me:
191
187
  2. Which ones duplicate or conflict with what I already have.
192
188
  3. Whether to adopt it whole (compose.mjs plus my own layer) or copy single
193
189
  sections into my existing rules. Taking individual ideas is fine.
194
- If I run several agent sessions on one machine at once, also look at
195
- Swarmail (https://github.com/bompus/swarmail); house-rules has an opt-in
196
- modifier for it.
197
190
  Read only: don't install, compose or edit anything until I choose. When I
198
191
  adopt a section or idea, record its source in distributed notices, such as
199
192
  "Adapted from house-rules (https://github.com/bompus/house-rules)". Keep required
@@ -221,41 +214,58 @@ Use pnpm for JavaScript projects unless the repository uses another manager.
221
214
 
222
215
  The operations are `replaces:`, `after:`, `before:` and `removes:`; a
223
216
  `removes:` file has no body. A file without frontmatter is added at the end.
224
- Frontmatter may also hold `description:` and `requires:` (a comma-separated
225
- list of skills the section relies on); any other key is an error. Files apply
217
+ Frontmatter may also hold `description:`, `requires:` (a comma-separated
218
+ list of skills the section relies on; the core rules and any modifier that relies
219
+ on skills declare them, and composing warns when one is not in the composed
220
+ set) and `reference:` (a procedure file the section links to; see
221
+ [reference output](docs/configuration.md#reference-output)); any other key is an error. Files apply
226
222
  in name order, after the modifiers.
227
223
 
228
224
  ## Modifiers
229
225
 
230
- | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Modifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | What it does |
231
- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
232
- | `coded-offers` | Offers use numbered questions and coded options (`1A`, `1B`) so one short reply answers every decision. |
233
- | `effort-estimates` | Options that differ in cost, or work that waits on CI, a build or a deploy, carry a wall-clock estimate based on comparable finished work. Estimates from workers, docs or other models are converted the same way or dropped. |
234
- | `land-when-done` | Authorized repository work is not finished until it is in the remote default branch. |
235
- | `low-quota-handoff` | When the current model's usage allowance runs low, write a handoff before work stops. |
236
- | `multi-agent` | Work is split across delegated workers and several agent hosts; worker reports, review standards and cleanup checks account for all of them. |
237
- | `no-attribution` | Commits, pull requests and comments carry no agent or tool credit lines. |
238
- | `plan-files` | Multi-step work keeps a visible task list mirrored to a plan file with a ledger of every item's outcome. |
239
- | `question-cards` | Opt in to question cards beside complete text offers when the host supports them; availability and presentation can vary by host, provider and model. |
240
- | `release-batching` | Batch approved, compatible changes for releases and audit factual claims before releases or public announcements. |
241
- | `scratch-on-disk` | Task scratch lives on disk under the user data directory, never in RAM-backed `/tmp`. |
242
- | `shared-host-load` | Coordinate shared local work within host-defined resource budgets; isolate measurements and release reservations during remote waits. |
243
- | `solo-operator` | For repositories with one maintainer, the user's direction is the review; no review-gated steps. |
244
- | `squash-landing` | Pull requests land by squash merge after review-bot findings are handled, and the session's checkout moves off the landed branch. |
245
- | `swarmail` | Locate Swarmail-owned instructions and tool contracts for local session coordination. |
246
-
247
- Questions use text by default, with plain options or `coded-offers`. Text-only
248
- setups do not call question-card tools merely because a host exposes them.
249
- Enable `question-cards` only when you want cards too. Cards can be unavailable,
250
- skipped or shown unexpectedly across hosts, providers and models; the text
251
- offer remains usable on its own. `hr-house-rules-setup` asks which format you
252
- want and explains these limits before changing the configuration.
226
+ | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Modifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | What it does |
227
+ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
228
+ | `backlog-outline` | A backlog report adds a Markdown outline of every open item grouped by what it waits on; nothing is rendered, so it reads the same on every host. |
229
+ | `backlog-visual` | A backlog report adds one dark panel of every open item grouped by what it waits on, with a table for waiting items and one row per decision; hosts without a render tool get the same outline in Markdown. |
230
+ | `coded-offers` | Offers use numbered questions and coded options (`1A`, `1B`) so one short reply answers every decision. |
231
+ | `cross-session-relay` | Relayed work between sessions keeps its source and authorized scope, and an authorized push that changes inherited guidance or tooling is announced to the affected sessions. |
232
+ | `effort-estimates` | Options that differ in cost, or work that waits on CI, a build or a deploy, carry a wall-clock estimate based on comparable finished work. Estimates from workers, docs or other models are converted the same way or dropped. |
233
+ | `land-when-done` | Authorized repository work is not finished until it is in the remote default branch. |
234
+ | `low-quota-handoff` | When the current model's usage allowance runs low, write a handoff before work stops. |
235
+ | `model-default-questions` | Leave how questions are asked to your host and model, with no text-only or question-card instruction. |
236
+ | `multi-agent` | Work is split across delegated workers and several agent hosts; worker reports, review standards and cleanup checks account for all of them. |
237
+ | `no-attribution` | Commits, pull requests and comments carry no agent or tool credit lines unless the target repository asks for a disclosure. |
238
+ | `periodic-updates` | 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. |
239
+ | `plan-files` | Multi-step work keeps a visible task list mirrored to a plan file with a ledger of every item's outcome. |
240
+ | `question-cards` | Opt in to question cards beside complete text offers when the host supports them; availability and presentation can vary by host, provider and model. |
241
+ | `release-batching` | Batch approved, compatible changes for releases and audit factual claims before releases or public announcements. |
242
+ | `scratch-on-disk` | Task scratch lives on disk under the user data directory, never in RAM-backed `/tmp`. |
243
+ | `shared-host-load` | On a shared machine, follow its resource budgets; without one, get operator direction before parallel workers or whole-repository commands, and use memory controls. |
244
+ | `solo-operator` | For repositories with one maintainer, the user's direction is the review; no review-gated steps. |
245
+ | `squash-landing` | Pull requests land by squash merge after review-bot findings are handled, and the session's checkout moves off the landed branch. |
246
+ | `upstream-contributions` | A measured optimization, fix or defect found in a third-party project is offered for submission to that project through its own contribution route. |
247
+ | `web-image-formats` | Prefer WebP for web raster images when it saves bytes at acceptable quality, with format exceptions and delivered-file checks. |
248
+
249
+ Questions use text only by default. Setup asks how you want questions asked:
250
+
251
+ - **Model default**: house-rules gives no instruction, so your model and host ask
252
+ their usual way (`model-default-questions`).
253
+ - **Text only**: plain text options, with or without short reply codes such as
254
+ `1A` (`coded-offers`). No question tools are called, even when the host
255
+ exposes them.
256
+ - **Clickable choices when available**: complete text options plus a
257
+ question card (`question-cards`). Cards can be unavailable, skipped or shown
258
+ unexpectedly across hosts, providers and models; the text offer remains usable
259
+ on its own.
260
+
261
+ `hr-house-rules-setup` asks which you want and explains these limits before
262
+ changing the configuration.
253
263
 
254
264
  ## Skills
255
265
 
256
266
  | Skill | Use it to |
257
267
  | --------------------------- | --------------------------------------------------------------------------------------------------------- |
258
- | `hr-agent-guidance-audit` | Audit a repository's agent guidance for stale, duplicated or conflicting rules. |
268
+ | `hr-agent-guidance-audit` | Audit agent guidance for stale or conflicting rules, and decide what to retire or merge. |
259
269
  | `hr-agent-guidance-refresh` | Re-read guidance that changed since the session started. |
260
270
  | `hr-api-exposure-check` | Keep API responses to the fields a consumer reads and the caller may see. |
261
271
  | `hr-audit-choices` | List and check the decisions made while implementing a task. |
@@ -265,50 +275,71 @@ want and explains these limits before changing the configuration.
265
275
  | `hr-better-layout` | Build and review grouping, alignment, spacing, responsive layout and clipping. |
266
276
  | `hr-better-typography` | Style and review type scales, wrapping, spacing, truncation and font loading. |
267
277
  | `hr-better-writing` | Write and review interface labels, errors, empty states and product terminology. |
268
- | `hr-change-impact` | Check what a change can break beyond its diff before merging. |
269
- | `hr-code-review` | Review a diff against the repository's standards and the originating request. |
270
- | `hr-design-exploration` | Compare four visual directions and refine the selected two toward one final design. |
278
+ | `hr-code-review` | Review a diff against standards and the request, and check what it can break beyond its lines. |
279
+ | `hr-design-exploration` | Compare visual directions, or variants of one component, and refine toward one design. |
271
280
  | `hr-diagnosing-bugs` | Work a hard bug or regression to a confirmed cause. |
272
281
  | `hr-explain-code` | Trace how existing code works, read-only, before changing it. |
273
282
  | `hr-extract-shared-steps` | Move operations repeated across workflows into shared functions. |
283
+ | `hr-forgotten-work-audit` | Audit past sessions, plans and handoffs for promised work that dropped off every list. |
274
284
  | `hr-handoff` | Write a handoff a fresh session can resume from. |
275
285
  | `hr-house-rules-setup` | Choose modifiers, create your layer and connect your hosts. |
276
286
  | `hr-issue-tracker-setup` | Configure project tracker, domain-term and ADR conventions; explicit-only. |
277
287
  | `hr-lean-plan` | Write or tighten an implementation plan with the fewest moving parts. |
278
- | `hr-maintainability-review` | Review a diff or entire codebase strictly for structure and maintainability. |
288
+ | `hr-maintainability-review` | Review a diff or entire codebase strictly for structure, over-engineering and leftover scaffolding. |
279
289
  | `hr-manual-qa` | Give reproducible human checks after reporting agent verification results. |
280
290
  | `hr-navigation-retro` | Audit navigation failures in selected transcripts and propose verified findability fixes; explicit-only. |
281
291
  | `hr-ordering-tests` | Enumerate event orderings through the real code to find race bugs. |
282
292
  | `hr-plain-prose` | Make text people read plain and specific. |
283
293
  | `hr-progress-report` | Report current task activity, milestone completion and remaining wall-clock time. |
284
- | `hr-pr-followup` | Address conflicts, feedback and failing checks for a requested PR; honor existing landing authority. |
294
+ | `hr-pr-followup` | Address conflicts, feedback and failing checks for a PR; honor landing authority; CodeRabbit review gate. |
285
295
  | `hr-read-reddit` | Read Reddit feed output while supported; RSS support ends November 13, 2026. Partial web-search fallback. |
286
296
  | `hr-read-x-links` | Read the full content of X posts. |
297
+ | `hr-research-shared-links` | Research a shared link or repository in depth, compare it with your setup and rate each idea. |
287
298
  | `hr-split-to-prs` | Divide work into coherent PRs while preserving recovery points and verifying each slice. |
299
+ | `hr-sqlite` | Check settings, locking, queries and copies in SQLite code against measured findings. |
288
300
  | `hr-stock-ui-audit` | Find and triage template-default styling in frontend code. |
289
301
  | `hr-tdd` | Implement requested test-first work through one red-green slice at a time; simplify during review. |
290
302
  | `hr-test-audit` | Decide which new tests are worth keeping and which old ones to prune. |
303
+ | `hr-usage-report` | Measure where agent usage went by provider, model and role, and chart model comparisons. |
291
304
  | `hr-what-next` | Reconcile remaining session work and recommend priorities when asked what comes next. |
292
305
  | `hr-writing-for-agents` | Write skills, rules and other documents agents read. |
293
306
  | `hr-writing-pr` | Write a pull request title and body from the final diff. |
294
307
 
308
+ The `hr-navigation-retro` skill finds navigation failures in selected tool-call
309
+ transcripts, then proposes fixes verified against current source. Any agent with
310
+ file and shell access can run it. Supported inputs include Claude Code, Codex,
311
+ OpenCode exports, Cursor CLI streams and ACP v1 recordings from other agents.
312
+ See its [input limits](skills/hr-navigation-retro/references/inputs.md).
313
+ It is explicit-only, requires Python 3.11+ and keeps reports local.
314
+
295
315
  ## Checking the rules against your models
296
316
 
297
- `evals/end-of-reply/` runs short scenarios through any model CLI and grades
317
+ `evals/end-of-reply/` (in the GitHub repository, not the npm package) runs short scenarios through any model CLI. It grades
298
318
  whether the agent keeps working or ends with an offer at the right time,
299
- including when it reads only the first 80 lines. In a 2026-10-04 run of the
300
- three original scenarios against v0.5.7 on seven models, the rules passed 62 of
301
- 63 replies, against 26 for a one-sentence instruction and 21 with no rules; its
302
- README has the breakdown and limits.
319
+ including when it reads only the first 80 lines. A 2026-10-11 replay covered
320
+ its 18 scenarios, two runs each, on Claude Code 2.1.296 only, at revision
321
+ `efd4d7b`; `rules/core.md` has changed since. The rules scored
322
+ 22 of 36 replies with Opus 5.5 and 27 of 36 with Sonnet 5.5. A one-sentence
323
+ instruction scored 18 and 16, and no rules scored 17 and 16. The gains cluster
324
+ in follow-ups, parked findings, stacked offers and spin-offs, where the
325
+ controls scored 0. Two runs per scenario is a small sample, so read the counts,
326
+ not a percentage. No other agent was measured. The eval's README has the
327
+ breakdown and limits.
303
328
 
304
329
  ## Development
305
330
 
306
331
  ```bash
307
- node --test test/*.test.mjs # composer and eval grader (or: bun test test/)
308
- bun test skills/ # skill scripts
309
- npx oxlint . && npx oxfmt --check .
332
+ node --test test/*.test.mjs # composer and eval grader
333
+ bun test test/ # the same under Bun
334
+ bun test skills/ # skill scripts
335
+ npm run check:package -- --bun # npm tarball: packs, installs, runs the CLI
336
+ npx --yes oxlint@1.85.0 . && npx --yes oxfmt@0.70.0 --check .
310
337
  ```
311
338
 
339
+ These versions match the pins in `.github/workflows/check.yml`; an unpinned `npx`
340
+ fetches the latest release, whose formatting can differ from CI's. Change both
341
+ together.
342
+
312
343
  Oxfmt checks authored Markdown, HTML, JSON, JSONC, YAML, TOML and CSS as well
313
344
  as JavaScript and TypeScript. Test fixtures stay excluded because scanner
314
345
  tests depend on their exact text and line numbers. Package fields and
@@ -319,7 +350,7 @@ Set `HOUSE_RULES_TEST_TMP` to an existing directory to choose their scratch root
319
350
  otherwise they use the operating system temporary directory. Choose a disk-backed
320
351
  location when the system temporary directory is RAM-backed.
321
352
 
322
- CI runs the same checks on every push and pull request. See
353
+ CI runs these checks on every pull request and on pushes to `main`, and also runs the tests and the tarball check on Windows. See
323
354
  [CONTRIBUTING.md](CONTRIBUTING.md) before opening one.
324
355
 
325
356
  The local-reference gate runs in `test/guidance-links.test.mjs`. Audit another
package/compose.mjs CHANGED
@@ -51,7 +51,13 @@ function main(argv) {
51
51
  return;
52
52
  }
53
53
  const configPath = configurationPath(values.config);
54
- const config = JSON.parse(readFileSync(configPath, "utf8").replace(/^\uFEFF/, ""));
54
+ let config;
55
+ try {
56
+ config = JSON.parse(readFileSync(configPath, "utf8").replace(/^\uFEFF/, ""));
57
+ } catch (error) {
58
+ if (!(error instanceof SyntaxError)) throw error;
59
+ throw new Error(`${configPath} is not valid JSON (${error.message}); fix it or move it aside`);
60
+ }
55
61
  const { out, "skills-out": skillsOut, "references-out": explicitReferences } = values;
56
62
  if (explicitReferences && !out) throw new Error("--references-out requires --out");
57
63
  const referencesOut = out
@@ -102,7 +108,7 @@ function main(argv) {
102
108
  for (const f of NOTICES) cpSync(join(BASE, f), join(skillsOut, f));
103
109
  }
104
110
  console.error(
105
- `composed ${fragments.length} fragment(s), ${rules.split("\n").length} lines${skillsOut ? `, ${skills.size} skill(s)` : ""}`,
111
+ `composed ${rules.split("\n").length} lines of rules from ${fragments.length} optional or personal rule file(s)${skillsOut ? ` and ${skills.size} skill(s)` : ""}`,
106
112
  );
107
113
  }
108
114
 
package/composition.mjs CHANGED
@@ -14,6 +14,10 @@ const KEYS = [...OPS, "description", "requires", "reference"];
14
14
  // Windows line endings and a byte-order mark would otherwise hide frontmatter and headings.
15
15
  const normalize = (text) => text.replace(/^\uFEFF/, "").replace(/\r\n?/g, "\n");
16
16
 
17
+ // A YAML value may be wrapped in one pair of matching quotes; the text inside is the value.
18
+ const unquote = (value) =>
19
+ value.length > 1 && /^(["']).*\1$/.test(value) ? value.slice(1, -1) : value;
20
+
17
21
  // Minimal frontmatter: `key: value` lines between `---` fences.
18
22
  export function parseFragment(rawText, source) {
19
23
  const text = normalize(rawText);
@@ -22,7 +26,7 @@ export function parseFragment(rawText, source) {
22
26
  if (m) {
23
27
  for (const line of m[1].split("\n")) {
24
28
  const i = line.indexOf(":");
25
- if (i > 0) meta[line.slice(0, i).trim()] = line.slice(i + 1).trim();
29
+ if (i > 0) meta[line.slice(0, i).trim()] = unquote(line.slice(i + 1).trim());
26
30
  }
27
31
  }
28
32
  return { meta, body: (m ? text.slice(m[0].length) : text).trim(), source };
@@ -182,7 +186,10 @@ const layersOf = (config) => config.layers ?? ["."];
182
186
  function loadRawFragments(config, configDir) {
183
187
  const fragments = (config.modifiers ?? []).map((name) => {
184
188
  const path = join(BASE, "rules/modifiers", `${name}.md`);
185
- if (!existsSync(path)) throw new Error(`unknown modifier "${name}" (see --list)`);
189
+ if (!existsSync(path))
190
+ throw new Error(
191
+ `unknown modifier "${name}"; remove it from "modifiers" in the configuration file ("node compose.mjs --list" in the checkout, or "house-rules --list", shows the available names)`,
192
+ );
186
193
  return { ...parseFragment(readFileSync(path, "utf8"), `modifier ${name}`), path, root: BASE };
187
194
  });
188
195
  for (const layer of layersOf(config)) {
@@ -340,7 +347,8 @@ export function composeConfiguration(config, configDir, { referencesDirectory }
340
347
  const references = new Map([...candidates].map(([name, value]) => [name, value.text]));
341
348
  const skills = skillSources(config, configDir);
342
349
  const warnings = [];
343
- for (const f of fragments) {
350
+ const core = parseFragment(readFileSync(join(BASE, "rules/core.md"), "utf8"), "rules/core.md");
351
+ for (const f of [core, ...fragments]) {
344
352
  for (const need of (f.meta.requires ?? "")
345
353
  .split(",")
346
354
  .map((s) => s.trim())
package/config-view.mjs CHANGED
@@ -74,13 +74,16 @@ export function renderHelp() {
74
74
  " Selection",
75
75
  " --enable-modifier <name> --disable-modifier <name>",
76
76
  " --enable-skill <name> --disable-skill <name>",
77
- " --questions plain|coded|cards",
77
+ " --questions default|plain|coded|cards",
78
+ " --panel-file <json> Replace portable panel preferences (preview/set)",
79
+ " --expect-panel <revision> Require reviewed panel input when applying",
78
80
  "",
79
81
  " Output",
80
82
  " --config <path> --json --rules (preview only)",
81
83
  "",
82
84
  " Repeat toggle flags to change several selections together.",
83
85
  " Saving config does not regenerate output or connect agent hosts.",
86
+ " Panel preferences do not discover providers, enable a skill or run models.",
84
87
  "",
85
88
  ].join("\n");
86
89
  }
@@ -124,12 +127,24 @@ export function renderConfig(report) {
124
127
  }
125
128
  if (!removed.length && !added.length) detail("Selection order changed.");
126
129
  }
130
+ if (report.panel) {
131
+ section(report.panel.changed ? "Panel section replacement" : "Panel section unchanged");
132
+ detail(`Panel input revision ${report.panel.revision}`);
133
+ detail("Before");
134
+ for (const line of JSON.stringify(report.panel.before, null, 2).split("\n")) detail(line);
135
+ detail("After");
136
+ for (const line of JSON.stringify(report.panel.after, null, 2).split("\n")) detail(line);
137
+ detail(
138
+ `Preferences ${report.applied ? "configured" : "proposed"} only. Route access, effort and permissions are unverified.`,
139
+ );
140
+ }
127
141
  lines.push("");
128
142
  if (!report.applied) {
143
+ const panelGuard = report.panel ? ` --expect-panel ${report.panel.revision}` : "";
129
144
  detail(
130
145
  report.command === "set"
131
- ? `To save, repeat with --apply --expect ${report.revision}`
132
- : `To save, run config set with the same selection flags plus --apply --expect ${report.revision}`,
146
+ ? `To save, repeat with --apply --expect ${report.revision}${panelGuard}`
147
+ : `To save, run config set with the same selection flags plus --apply --expect ${report.revision}${panelGuard}`,
133
148
  );
134
149
  detail("Review personal rule overrides below before choosing a question format.");
135
150
  } else