inclusion-md 0.2.1 โ 0.2.2
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/README.md +44 -241
- package/docs/cli-reference.md +100 -0
- package/docs/getting-started.md +67 -0
- package/docs/how-it-works.md +78 -0
- package/docs/integrations.md +49 -0
- package/lib/ascii.js +1 -2
- package/lib/init.js +1 -3
- package/lib/questionnaire.js +6 -14
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -5,40 +5,17 @@
|
|
|
5
5
|
> A repository-level context engineering document for inclusive AI-assisted
|
|
6
6
|
> software development.
|
|
7
7
|
|
|
8
|
-
[**Read INCLUSION.md โ**](./INCLUSION.md)
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Hi, I'm [Branon](https://branon.dev) ๐
|
|
13
|
-
|
|
14
|
-
I'm a design engineer who cares a lot about accessibility. As AI-assisted
|
|
15
|
-
development started becoming the default in how we build software, I kept
|
|
16
|
-
thinking about what a11y looks like in this new paradigm - where coding
|
|
17
|
-
assistants are quietly making thousands of small decisions about who our
|
|
18
|
-
software is built for.
|
|
19
|
-
|
|
20
|
-
This repo is something I feel is currently missing from the conversation. As
|
|
21
|
-
AI agents increasingly step into the roles of designers and engineers, I feel
|
|
22
|
-
they need to be made aware of their biases from the data they're trained on -
|
|
23
|
-
much like humans need to be made aware of biases in our cognitive schemas
|
|
24
|
-
and our unique understandings of the world. `INCLUSION.md` is a small,
|
|
25
|
-
opinionated, machine-readable scaffold for doing exactly that: giving AI
|
|
26
|
-
coding assistants persistent inclusion-oriented guidance during code
|
|
27
|
-
generation.
|
|
28
|
-
|
|
29
|
-
For the full rationale - training-data bias, the limits of WCAG, why
|
|
30
|
-
inclusion needs an operational layer in AI-native workflows - read the
|
|
31
|
-
companion essay: [_The need for INCLUSION.md_](https://branon.dev/blog/posts/the-need-for-inclusion-md).
|
|
8
|
+
[**Read INCLUSION.md โ**](./INCLUSION.md) ยท [npm](https://www.npmjs.com/package/inclusion-md) ยท [companion essay](https://branon.dev/blog/posts/the-need-for-inclusion-md)
|
|
32
9
|
|
|
33
10
|
---
|
|
34
11
|
|
|
35
12
|
## What it is
|
|
36
13
|
|
|
37
|
-
`INCLUSION.md` is a drop-in file that gives AI coding assistants
|
|
38
|
-
Copilot, Cursor, Claude Code, Windsurf, Continue, and friends
|
|
14
|
+
`INCLUSION.md` is a drop-in file that gives AI coding assistants โ GitHub
|
|
15
|
+
Copilot, Cursor, Claude Code, Windsurf, Continue, and friends โ persistent,
|
|
39
16
|
inclusion-oriented guidance during code generation.
|
|
40
17
|
|
|
41
|
-
It
|
|
18
|
+
It's the inclusion-focused sibling of `A11Y.md`, `CONTRIBUTING.md`, and
|
|
42
19
|
`design.md`:
|
|
43
20
|
|
|
44
21
|
| File | Operationalizes |
|
|
@@ -49,251 +26,77 @@ It is the inclusion-focused sibling of `A11Y.md`, `CONTRIBUTING.md`, and
|
|
|
49
26
|
| `design.md` | Visual and interaction system |
|
|
50
27
|
| `INCLUSION.md` | Contextual, representational, sociotechnical inclusion |
|
|
51
28
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
## Why this exists
|
|
29
|
+
## Why it exists
|
|
55
30
|
|
|
56
|
-
AI
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
31
|
+
AI coding assistants now sit _between_ human intent and the code, copy, and
|
|
32
|
+
interactions that ship. They generate output based on what's statistically
|
|
33
|
+
likely given training data โ which carries the accumulated biases of the
|
|
34
|
+
public web, open-source code, and English-language text. That means
|
|
35
|
+
assistants quietly amplify two kinds of debt:
|
|
61
36
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- **Accessibility debt** - inaccessible patterns inherited from the public web.
|
|
65
|
-
- **Representational debt** - narrow assumptions about whose communication
|
|
37
|
+
- **Accessibility debt** โ inaccessible patterns inherited from the public web.
|
|
38
|
+
- **Representational debt** โ narrow assumptions about whose communication
|
|
66
39
|
styles, identities, and lived experiences count as "default."
|
|
67
40
|
|
|
68
|
-
Neither shows up in your bundle size report.
|
|
41
|
+
Neither shows up in your bundle size report. `INCLUSION.md` is a small,
|
|
42
|
+
opinionated scaffold to push back. Not a fix โ bias mitigation is unsolved โ
|
|
43
|
+
but operational scaffolding that lowers the floor.
|
|
69
44
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
sociotechnical problem. But operational scaffolding lowers the floor.
|
|
45
|
+
For the long version, read the companion essay:
|
|
46
|
+
[_The need for INCLUSION.md_](https://branon.dev/blog/posts/the-need-for-inclusion-md).
|
|
73
47
|
|
|
74
48
|
---
|
|
75
49
|
|
|
76
50
|
## Quick start
|
|
77
51
|
|
|
78
|
-
### Option A: Use the CLI (recommended)
|
|
79
|
-
|
|
80
52
|
```bash
|
|
81
53
|
npx inclusion-md init
|
|
82
54
|
```
|
|
83
55
|
|
|
84
|
-
That's it.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
frontend app, design system, or backend API), and writes a customized
|
|
88
|
-
`INCLUSION.md` to your repo root.
|
|
89
|
-
|
|
90
|
-
Useful flags:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
npx inclusion-md init --variant design-system # start from a domain example
|
|
94
|
-
npx inclusion-md init --out docs/INCLUSION.md # write somewhere else
|
|
95
|
-
npx inclusion-md init --yes # accept defaults, non-interactive
|
|
96
|
-
npx inclusion-md init --force # overwrite without prompting
|
|
97
|
-
npx inclusion-md update # re-run questionnaire on existing file
|
|
98
|
-
npx inclusion-md --help
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Requires Node.js 16+. No dependencies.
|
|
102
|
-
|
|
103
|
-
#### The Design Decisions questionnaire
|
|
104
|
-
|
|
105
|
-
After the foundational questions, the CLI offers an opt-in **Design Decisions**
|
|
106
|
-
questionnaire - 13 short, skippable questions across six groups:
|
|
107
|
-
|
|
108
|
-
1. **Core assumptions** - who you primarily build for, and what "default user"
|
|
109
|
-
assumptions live inside your product
|
|
110
|
-
2. **Authentication & access** - how people get in, who can't, why
|
|
111
|
-
3. **Information collection** - what you ask for, what's required, why
|
|
112
|
-
4. **Interaction model** - how people interact, what patterns you don't support
|
|
113
|
-
5. **Communication & language** - languages and tone you optimize for
|
|
114
|
-
6. **Edge cases & intersections** - where the product breaks, who shows up
|
|
115
|
-
in unexpected ways
|
|
116
|
-
|
|
117
|
-
The questions are grounded in three sources:
|
|
118
|
-
|
|
119
|
-
- _ABLEIST: Measuring Ableist Harms in LLMs_ ([arxiv.org/abs/2510.10998](https://arxiv.org/abs/2510.10998))
|
|
120
|
-
- _Centering Disability Perspectives in LLM Research and Design_ (ACM)
|
|
121
|
-
- Kat Holmes, _Mismatch: How Inclusion Shapes Design_ (MIT Press)
|
|
122
|
-
|
|
123
|
-
The point isn't perfect answers. The point is **conscious, documented
|
|
124
|
-
tradeoffs**. Skipping a question is a valid answer; the doc just won't speak
|
|
125
|
-
to that dimension yet. Run `npx inclusion-md update` later to fill more in.
|
|
126
|
-
|
|
127
|
-
Answers land in your `INCLUSION.md` as a `### 1.B Design Decisions` subsection
|
|
128
|
-
under Project Context. Reviewers (human and AI) can flag generated output that
|
|
129
|
-
contradicts the realities you've documented.
|
|
130
|
-
|
|
131
|
-
#### Updating an existing INCLUSION.md
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
npx inclusion-md update
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
This re-runs the Project Context + Design Decisions + Maintenance questions
|
|
138
|
-
and rewrites **only** Sections 1 and 12 in place. Any edits you've made to
|
|
139
|
-
the rest of the file - your engineering guidance, your language heuristics,
|
|
140
|
-
your custom sections - are preserved.
|
|
141
|
-
|
|
142
|
-
### Option B: Copy the file by hand
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
curl -O https://raw.githubusercontent.com/BranonConor/inclusion.md/main/INCLUSION.md
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Or just download [`INCLUSION.md`](./INCLUSION.md) from this repo and drop it
|
|
149
|
-
into the root of your project alongside `README.md`.
|
|
150
|
-
|
|
151
|
-
### Customize Section 1 (Project Context)
|
|
152
|
-
|
|
153
|
-
The generic template is a starting point. Inclusion guidance is _contextual_ -
|
|
154
|
-
the section that matters most is the one that describes _your_ product, _your_
|
|
155
|
-
users, and _your_ known blind spots. Fill in:
|
|
156
|
-
|
|
157
|
-
- the product description
|
|
158
|
-
- who you've designed for
|
|
159
|
-
- who you _haven't_ designed for well (yet)
|
|
160
|
-
- distribution context (geography, devices, languages, assistive tech)
|
|
161
|
-
- the stakes when exclusion happens
|
|
162
|
-
|
|
163
|
-
(If you used `npx inclusion-md init`, this is already filled in.)
|
|
164
|
-
|
|
165
|
-
### Reference it from your AI assistant
|
|
166
|
-
|
|
167
|
-
Most AI coding assistants support repository-level context files. Point them
|
|
168
|
-
at `INCLUSION.md`.
|
|
169
|
-
|
|
170
|
-
**GitHub Copilot** - create `.github/copilot-instructions.md`:
|
|
171
|
-
|
|
172
|
-
```md
|
|
173
|
-
This repository contains an `INCLUSION.md` at the project root.
|
|
174
|
-
Follow its guidance when generating UI copy, code, documentation,
|
|
175
|
-
error messages, persona descriptions, and review feedback.
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Cursor** - in `.cursor/rules/inclusion.md` or `.cursorrules`:
|
|
179
|
-
|
|
180
|
-
```md
|
|
181
|
-
Always read and follow `/INCLUSION.md` when generating code, copy,
|
|
182
|
-
or design artifacts in this repository.
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**Claude Code** - in `CLAUDE.md`:
|
|
186
|
-
|
|
187
|
-
```md
|
|
188
|
-
Read `/INCLUSION.md` and apply its review prompts before
|
|
189
|
-
finalizing any generated output in this repository.
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**Continue / Windsurf / Cody / etc.** - add `INCLUSION.md` to your workspace
|
|
193
|
-
context configuration.
|
|
194
|
-
|
|
195
|
-
### Treat it like the rest of your engineering docs
|
|
196
|
-
|
|
197
|
-
- Name an owner.
|
|
198
|
-
- Review on a cadence (quarterly recommended).
|
|
199
|
-
- Track changes in a `CHANGELOG.md` or in releases.
|
|
200
|
-
- Provide a feedback route for users and contributors.
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Examples
|
|
205
|
-
|
|
206
|
-
The [`examples/`](./examples) folder contains adapted `INCLUSION.md` files for
|
|
207
|
-
different repo types:
|
|
56
|
+
That's it. Node.js 16+ required, zero dependencies. The CLI walks you
|
|
57
|
+
through a short questionnaire and writes a customized `INCLUSION.md` to
|
|
58
|
+
your repo root. Then [point your AI assistant at it](./docs/integrations.md).
|
|
208
59
|
|
|
209
|
-
|
|
210
|
-
a consumer-facing web app
|
|
211
|
-
- [`examples/design-system/INCLUSION.md`](./examples/design-system/INCLUSION.md) -
|
|
212
|
-
a component library / design system
|
|
213
|
-
- [`examples/backend-api/INCLUSION.md`](./examples/backend-api/INCLUSION.md) -
|
|
214
|
-
a backend API / SDK
|
|
60
|
+
## Documentation
|
|
215
61
|
|
|
216
|
-
|
|
62
|
+
| Doc | What's in it |
|
|
63
|
+
| --------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
64
|
+
| [Getting started](./docs/getting-started.md) | Install, pick a variant, customize Section 1, treat as infrastructure. |
|
|
65
|
+
| [AI assistant integrations](./docs/integrations.md) | Wire it into Copilot, Cursor, Claude Code, Continue, Windsurf. |
|
|
66
|
+
| [CLI reference](./docs/cli-reference.md) | All commands, flags, the Design Decisions questionnaire, troubleshooting. |
|
|
67
|
+
| [How it works](./docs/how-it-works.md) | How agents load it, the context-window tradeoff, what this is _not_. |
|
|
68
|
+
| [Examples](./examples) | Adapted templates: frontend app, design system, backend API. |
|
|
217
69
|
|
|
218
70
|
---
|
|
219
71
|
|
|
220
|
-
##
|
|
221
|
-
|
|
222
|
-
`INCLUSION.md` is **not**:
|
|
223
|
-
|
|
224
|
-
- a substitute for participatory research with disabled users
|
|
225
|
-
- a substitute for hiring disabled designers, engineers, and researchers
|
|
226
|
-
- a substitute for accessibility audits and remediation
|
|
227
|
-
- a substitute for legal and regulatory compliance
|
|
228
|
-
- a guarantee that any AI assistant will follow its guidance
|
|
229
|
-
- a finished or final artifact
|
|
230
|
-
|
|
231
|
-
It is an operational scaffold. The ceiling is raised by people - especially
|
|
232
|
-
disabled people - with authority, budget, and time.
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## Troubleshooting
|
|
237
|
-
|
|
238
|
-
**"`npx inclusion-md` does nothing / hangs."**
|
|
239
|
-
Make sure you're on Node.js 16+ (`node --version`). The CLI uses only
|
|
240
|
-
built-in modules - no install step is required.
|
|
241
|
-
|
|
242
|
-
**"I can't find an existing `INCLUSION.md`" when running `update`.**
|
|
243
|
-
By default the CLI looks at `./INCLUSION.md`. If yours lives elsewhere,
|
|
244
|
-
pass `--out`:
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
npx inclusion-md update --out docs/INCLUSION.md
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**The welcome animation looks weird in CI.**
|
|
251
|
-
It's automatically skipped when stdout isn't a TTY, when `--no-color` is
|
|
252
|
-
passed, or when `CI=1` is set. If you're piping output, pass `--no-color`
|
|
253
|
-
explicitly to be safe.
|
|
254
|
-
|
|
255
|
-
**I want to script this in a setup wizard.**
|
|
256
|
-
Pass `--yes` to accept all defaults and skip the optional Design Decisions
|
|
257
|
-
questionnaire. Combine with `--variant`, `--out`, and `--force` for a fully
|
|
258
|
-
non-interactive run.
|
|
72
|
+
## Hi, I'm [Branon](https://branon.dev) ๐
|
|
259
73
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
74
|
+
I'm a design engineer who cares a lot about accessibility. As AI-assisted
|
|
75
|
+
development became the default for shipping software, I kept thinking about
|
|
76
|
+
what a11y looks like in this new paradigm โ where coding assistants are
|
|
77
|
+
quietly making thousands of small decisions about who our software is built
|
|
78
|
+
for. This repo is something I felt was missing from the conversation.
|
|
264
79
|
|
|
265
80
|
---
|
|
266
81
|
|
|
267
82
|
## Contributing
|
|
268
83
|
|
|
269
|
-
Pull requests, issues, translations, domain-specific extensions, and
|
|
270
|
-
are welcome. See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
|
|
84
|
+
Pull requests, issues, translations, domain-specific extensions, and
|
|
85
|
+
critiques are welcome. See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
|
|
271
86
|
|
|
272
|
-
This project takes language and representation seriously. Contributions
|
|
273
|
-
improve language guidance, add domain-specific sections, or correct
|
|
274
|
-
exclusionary defaults are especially appreciated. Contributions
|
|
275
|
-
practitioners and from communities underrepresented in this
|
|
276
|
-
are prioritized in review.
|
|
87
|
+
This project takes language and representation seriously. Contributions
|
|
88
|
+
that improve language guidance, add domain-specific sections, or correct
|
|
89
|
+
ableist or exclusionary defaults are especially appreciated. Contributions
|
|
90
|
+
from disabled practitioners and from communities underrepresented in this
|
|
91
|
+
kind of tooling are prioritized in review.
|
|
277
92
|
|
|
278
|
-
|
|
93
|
+
## License & citation
|
|
279
94
|
|
|
280
|
-
|
|
95
|
+
MIT โ see [`LICENSE`](./LICENSE). Fork, adapt, translate, ship.
|
|
281
96
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
You are encouraged to fork, adapt, translate, and ship this in your own
|
|
285
|
-
projects. Attribution is appreciated but not required.
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## Citation
|
|
290
|
-
|
|
291
|
-
If you cite this work academically or in industry writing:
|
|
97
|
+
If you cite this academically or in industry writing:
|
|
292
98
|
|
|
293
99
|
```
|
|
294
100
|
Conor, B. (2026). INCLUSION.md: A context engineering scaffold for
|
|
295
101
|
inclusive AI-assisted software development. https://github.com/BranonConor/inclusion.md
|
|
296
102
|
```
|
|
297
|
-
|
|
298
|
-
Companion essay: _The need for INCLUSION.md_,
|
|
299
|
-
<https://branon.dev/blog/posts/the-need-for-inclusion-md>.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# CLI reference
|
|
2
|
+
|
|
3
|
+
```bash
|
|
4
|
+
npx inclusion-md <command> [options]
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Requires Node.js 16+. Zero dependencies.
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
### `init`
|
|
12
|
+
|
|
13
|
+
Interactively generate an `INCLUSION.md`. Walks through Project Context (5
|
|
14
|
+
questions), an opt-in Design Decisions questionnaire (13 questions), and
|
|
15
|
+
Maintenance (3 questions), then writes the file.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx inclusion-md init
|
|
19
|
+
npx inclusion-md init --variant design-system
|
|
20
|
+
npx inclusion-md init --out docs/INCLUSION.md
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### `update`
|
|
24
|
+
|
|
25
|
+
Re-run the questionnaire against an existing `INCLUSION.md`. Rewrites only
|
|
26
|
+
Section 1 (Project Context) and Section 12 (Maintenance) in place.
|
|
27
|
+
Everything else โ including your edits โ is preserved verbatim.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx inclusion-md update
|
|
31
|
+
npx inclusion-md update --out docs/INCLUSION.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Options
|
|
35
|
+
|
|
36
|
+
| Flag | Description |
|
|
37
|
+
| ------------------ | -------------------------------------------------------------------- |
|
|
38
|
+
| `-o, --out <path>` | Output path. Default: `./INCLUSION.md`. |
|
|
39
|
+
| `--variant <name>` | `generic` (default), `frontend-app`, `design-system`, `backend-api`. |
|
|
40
|
+
| `--force` | Overwrite existing file without prompting. |
|
|
41
|
+
| `-y, --yes` | Accept defaults; skip the optional Design Decisions questionnaire. |
|
|
42
|
+
| `--no-color` | Disable ANSI colors and the welcome animation. |
|
|
43
|
+
| `-h, --help` | Show help. |
|
|
44
|
+
| `-v, --version` | Show CLI version. |
|
|
45
|
+
|
|
46
|
+
## The Design Decisions questionnaire
|
|
47
|
+
|
|
48
|
+
After Project Context, the CLI offers 13 short, skippable questions across
|
|
49
|
+
six groups. The point isn't perfect answers โ it's **conscious, documented
|
|
50
|
+
tradeoffs**. Skipping is valid; the doc just won't speak to that dimension
|
|
51
|
+
yet, and you can fill more in later with `update`.
|
|
52
|
+
|
|
53
|
+
| Group | Surfaces |
|
|
54
|
+
| -------------------------- | --------------------------------------------------------- |
|
|
55
|
+
| Core assumptions | Who you build for; "default user" assumptions in product. |
|
|
56
|
+
| Authentication & access | How people get in, who can't, why. |
|
|
57
|
+
| Information collection | What you ask for; required vs. optional; why. |
|
|
58
|
+
| Interaction model | How people interact; patterns you don't support. |
|
|
59
|
+
| Communication & language | Languages and tone you optimize for. |
|
|
60
|
+
| Edge cases & intersections | Where it breaks; who shows up unexpectedly. |
|
|
61
|
+
|
|
62
|
+
Answers land as a `### 1.B Design Decisions` subsection under Project
|
|
63
|
+
Context. Reviewers (human and AI) can flag generated output that
|
|
64
|
+
contradicts what's documented.
|
|
65
|
+
|
|
66
|
+
The questions are grounded in:
|
|
67
|
+
|
|
68
|
+
- _ABLEIST: Measuring Ableist Harms in LLMs_ โ [arxiv.org/abs/2510.10998](https://arxiv.org/abs/2510.10998)
|
|
69
|
+
- _Centering Disability Perspectives in LLM Research and Design_ (ACM)
|
|
70
|
+
- Kat Holmes, _Mismatch: How Inclusion Shapes Design_ (MIT Press)
|
|
71
|
+
|
|
72
|
+
## Scripting / non-interactive use
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx inclusion-md init --yes --variant design-system --out docs/INCLUSION.md --force
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`--yes` skips all prompts (including the optional questionnaire) and
|
|
79
|
+
accepts defaults. Combine with `--force` for fully unattended setup.
|
|
80
|
+
|
|
81
|
+
## Troubleshooting
|
|
82
|
+
|
|
83
|
+
**`npx inclusion-md` does nothing or hangs.**
|
|
84
|
+
Check `node --version` is 16 or higher.
|
|
85
|
+
|
|
86
|
+
**"I can't find an existing `INCLUSION.md`" on `update`.**
|
|
87
|
+
Pass `--out` to point at the right path:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx inclusion-md update --out docs/INCLUSION.md
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**The welcome animation looks broken in CI.**
|
|
94
|
+
It's auto-skipped when stdout isn't a TTY, when `--no-color` is set, or
|
|
95
|
+
when `CI=1`. Pass `--no-color` explicitly to be safe.
|
|
96
|
+
|
|
97
|
+
**Worried `update` will trash my edits.**
|
|
98
|
+
It only rewrites Sections 1 and 12. Everything else is preserved verbatim.
|
|
99
|
+
The smoke tests in [`test/smoke.test.js`](../test/smoke.test.js) cover
|
|
100
|
+
this contract.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
The fastest path: run the CLI, answer a few questions, commit the file.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx inclusion-md init
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Requires Node.js 16+. No dependencies. The CLI walks you through a short
|
|
10
|
+
Project Context questionnaire, an opt-in deeper Design Decisions
|
|
11
|
+
questionnaire, and writes a customized [`INCLUSION.md`](../INCLUSION.md) to
|
|
12
|
+
your repo root.
|
|
13
|
+
|
|
14
|
+
## Manual install
|
|
15
|
+
|
|
16
|
+
Prefer to copy the file by hand:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -O https://raw.githubusercontent.com/BranonConor/inclusion.md/main/INCLUSION.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or download [`INCLUSION.md`](../INCLUSION.md) and drop it next to your
|
|
23
|
+
`README.md`.
|
|
24
|
+
|
|
25
|
+
## Pick a starting variant
|
|
26
|
+
|
|
27
|
+
The CLI ships four templates. Pick the one closest to your project; the
|
|
28
|
+
generic one is fine for most repos.
|
|
29
|
+
|
|
30
|
+
| Variant | Best for | Source |
|
|
31
|
+
| --------------- | ------------------------------------------ | ----------------------------------------------------- |
|
|
32
|
+
| `generic` | Most repos. Default. | [`INCLUSION.md`](../INCLUSION.md) |
|
|
33
|
+
| `frontend-app` | Consumer web apps. Forms, microcopy, AI. | [`examples/frontend-app`](../examples/frontend-app) |
|
|
34
|
+
| `design-system` | Component libraries. Tokens, RTL, density. | [`examples/design-system`](../examples/design-system) |
|
|
35
|
+
| `backend-api` | APIs / SDKs. Schema, errors, telemetry. | [`examples/backend-api`](../examples/backend-api) |
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx inclusion-md init --variant design-system
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
These are illustrative, not prescriptive. Adapt them.
|
|
42
|
+
|
|
43
|
+
## Customize Section 1
|
|
44
|
+
|
|
45
|
+
Inclusion guidance is contextual. The section that earns its keep is the one
|
|
46
|
+
that describes _your_ product, _your_ users, and _your_ known blind spots.
|
|
47
|
+
The CLI fills this in for you, but if you skipped it, edit Section 1 of your
|
|
48
|
+
generated file and answer:
|
|
49
|
+
|
|
50
|
+
- Product description
|
|
51
|
+
- Who you've designed for
|
|
52
|
+
- Who you _haven't_ designed for well yet
|
|
53
|
+
- Distribution context (geography, devices, languages, assistive tech)
|
|
54
|
+
- The stakes when exclusion happens
|
|
55
|
+
|
|
56
|
+
## Treat it like engineering infrastructure
|
|
57
|
+
|
|
58
|
+
- Name an owner.
|
|
59
|
+
- Review on a cadence (quarterly is a good default).
|
|
60
|
+
- Track changes in `CHANGELOG.md` or releases.
|
|
61
|
+
- Provide a feedback route for users and contributors.
|
|
62
|
+
|
|
63
|
+
## Next steps
|
|
64
|
+
|
|
65
|
+
- [Wire it into your AI assistant โ](./integrations.md)
|
|
66
|
+
- [Full CLI reference โ](./cli-reference.md)
|
|
67
|
+
- [How agents actually use it (and the context-window tradeoff) โ](./how-it-works.md)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# How it works
|
|
2
|
+
|
|
3
|
+
A reasonable concern when looking at a 400+ line markdown file: _won't this
|
|
4
|
+
eat my context window every prompt?_ Short answer: no, and the cost is
|
|
5
|
+
smaller than it looks.
|
|
6
|
+
|
|
7
|
+
## How it gets loaded, by tool
|
|
8
|
+
|
|
9
|
+
| Tool | How it loads `INCLUSION.md` | When |
|
|
10
|
+
| -------------------------- | ---------------------------------------------------- | ---------------------------------------------- |
|
|
11
|
+
| GitHub Copilot Chat | Via `.github/copilot-instructions.md` referencing it | Once per session/thread |
|
|
12
|
+
| Cursor | Via `.cursor/rules/inclusion.md` or `.cursorrules` | On rule activation, often per turn for matches |
|
|
13
|
+
| Claude Code | Via `CLAUDE.md` reference, then `Read` tool fetches | On demand, agent decides |
|
|
14
|
+
| Continue / Cody / Windsurf | Workspace context file | Once per session |
|
|
15
|
+
|
|
16
|
+
The pattern across all of them: the file isn't crammed into every LLM call.
|
|
17
|
+
It's loaded **once into the system prompt or a context-window slot** at
|
|
18
|
+
session start (Copilot, Continue), or **fetched on demand** when a task
|
|
19
|
+
touches relevant code (Claude Code, Cursor with rules).
|
|
20
|
+
|
|
21
|
+
## Token math
|
|
22
|
+
|
|
23
|
+
A typical generated `INCLUSION.md` is roughly **4โ6k tokens**. For reference:
|
|
24
|
+
|
|
25
|
+
- Modern context windows: 128k (GPT-4o), 200k (Claude Sonnet), 1M+ (Gemini 2.0)
|
|
26
|
+
- A single file you're editing: 500โ3000 tokens
|
|
27
|
+
- A full chat session: usually 20โ60k tokens of context
|
|
28
|
+
|
|
29
|
+
So even on a "small" 128k window, `INCLUSION.md` is **~3โ5% of context
|
|
30
|
+
budget**. That's the same order of magnitude as a single React component
|
|
31
|
+
file. Worth it.
|
|
32
|
+
|
|
33
|
+
## How to think about the tradeoff
|
|
34
|
+
|
|
35
|
+
1. **Treat it like `tsconfig.json` or a lint rule set.** Infrastructure:
|
|
36
|
+
loaded once, applies to everything, doesn't need to be re-introduced.
|
|
37
|
+
2. **The cost is per-session, not per-prompt.** Modern agents cache the
|
|
38
|
+
system prompt; the second turn doesn't re-pay the upload cost.
|
|
39
|
+
3. **The first ~80 lines do the load-bearing work.** Sections 0โ2 (what
|
|
40
|
+
this is + core principle + project context) carry the main signal.
|
|
41
|
+
Sections 3โ13 are reference material the agent can skim or cite.
|
|
42
|
+
4. **You can split it later if it bloats.** A lean root `INCLUSION.md`
|
|
43
|
+
that links to `docs/inclusion/*.md` deep dives is a valid pattern โ
|
|
44
|
+
same way `README.md` links to `CONTRIBUTING.md`.
|
|
45
|
+
|
|
46
|
+
## Honest caveats
|
|
47
|
+
|
|
48
|
+
System-prompt-style guidance is **soft pressure**, not enforcement. It
|
|
49
|
+
works best when:
|
|
50
|
+
|
|
51
|
+
- The agent is told to **cite specific guidance** when generating code
|
|
52
|
+
("Reference Section 7 when writing user-facing copy")
|
|
53
|
+
- You **review output against it** rather than expecting the agent to
|
|
54
|
+
police itself perfectly
|
|
55
|
+
- It's paired with **automated checks** (lint rules, a11y tests) for
|
|
56
|
+
things that can be checked
|
|
57
|
+
|
|
58
|
+
`INCLUSION.md` is a thinking-tool for the human reviewer as much as a
|
|
59
|
+
directive for the agent. Those 4โ6k tokens aren't there to fill the
|
|
60
|
+
context window โ they're there so when generated output ships an ableist
|
|
61
|
+
phrase or a hover-only interaction, you can point at a section number and
|
|
62
|
+
say _"this is the thing we already decided."_
|
|
63
|
+
|
|
64
|
+
## What this is not
|
|
65
|
+
|
|
66
|
+
`INCLUSION.md` is **not**:
|
|
67
|
+
|
|
68
|
+
- A substitute for participatory research with disabled users
|
|
69
|
+
- A substitute for hiring disabled designers, engineers, and researchers
|
|
70
|
+
- A substitute for accessibility audits and remediation
|
|
71
|
+
- A substitute for legal and regulatory compliance (ADA, EAA, AODA, Section
|
|
72
|
+
508, EN 301 549, etc.)
|
|
73
|
+
- A guarantee that any AI assistant will follow its guidance
|
|
74
|
+
- A finished or final artifact
|
|
75
|
+
|
|
76
|
+
It is an operational scaffold. It lowers the floor. It does not raise the
|
|
77
|
+
ceiling. The ceiling is raised by people โ especially disabled people โ
|
|
78
|
+
with authority, budget, and time.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# AI assistant integrations
|
|
2
|
+
|
|
3
|
+
`INCLUSION.md` only does its job if your assistant actually reads it. Most
|
|
4
|
+
tools support repository-level context files โ point them at it.
|
|
5
|
+
|
|
6
|
+
## GitHub Copilot
|
|
7
|
+
|
|
8
|
+
Create `.github/copilot-instructions.md`:
|
|
9
|
+
|
|
10
|
+
```md
|
|
11
|
+
This repository contains an `INCLUSION.md` at the project root.
|
|
12
|
+
Follow its guidance when generating UI copy, code, documentation,
|
|
13
|
+
error messages, persona descriptions, and review feedback.
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Cursor
|
|
17
|
+
|
|
18
|
+
Create `.cursor/rules/inclusion.md` (or use `.cursorrules`):
|
|
19
|
+
|
|
20
|
+
```md
|
|
21
|
+
Always read and follow `/INCLUSION.md` when generating code, copy,
|
|
22
|
+
or design artifacts in this repository.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Claude Code
|
|
26
|
+
|
|
27
|
+
In `CLAUDE.md`:
|
|
28
|
+
|
|
29
|
+
```md
|
|
30
|
+
Read `/INCLUSION.md` and apply its review prompts before
|
|
31
|
+
finalizing any generated output in this repository.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Continue / Windsurf / Cody / others
|
|
35
|
+
|
|
36
|
+
Add `INCLUSION.md` to your workspace context configuration. Most tools have
|
|
37
|
+
a "context files" or "rules" setting that takes a path or glob.
|
|
38
|
+
|
|
39
|
+
## How loading actually works
|
|
40
|
+
|
|
41
|
+
The mechanics differ per tool โ see [how it works](./how-it-works.md) for
|
|
42
|
+
the loading model and the context-window tradeoff.
|
|
43
|
+
|
|
44
|
+
## Going further
|
|
45
|
+
|
|
46
|
+
Tell the assistant to **cite specific guidance** when generating code, e.g.
|
|
47
|
+
"Reference Section 7 (Inclusive Language Heuristics) when writing
|
|
48
|
+
user-facing copy." Specific citations work better than blanket "follow the
|
|
49
|
+
inclusion file" instructions.
|
package/lib/ascii.js
CHANGED
|
@@ -22,8 +22,7 @@ const FRAMES = [
|
|
|
22
22
|
|
|
23
23
|
function renderFrame(frame, intensity) {
|
|
24
24
|
// intensity: 0 = dim, 1 = normal, 2 = bold
|
|
25
|
-
const stylize =
|
|
26
|
-
intensity === 0 ? c.dim : intensity === 2 ? c.bold : (s) => s;
|
|
25
|
+
const stylize = intensity === 0 ? c.dim : intensity === 2 ? c.bold : (s) => s;
|
|
27
26
|
return frame.map((line) => stylize(line)).join("\n");
|
|
28
27
|
}
|
|
29
28
|
|
package/lib/init.js
CHANGED
|
@@ -169,9 +169,7 @@ async function init(args) {
|
|
|
169
169
|
|
|
170
170
|
const projectContext = await askProjectContext(p);
|
|
171
171
|
process.stdout.write(
|
|
172
|
-
"\n" +
|
|
173
|
-
c.green("โ ") +
|
|
174
|
-
"Great, that's the foundational context.\n",
|
|
172
|
+
"\n" + c.green("โ ") + "Great, that's the foundational context.\n",
|
|
175
173
|
);
|
|
176
174
|
|
|
177
175
|
// --- Design Decisions (opt-in) ---------------------------------------
|
package/lib/questionnaire.js
CHANGED
|
@@ -46,8 +46,7 @@ const GROUPS = [
|
|
|
46
46
|
key: "authMethods",
|
|
47
47
|
label:
|
|
48
48
|
"How do people get into your product? What auth methods do you support?",
|
|
49
|
-
hint:
|
|
50
|
-
"Examples: email/password, email + SMS, social login, passkey, SSO, magic link.",
|
|
49
|
+
hint: "Examples: email/password, email + SMS, social login, passkey, SSO, magic link.",
|
|
51
50
|
},
|
|
52
51
|
{
|
|
53
52
|
key: "authExcluded",
|
|
@@ -60,8 +59,7 @@ const GROUPS = [
|
|
|
60
59
|
{
|
|
61
60
|
key: "authReason",
|
|
62
61
|
label: "Why did you choose that authentication method?",
|
|
63
|
-
hint:
|
|
64
|
-
"Be honest: easiest to implement, most widely supported, security requirement, industry standard.",
|
|
62
|
+
hint: "Be honest: easiest to implement, most widely supported, security requirement, industry standard.",
|
|
65
63
|
},
|
|
66
64
|
],
|
|
67
65
|
},
|
|
@@ -80,8 +78,7 @@ const GROUPS = [
|
|
|
80
78
|
{
|
|
81
79
|
key: "infoRationale",
|
|
82
80
|
label: "For any required personal information, why is it required?",
|
|
83
|
-
hint:
|
|
84
|
-
"For each field: could we work without this? Example: 'Email required for notifications - could SMS work instead?'",
|
|
81
|
+
hint: "For each field: could we work without this? Example: 'Email required for notifications - could SMS work instead?'",
|
|
85
82
|
},
|
|
86
83
|
],
|
|
87
84
|
},
|
|
@@ -112,8 +109,7 @@ const GROUPS = [
|
|
|
112
109
|
{
|
|
113
110
|
key: "languages",
|
|
114
111
|
label: "What language(s) do you currently support?",
|
|
115
|
-
hint:
|
|
116
|
-
"English only, English + [list], multilingual from day 1, plan to add languages in [timeframe].",
|
|
112
|
+
hint: "English only, English + [list], multilingual from day 1, plan to add languages in [timeframe].",
|
|
117
113
|
},
|
|
118
114
|
{
|
|
119
115
|
key: "communicationStyle",
|
|
@@ -132,8 +128,7 @@ const GROUPS = [
|
|
|
132
128
|
{
|
|
133
129
|
key: "knownBreakage",
|
|
134
130
|
label: "What's one scenario where your product might not work?",
|
|
135
|
-
hint:
|
|
136
|
-
"Be specific, not vague. Example: 'People in rural areas with <1 Mbps internet' or 'Left-handed users on touch devices.'",
|
|
131
|
+
hint: "Be specific, not vague. Example: 'People in rural areas with <1 Mbps internet' or 'Left-handed users on touch devices.'",
|
|
137
132
|
},
|
|
138
133
|
{
|
|
139
134
|
key: "unexpectedUsers",
|
|
@@ -167,10 +162,7 @@ async function runQuestionnaire(p) {
|
|
|
167
162
|
for (let g = 0; g < GROUPS.length; g++) {
|
|
168
163
|
const group = GROUPS[g];
|
|
169
164
|
process.stdout.write(
|
|
170
|
-
c.cyan(group.title) +
|
|
171
|
-
"\n" +
|
|
172
|
-
c.dim(` ${group.blurb}`) +
|
|
173
|
-
"\n\n",
|
|
165
|
+
c.cyan(group.title) + "\n" + c.dim(` ${group.blurb}`) + "\n\n",
|
|
174
166
|
);
|
|
175
167
|
|
|
176
168
|
for (const q of group.questions) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "inclusion-md",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Scaffold an INCLUSION.md - a context engineering doc that gives AI coding assistants inclusion-oriented guidance during code generation.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"inclusion",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"templates",
|
|
35
35
|
"INCLUSION.md",
|
|
36
36
|
"examples",
|
|
37
|
+
"docs",
|
|
37
38
|
"README.md",
|
|
38
39
|
"LICENSE"
|
|
39
40
|
],
|