@bompus/house-rules 0.11.0 → 0.14.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.
- package/CODE_OF_CONDUCT.md +83 -0
- package/README.md +102 -63
- package/compose.mjs +8 -2
- package/composition.mjs +11 -3
- package/config-view.mjs +18 -3
- package/config.mjs +74 -13
- package/docs/assets/overview.png +0 -0
- package/docs/configuration.md +85 -9
- package/package.json +4 -2
- package/rules/core.md +118 -209
- package/rules/modifiers/backlog-outline.md +25 -0
- package/rules/modifiers/backlog-visual.md +16 -0
- package/rules/modifiers/coded-offers.md +47 -17
- package/rules/modifiers/cross-session-relay.md +23 -0
- package/rules/modifiers/low-quota-handoff.md +4 -3
- package/rules/modifiers/model-default-questions.md +33 -0
- package/rules/modifiers/multi-agent.md +6 -2
- package/rules/modifiers/no-attribution.md +7 -1
- package/rules/modifiers/periodic-updates.md +25 -0
- package/rules/modifiers/plan-files.md +35 -3
- package/rules/modifiers/release-batching.md +4 -2
- package/rules/modifiers/shared-host-load.md +13 -42
- package/rules/modifiers/squash-landing.md +1 -1
- package/rules/modifiers/upstream-contributions.md +45 -0
- package/rules/modifiers/web-image-formats.md +35 -0
- package/rules/references/backlog-view.md +154 -0
- package/rules/references/landing.md +14 -14
- package/rules/references/multi-agent.md +6 -2
- package/rules/references/release-batching.md +37 -4
- package/rules/references/squash-landing.md +10 -4
- package/rules/references/thread-visuals.md +45 -0
- package/setup.mjs +87 -17
- package/skills/hr-agent-guidance-audit/SKILL.md +10 -5
- package/skills/hr-agent-guidance-audit/references/prune-workflow.md +72 -0
- package/skills/hr-agent-guidance-audit/references/records-and-lessons.md +1 -1
- package/skills/hr-agent-guidance-audit/references/retirement-verdicts.md +49 -0
- package/skills/hr-agent-guidance-refresh/SKILL.md +25 -57
- package/skills/hr-agent-guidance-refresh/references/verification.md +1 -1
- package/skills/hr-audit-choices/SKILL.md +1 -1
- package/skills/hr-benchmarking/SKILL.md +122 -159
- package/skills/hr-benchmarking/references/javascript.md +113 -0
- package/skills/hr-benchmarking/references/tools.md +62 -57
- package/skills/hr-better-accessibility/SKILL.md +1 -1
- package/skills/hr-better-accessibility/screen-readers.md +1 -0
- package/skills/hr-code-review/SKILL.md +19 -3
- package/skills/hr-code-review/agents/openai.yaml +1 -1
- package/skills/hr-code-review/references/acp-client.md +43 -0
- package/skills/{hr-change-impact/SKILL.md → hr-code-review/references/impact.md} +2 -12
- package/skills/hr-code-review/references/panel-adjudication.md +58 -0
- package/skills/hr-code-review/references/panel-plan.md +61 -0
- package/skills/hr-code-review/references/panel-recommendations.json +105 -0
- package/skills/hr-code-review/references/panel-recommendations.md +46 -0
- package/skills/hr-code-review/references/panel-setup.md +54 -0
- package/skills/hr-code-review/references/reviewer-role.md +31 -0
- package/skills/hr-code-review/scripts/acp-panel-client.mjs +299 -0
- package/skills/hr-code-review/scripts/check-receipts.mjs +263 -0
- package/skills/hr-code-review/scripts/panel-plan.mjs +69 -0
- package/skills/hr-code-review/scripts/panel-preferences.mjs +220 -0
- package/skills/hr-design-exploration/SKILL.md +24 -1
- package/skills/hr-design-exploration/agents/openai.yaml +2 -2
- package/skills/hr-diagnosing-bugs/SKILL.md +2 -2
- package/skills/hr-diagnosing-bugs/references/reporting.md +29 -4
- package/skills/hr-diagnosing-bugs/scripts/check-pr-offer.mjs +47 -0
- package/skills/hr-explain-code/SKILL.md +1 -1
- package/skills/hr-extract-shared-steps/SKILL.md +1 -1
- package/skills/hr-forgotten-work-audit/SKILL.md +130 -0
- package/skills/hr-forgotten-work-audit/references/brief-template.md +56 -0
- package/skills/hr-forgotten-work-audit/references/result-format.md +46 -0
- package/skills/hr-handoff/LICENSE +21 -0
- package/skills/hr-handoff/NOTICE.md +29 -0
- package/skills/hr-handoff/SKILL.md +24 -1
- package/skills/hr-handoff/references/reconciliation.md +25 -6
- package/skills/hr-handoff/references/successor-thread.md +76 -0
- package/skills/hr-handoff/scripts/check-reconciliation.mjs +48 -6
- package/skills/hr-house-rules-setup/SKILL.md +22 -8
- package/skills/hr-lean-plan/SKILL.md +4 -0
- package/skills/hr-maintainability-review/SKILL.md +14 -4
- package/skills/hr-maintainability-review/agents/openai.yaml +1 -1
- package/skills/hr-manual-qa/SKILL.md +1 -1
- package/skills/hr-ordering-tests/SKILL.md +1 -1
- package/skills/hr-plain-prose/SKILL.md +7 -4
- package/skills/hr-pr-followup/SKILL.md +6 -3
- package/skills/hr-pr-followup/references/review-helpers.md +40 -7
- package/skills/hr-pr-followup/scripts/check-landing.py +204 -0
- package/skills/hr-pr-followup/scripts/check-pr-review.ts +19 -8
- package/skills/hr-pr-followup/scripts/merge-pr.sh +100 -0
- package/skills/hr-pr-followup/scripts/verify-landed.sh +184 -0
- package/skills/hr-read-reddit/SKILL.md +1 -1
- package/skills/hr-research-shared-links/SKILL.md +103 -0
- package/skills/hr-sqlite/SKILL.md +174 -0
- package/skills/hr-sqlite/agents/openai.yaml +2 -0
- package/skills/hr-sqlite/references/evidence.md +94 -0
- package/skills/hr-sqlite/references/tool-decisions.md +39 -0
- package/skills/hr-sqlite/scripts/inspect-sqlite.py +245 -0
- package/skills/hr-stock-ui-audit/SKILL.md +1 -1
- package/skills/hr-test-audit/LICENSE +21 -0
- package/skills/hr-test-audit/NOTICE.md +67 -0
- package/skills/hr-usage-report/SKILL.md +90 -0
- package/skills/hr-usage-report/agents/openai.yaml +2 -0
- package/skills/hr-usage-report/assets/example-report.json +125 -0
- package/skills/hr-usage-report/assets/report-template.html +377 -0
- package/skills/hr-usage-report/scripts/render-report.ts +86 -0
- package/skills/hr-usage-report/scripts/usage-by-model.ts +499 -0
- package/skills/hr-what-next/SKILL.md +100 -10
- package/skills/hr-what-next/references/reporting.md +13 -22
- package/skills/hr-what-next/scripts/check-open-work.mjs +711 -0
- package/skills/hr-writing-pr/SKILL.md +29 -14
- package/skills/hr-writing-pr/scripts/benefit-chart.py +200 -0
- package/docs/npm-release.md +0 -45
- package/rules/modifiers/swarmail.md +0 -12
- package/skills/hr-benchmarking/references/priority-findings-20261006.md +0 -115
- 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
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
<h1 align="center">
|
|
2
2
|
<picture>
|
|
3
3
|
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/banner-dark.png">
|
|
4
|
-
<img src="docs/assets/banner-light.png" alt="house-rules" width="100%">
|
|
4
|
+
<img src="docs/assets/banner-light.png" alt="house-rules: Working rules and skills for AI coding agents" width="100%">
|
|
5
5
|
</picture>
|
|
6
6
|
</h1>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
9
|
<a href="https://github.com/bompus/house-rules/actions/workflows/check.yml"><img src="https://github.com/bompus/house-rules/actions/workflows/check.yml/badge.svg" alt="CI status"></a>
|
|
10
|
-
<a href="https://github.com/bompus/house-rules/releases/latest"><img src="https://
|
|
11
|
-
<a href="
|
|
10
|
+
<a href="https://github.com/bompus/house-rules/releases/latest"><img src="https://badgen.net/github/release/bompus/house-rules" alt="Latest GitHub release"></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/@bompus/house-rules"><img src="https://badgen.net/npm/v/@bompus/house-rules" alt="Latest npm version"></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://badgen.net/badge/license/MIT/blue" alt="MIT license"></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="rules/core.md">Core rules</a> ·
|
|
17
|
+
<a href="#modifiers">Opt-in modifiers</a> ·
|
|
18
|
+
<a href="#writing-your-own-sections">Your own layer</a> ·
|
|
19
|
+
<a href="examples/project/AGENTS.md">Each repo's AGENTS.md</a>
|
|
12
20
|
</p>
|
|
13
21
|
|
|
14
22
|
A practical starting point for ordinary development with AI coding agents.
|
|
@@ -16,7 +24,7 @@ Fresh installs select eight skills for setup, review, diagnosis, explanation,
|
|
|
16
24
|
planning, tests, writing and remaining work. Modifiers start off. Add guidance
|
|
17
25
|
when a task needs it, and let each repository supply its own safeguards.
|
|
18
26
|
|
|
19
|
-
<p align="center"><img src="docs/assets/overview.png" alt="The four layers
|
|
27
|
+
<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
28
|
|
|
21
29
|
If you are an AI agent reading this for your user, the prompt under
|
|
22
30
|
[Evaluate it with your agent](#evaluate-it-with-your-agent) is the evaluation
|
|
@@ -28,10 +36,10 @@ don't install or copy anything on your own.
|
|
|
28
36
|
1. **Core** (`rules/core.md`): the base every setup gets. Its first section is
|
|
29
37
|
the end-of-reply check, so an agent that reads only the top of the file
|
|
30
38
|
still knows when to keep working and when to stop and ask.
|
|
31
|
-
2. **
|
|
39
|
+
2. **Optional rules**, called modifiers in the files (`rules/modifiers/`): opt-in preferences, such as coded
|
|
32
40
|
option lists or squash-only landing. Each one replaces a core section or
|
|
33
41
|
adds a section after one.
|
|
34
|
-
3. **Your layer
|
|
42
|
+
3. **Your own rules**, called your layer in the files (by default `~/.config/house-rules/`): `house-rules.json`
|
|
35
43
|
names the modifiers you enable, `rules/` holds your own sections, and
|
|
36
44
|
`skills/` holds your own skills. A skill there replaces the house-rules
|
|
37
45
|
skill of the same name. The config's other keys are optional: `layers`
|
|
@@ -95,8 +103,9 @@ Updates preserve your existing config. An explicit `skills.include` list keeps
|
|
|
95
103
|
later shipped additions off until selected. Browse the full catalog only when
|
|
96
104
|
you want more choices.
|
|
97
105
|
|
|
98
|
-
On a later run
|
|
99
|
-
instead of deleting it
|
|
106
|
+
On a later run, if the composed skills changed, it keeps the previous skills
|
|
107
|
+
directory under a dated name instead of deleting it; if they match, it says so
|
|
108
|
+
and keeps nothing extra. It never edits an agent host's files. The comment at
|
|
100
109
|
the top of `install.sh` lists the environment variables that change its paths
|
|
101
110
|
or runtime; `install.ps1` takes the same variables. Some skill scripts need Bun
|
|
102
111
|
even when Node.js composes the rules.
|
|
@@ -105,14 +114,16 @@ Then connect the composed file to your agent. Claude Code reads
|
|
|
105
114
|
`@~/.config/house-rules/rules.md` on its own line in `~/.claude/CLAUDE.md`;
|
|
106
115
|
other hosts take a copy in their user-level rules file, with the
|
|
107
116
|
`house-rules-references/` directory placed beside it. Written rules link to the
|
|
108
|
-
procedures in that directory;
|
|
109
|
-
|
|
117
|
+
procedures in that directory, which hold detail; an agent may act without opening
|
|
118
|
+
one, so each guard stays written in the rules themselves. Stdout and configuration
|
|
119
|
+
previews keep the procedures inline. See [reference output](docs/configuration.md#reference-output). To change modifiers or
|
|
110
120
|
skills, change to the checkout directory and run `node compose.mjs setup`,
|
|
111
121
|
or `bun compose.mjs setup` when Node.js is unavailable. Review the numbered
|
|
112
|
-
choices and use `save` to change only the configuration.
|
|
113
|
-
installer
|
|
122
|
+
choices and use `save` to change only the configuration. Setup then prints the
|
|
123
|
+
command that applies the selection: the installer for a checkout, or
|
|
124
|
+
`house-rules --config` for the npm package.
|
|
114
125
|
The [configuration CLI guide](docs/configuration.md) covers status, previews,
|
|
115
|
-
question preferences and safe writes. The
|
|
126
|
+
question preferences, optional panel preferences and safe writes. The
|
|
116
127
|
`hr-house-rules-setup` skill preserves selections, offers relevant additions and connects
|
|
117
128
|
hosts, and asks before it touches a host file.
|
|
118
129
|
|
|
@@ -161,13 +172,6 @@ and reconcile existing notice files before replacing them. A full
|
|
|
161
172
|
skill, keep its entire directory, including any `NOTICE.md` and `LICENSE`.
|
|
162
173
|
Personal layers must also carry notices required by their own sources.
|
|
163
174
|
|
|
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
175
|
## Upgrading skill names
|
|
172
176
|
|
|
173
177
|
All shipped skill names use `hr-`. Before updating an older installation,
|
|
@@ -191,9 +195,6 @@ repository's AGENTS.md or equivalent). Tell me:
|
|
|
191
195
|
2. Which ones duplicate or conflict with what I already have.
|
|
192
196
|
3. Whether to adopt it whole (compose.mjs plus my own layer) or copy single
|
|
193
197
|
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
198
|
Read only: don't install, compose or edit anything until I choose. When I
|
|
198
199
|
adopt a section or idea, record its source in distributed notices, such as
|
|
199
200
|
"Adapted from house-rules (https://github.com/bompus/house-rules)". Keep required
|
|
@@ -221,41 +222,58 @@ Use pnpm for JavaScript projects unless the repository uses another manager.
|
|
|
221
222
|
|
|
222
223
|
The operations are `replaces:`, `after:`, `before:` and `removes:`; a
|
|
223
224
|
`removes:` file has no body. A file without frontmatter is added at the end.
|
|
224
|
-
Frontmatter may also hold `description
|
|
225
|
-
list of skills the section relies on
|
|
225
|
+
Frontmatter may also hold `description:`, `requires:` (a comma-separated
|
|
226
|
+
list of skills the section relies on; the core rules and any modifier that relies
|
|
227
|
+
on skills declare them, and composing warns when one is not in the composed
|
|
228
|
+
set) and `reference:` (a procedure file the section links to; see
|
|
229
|
+
[reference output](docs/configuration.md#reference-output)); any other key is an error. Files apply
|
|
226
230
|
in name order, after the modifiers.
|
|
227
231
|
|
|
228
232
|
## Modifiers
|
|
229
233
|
|
|
230
|
-
| Modifier | What it does
|
|
231
|
-
| -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
232
|
-
| `
|
|
233
|
-
| `
|
|
234
|
-
| `
|
|
235
|
-
| `
|
|
236
|
-
| `
|
|
237
|
-
| `
|
|
238
|
-
| `
|
|
239
|
-
| `
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
| `
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
234
|
+
| Modifier | What it does |
|
|
235
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
236
|
+
| `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. |
|
|
237
|
+
| `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. |
|
|
238
|
+
| `coded-offers` | Offers use numbered questions and coded options (`1A`, `1B`) so one short reply answers every decision. |
|
|
239
|
+
| `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. |
|
|
240
|
+
| `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. |
|
|
241
|
+
| `land-when-done` | Authorized repository work is not finished until it is in the remote default branch. |
|
|
242
|
+
| `low-quota-handoff` | When the current model's usage allowance runs low, write a handoff before work stops. |
|
|
243
|
+
| `model-default-questions` | Leave how questions are asked to your host and model, with no text-only or question-card instruction. |
|
|
244
|
+
| `multi-agent` | Work is split across delegated workers and several agent hosts; worker reports, review standards and cleanup checks account for all of them. |
|
|
245
|
+
| `no-attribution` | Commits, pull requests and comments carry no agent or tool credit lines unless the target repository asks for a disclosure. |
|
|
246
|
+
| `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. |
|
|
247
|
+
| `plan-files` | Multi-step work keeps a visible task list mirrored to a plan file with a ledger of every item's outcome. |
|
|
248
|
+
| `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. |
|
|
249
|
+
| `release-batching` | Batch approved, compatible changes for releases and audit factual claims before releases or public announcements. |
|
|
250
|
+
| `scratch-on-disk` | Task scratch lives on disk under the user data directory, never in RAM-backed `/tmp`. |
|
|
251
|
+
| `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. |
|
|
252
|
+
| `solo-operator` | For repositories with one maintainer, the user's direction is the review; no review-gated steps. |
|
|
253
|
+
| `squash-landing` | Pull requests land by squash merge after review-bot findings are handled, and the session's checkout moves off the landed branch. |
|
|
254
|
+
| `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. |
|
|
255
|
+
| `web-image-formats` | Prefer WebP for web raster images when it saves bytes at acceptable quality, with format exceptions and delivered-file checks. |
|
|
256
|
+
|
|
257
|
+
Questions use text only by default. Setup asks how you want questions asked:
|
|
258
|
+
|
|
259
|
+
- **Model default**: house-rules gives no instruction, so your model and host ask
|
|
260
|
+
their usual way (`model-default-questions`).
|
|
261
|
+
- **Text only**: plain text options, with or without short reply codes such as
|
|
262
|
+
`1A` (`coded-offers`). No question tools are called, even when the host
|
|
263
|
+
exposes them.
|
|
264
|
+
- **Clickable choices when available**: complete text options plus a
|
|
265
|
+
question card (`question-cards`). Cards can be unavailable, skipped or shown
|
|
266
|
+
unexpectedly across hosts, providers and models; the text offer remains usable
|
|
267
|
+
on its own.
|
|
268
|
+
|
|
269
|
+
`hr-house-rules-setup` asks which you want and explains these limits before
|
|
270
|
+
changing the configuration.
|
|
253
271
|
|
|
254
272
|
## Skills
|
|
255
273
|
|
|
256
274
|
| Skill | Use it to |
|
|
257
275
|
| --------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
258
|
-
| `hr-agent-guidance-audit` | Audit
|
|
276
|
+
| `hr-agent-guidance-audit` | Audit agent guidance for stale or conflicting rules, and decide what to retire or merge. |
|
|
259
277
|
| `hr-agent-guidance-refresh` | Re-read guidance that changed since the session started. |
|
|
260
278
|
| `hr-api-exposure-check` | Keep API responses to the fields a consumer reads and the caller may see. |
|
|
261
279
|
| `hr-audit-choices` | List and check the decisions made while implementing a task. |
|
|
@@ -265,50 +283,71 @@ want and explains these limits before changing the configuration.
|
|
|
265
283
|
| `hr-better-layout` | Build and review grouping, alignment, spacing, responsive layout and clipping. |
|
|
266
284
|
| `hr-better-typography` | Style and review type scales, wrapping, spacing, truncation and font loading. |
|
|
267
285
|
| `hr-better-writing` | Write and review interface labels, errors, empty states and product terminology. |
|
|
268
|
-
| `hr-
|
|
269
|
-
| `hr-
|
|
270
|
-
| `hr-design-exploration` | Compare four visual directions and refine the selected two toward one final design. |
|
|
286
|
+
| `hr-code-review` | Review a diff against standards and the request, and check what it can break beyond its lines. |
|
|
287
|
+
| `hr-design-exploration` | Compare visual directions, or variants of one component, and refine toward one design. |
|
|
271
288
|
| `hr-diagnosing-bugs` | Work a hard bug or regression to a confirmed cause. |
|
|
272
289
|
| `hr-explain-code` | Trace how existing code works, read-only, before changing it. |
|
|
273
290
|
| `hr-extract-shared-steps` | Move operations repeated across workflows into shared functions. |
|
|
291
|
+
| `hr-forgotten-work-audit` | Audit past sessions, plans and handoffs for promised work that dropped off every list. |
|
|
274
292
|
| `hr-handoff` | Write a handoff a fresh session can resume from. |
|
|
275
293
|
| `hr-house-rules-setup` | Choose modifiers, create your layer and connect your hosts. |
|
|
276
294
|
| `hr-issue-tracker-setup` | Configure project tracker, domain-term and ADR conventions; explicit-only. |
|
|
277
295
|
| `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
|
|
296
|
+
| `hr-maintainability-review` | Review a diff or entire codebase strictly for structure, over-engineering and leftover scaffolding. |
|
|
279
297
|
| `hr-manual-qa` | Give reproducible human checks after reporting agent verification results. |
|
|
280
298
|
| `hr-navigation-retro` | Audit navigation failures in selected transcripts and propose verified findability fixes; explicit-only. |
|
|
281
299
|
| `hr-ordering-tests` | Enumerate event orderings through the real code to find race bugs. |
|
|
282
300
|
| `hr-plain-prose` | Make text people read plain and specific. |
|
|
283
301
|
| `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
|
|
302
|
+
| `hr-pr-followup` | Address conflicts, feedback and failing checks for a PR; landing authority; CodeRabbit and cubic gate. |
|
|
285
303
|
| `hr-read-reddit` | Read Reddit feed output while supported; RSS support ends November 13, 2026. Partial web-search fallback. |
|
|
286
304
|
| `hr-read-x-links` | Read the full content of X posts. |
|
|
305
|
+
| `hr-research-shared-links` | Research a shared link or repository in depth, compare it with your setup and rate each idea. |
|
|
287
306
|
| `hr-split-to-prs` | Divide work into coherent PRs while preserving recovery points and verifying each slice. |
|
|
307
|
+
| `hr-sqlite` | Check settings, locking, queries and copies in SQLite code against measured findings. |
|
|
288
308
|
| `hr-stock-ui-audit` | Find and triage template-default styling in frontend code. |
|
|
289
309
|
| `hr-tdd` | Implement requested test-first work through one red-green slice at a time; simplify during review. |
|
|
290
310
|
| `hr-test-audit` | Decide which new tests are worth keeping and which old ones to prune. |
|
|
311
|
+
| `hr-usage-report` | Measure where agent usage went by provider, model and role, and chart model comparisons. |
|
|
291
312
|
| `hr-what-next` | Reconcile remaining session work and recommend priorities when asked what comes next. |
|
|
292
313
|
| `hr-writing-for-agents` | Write skills, rules and other documents agents read. |
|
|
293
314
|
| `hr-writing-pr` | Write a pull request title and body from the final diff. |
|
|
294
315
|
|
|
316
|
+
The `hr-navigation-retro` skill finds navigation failures in selected tool-call
|
|
317
|
+
transcripts, then proposes fixes verified against current source. Any agent with
|
|
318
|
+
file and shell access can run it. Supported inputs include Claude Code, Codex,
|
|
319
|
+
OpenCode exports, Cursor CLI streams and ACP v1 recordings from other agents.
|
|
320
|
+
See its [input limits](skills/hr-navigation-retro/references/inputs.md).
|
|
321
|
+
It is explicit-only, requires Python 3.11+ and keeps reports local.
|
|
322
|
+
|
|
295
323
|
## Checking the rules against your models
|
|
296
324
|
|
|
297
|
-
`evals/end-of-reply/` runs short scenarios through any model CLI
|
|
325
|
+
`evals/end-of-reply/` (in the GitHub repository, not the npm package) runs short scenarios through any model CLI. It grades
|
|
298
326
|
whether the agent keeps working or ends with an offer at the right time,
|
|
299
|
-
including when it reads only the first 80 lines.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
327
|
+
including when it reads only the first 80 lines. A 2026-10-11 replay covered
|
|
328
|
+
its 18 scenarios, two runs each, on Claude Code 2.1.296 only, at revision
|
|
329
|
+
`efd4d7b`; `rules/core.md` has changed since. The rules scored
|
|
330
|
+
22 of 36 replies with Opus 5.5 and 27 of 36 with Sonnet 5.5. A one-sentence
|
|
331
|
+
instruction scored 18 and 16, and no rules scored 17 and 16. The gains cluster
|
|
332
|
+
in follow-ups, parked findings, stacked offers and spin-offs, where the
|
|
333
|
+
controls scored 0. Two runs per scenario is a small sample, so read the counts,
|
|
334
|
+
not a percentage. No other agent was measured. The eval's README has the
|
|
335
|
+
breakdown and limits.
|
|
303
336
|
|
|
304
337
|
## Development
|
|
305
338
|
|
|
306
339
|
```bash
|
|
307
|
-
node --test test/*.test.mjs # composer and eval grader
|
|
308
|
-
bun test
|
|
309
|
-
|
|
340
|
+
node --test test/*.test.mjs # composer and eval grader
|
|
341
|
+
bun test test/ # the same under Bun
|
|
342
|
+
bun test skills/ # skill scripts
|
|
343
|
+
npm run check:package -- --bun # npm tarball: packs, installs, runs the CLI
|
|
344
|
+
npx --yes oxlint@1.85.0 . && npx --yes oxfmt@0.70.0 --check .
|
|
310
345
|
```
|
|
311
346
|
|
|
347
|
+
These versions match the pins in `.github/workflows/check.yml`; an unpinned `npx`
|
|
348
|
+
fetches the latest release, whose formatting can differ from CI's. Change both
|
|
349
|
+
together.
|
|
350
|
+
|
|
312
351
|
Oxfmt checks authored Markdown, HTML, JSON, JSONC, YAML, TOML and CSS as well
|
|
313
352
|
as JavaScript and TypeScript. Test fixtures stay excluded because scanner
|
|
314
353
|
tests depend on their exact text and line numbers. Package fields and
|
|
@@ -319,7 +358,7 @@ Set `HOUSE_RULES_TEST_TMP` to an existing directory to choose their scratch root
|
|
|
319
358
|
otherwise they use the operating system temporary directory. Choose a disk-backed
|
|
320
359
|
location when the system temporary directory is RAM-backed.
|
|
321
360
|
|
|
322
|
-
CI runs
|
|
361
|
+
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
362
|
[CONTRIBUTING.md](CONTRIBUTING.md) before opening one.
|
|
324
363
|
|
|
325
364
|
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
|
-
|
|
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 ${
|
|
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))
|
|
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
|
-
|
|
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
|