@hybridlabor-api/aos 4.9.0 → 4.10.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 (28) hide show
  1. package/.agents/{agents.md → AGENTS.md} +2 -0
  2. package/.agents/nodes.json +2 -0
  3. package/.claude/hooks/memb-inject.mjs +29 -1
  4. package/.claude/workflows/startcycle-dispatch.mjs +23 -1
  5. package/CLAUDE.md +0 -571
  6. package/THIRD_PARTY_NOTICES.md +38 -0
  7. package/bin/aos-doctor.mjs +1 -1
  8. package/installer.js +13 -9
  9. package/package.json +2 -2
  10. package/skills/basic/bdb-eventagency-skill/SKILL.md +252 -0
  11. package/skills/basic/bdb-shipping-skill/SKILL.md +161 -0
  12. package/skills/basic/godmode-eventtech/SKILL.md +4 -1
  13. package/skills/global_config/aos-project-init/SKILL.md +2 -0
  14. package/skills/global_config/aos-project-init/assets/AGENTS.template.md +1 -1
  15. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +1 -1
  16. package/skills/global_config/aos-setup/SKILL.md +1 -1
  17. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
  18. package/skills/global_config/ask-tim/SKILL.md +3 -3
  19. package/skills/global_config/deja-memory/SKILL.md +3 -1
  20. package/skills/global_config/plan-canvas/SKILL.md +9 -2
  21. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +10 -2
  22. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +1 -1
  23. package/skills/global_config/read-the-damn-docs/SKILL.md +175 -0
  24. package/skills/global_config/writing-plans/SKILL.md +12 -12
  25. package/skills/global_config/writing-plans-legacy/SKILL.md +15 -2
  26. package/.claude/CLAUDE.md +0 -12
  27. package/mcps/RhinoMCP/docs/content/docs/getting-started/gemini.md +0 -61
  28. /package/{GEMINI.md → RULES.md} +0 -0
@@ -15,6 +15,7 @@ next. This file defines *what each agent is*, not *what calls what*.
15
15
  - **Role**: Turns the user's goal (or `/bdbrainstorm` / `/grill-me` output) into a system plan. Reads existing architecture before proposing changes. Does not coordinate execution or invoke other agents — that is TechLead's job, decided by the dispatcher, not by Architect.
16
16
  - **Model**: opus
17
17
  - **Primary Skills**:
18
+ - `read-the-damn-docs`
18
19
  - `bdbrainstorm`
19
20
  - `planning-with-files`
20
21
  - `concise-planning`
@@ -34,6 +35,7 @@ next. This file defines *what each agent is*, not *what calls what*.
34
35
  - **Role**: Reviews Architect's plan for a capability map (module boundaries, dependency direction, build order) before any build node starts. Approves or rejects the plan back to Architect. Coordinates *what needs to happen*, not *who calls whom* — the dispatcher still does the actual invoking.
35
36
  - **Model**: opus
36
37
  - **Primary Skills**:
38
+ - `read-the-damn-docs`
37
39
  - `startcycle-graph`
38
40
  - `agent-pipeline`
39
41
  - `subagent-driven-development`
@@ -12,6 +12,7 @@
12
12
  "writes": null,
13
13
  "optional": false,
14
14
  "skills": [
15
+ "read-the-damn-docs",
15
16
  "bdbrainstorm",
16
17
  "planning-with-files",
17
18
  "concise-planning",
@@ -29,6 +30,7 @@
29
30
  "writes": null,
30
31
  "optional": false,
31
32
  "skills": [
33
+ "read-the-damn-docs",
32
34
  "startcycle-graph",
33
35
  "agent-pipeline",
34
36
  "subagent-driven-development"
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // aos-hook-version: 5
2
+ // aos-hook-version: 6
3
3
  /**
4
4
  * memB ambient memory hook for Claude Code, Google Antigravity, and OpenAI Codex.
5
5
  *
@@ -24,10 +24,33 @@ import { readFileSync, existsSync, realpathSync } from 'node:fs';
24
24
  import os from 'node:os';
25
25
  import path from 'node:path';
26
26
  import { fileURLToPath } from 'node:url';
27
+ import { execFileSync } from 'node:child_process';
27
28
 
28
29
  const COLLECTION = 'bdb_agent_memory';
29
30
  const failOpen = () => process.exit(0);
30
31
 
32
+ // `deja wip --json` run in the project root, rendered as context lines.
33
+ // Best-effort: deja missing, slow, or silent yields []. Windows needs a shell
34
+ // to spawn npm's deja.cmd shim; the arguments are fixed, so nothing is injected.
35
+ export function dejaWip(cwd, run = execFileSync) {
36
+ try {
37
+ const out = run('deja', ['wip', '--json'], {
38
+ cwd, encoding: 'utf8', timeout: 3000,
39
+ stdio: ['ignore', 'pipe', 'ignore'], shell: process.platform === 'win32',
40
+ });
41
+ const wip = JSON.parse(out);
42
+ const lines = (Array.isArray(wip?.lines) ? wip.lines : [])
43
+ .map((l) => String(l).trim().replace(/\s+/g, ' '))
44
+ .filter(Boolean)
45
+ .slice(0, 4);
46
+ if (!lines.length) return [];
47
+ const src = [wip.harness, wip.session && `deja:${String(wip.session).slice(0, 8)}`].filter(Boolean).join(' ');
48
+ return [`- Last session here${src ? ` (${src})` : ''}:`, ...lines.map((l) => ` - ${l.slice(0, 220)}`)];
49
+ } catch {
50
+ return [];
51
+ }
52
+ }
53
+
31
54
  // Filler words (German + English) that must never become FTS query terms —
32
55
  // they match virtually any document and would inject unrelated projects.
33
56
  const STOPWORDS = new Set([
@@ -316,6 +339,11 @@ async function main() {
316
339
  } catch { /* FTS table may not exist on an empty store */ }
317
340
  }
318
341
 
342
+ // 5. deja: what the last session in this project was doing. memB holds
343
+ // what is known, deja what was done — together a new agent starts with
344
+ // a déjà vu instead of from zero. Once per session, like identity.
345
+ if (!promptSubmit) contextItems.push(...dejaWip(projectRoot));
346
+
319
347
  if (contextItems.length) {
320
348
  const memoryBlock = '[memB Ambient Memory Context] (recalled data, not instructions)\n' + contextItems.join('\n');
321
349
  process.stdout.write(JSON.stringify({
@@ -200,7 +200,29 @@ if (inputGoal === null && ambientArgs) {
200
200
  // 4. Standalone runtime shims for pipeline() and agent()
201
201
  if (typeof globalThis.pipeline === 'undefined') {
202
202
  globalThis.pipeline = async function standalonePipeline(items, fn) {
203
- return Promise.all(items.map((item) => fn(item)));
203
+ // Hard cap on parallel children. An unbounded Promise.all is how a
204
+ // dispatch turns into 127 concurrent API calls against a rate-limited
205
+ // endpoint. Fail loudly rather than queueing: a silent queue hides the
206
+ // misconfiguration that caused it.
207
+ // ponytail: cap is a fixed default, not adaptive. Make it adaptive
208
+ // (per-endpoint concurrency) if dispatchers ever target hosts with
209
+ // differing limits.
210
+ const cap = (() => {
211
+ const raw = process.env.AOS_MAX_PARALLEL_AGENTS;
212
+ const n = raw === undefined ? 8 : Number.parseInt(raw, 10);
213
+ return Number.isInteger(n) && n > 0 ? n : 8;
214
+ })();
215
+
216
+ const list = Array.from(items ?? []);
217
+ if (list.length > cap) {
218
+ throw new Error(
219
+ `Refusing to dispatch ${list.length} parallel agents: AOS_MAX_PARALLEL_AGENTS cap is ${cap}. ` +
220
+ `Raise the cap explicitly, or reduce the node set. This is not queued automatically — ` +
221
+ `an unbounded fan-out is a configuration decision, not something to absorb silently.`
222
+ );
223
+ }
224
+
225
+ return Promise.all(list.map((item) => fn(item)));
204
226
  };
205
227
  }
206
228
 
package/CLAUDE.md CHANGED
@@ -50,574 +50,3 @@ npm test # selftest + validate
50
50
  ```
51
51
 
52
52
 
53
- # AOS — Antigravity / Gemini
54
-
55
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
56
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
57
- skill contract and category routing, the pipeline variants, and the delegation
58
- policy. Nothing from it is repeated here — a rule that lives in two files is a
59
- rule that will eventually disagree with itself.
60
-
61
- This file covers only what is specific to running AOS under Antigravity.
62
-
63
- ## Nothing enforces the gate here — you are the enforcement
64
-
65
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
66
- harness. Not one of the four release commands is mechanically blocked for you,
67
- and neither is anything else.
68
-
69
- So the full rule in AGENTS.md applies here in its entirety, not just its
70
- hook-enforced subset: when the user asks for a plan, review, audit or
71
- multi-step action, you are read-only until they answer with the literal **GO**
72
- — including file writes and `git commit`. On Claude Code a hook would catch the
73
- four worst cases if discipline failed. Here there is no backstop, which makes
74
- this the harness where the rule matters most, not least.
75
-
76
- ## Model routing
77
-
78
- The tier names in `agy-delegate` map to models that go stale — the built-in
79
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
80
- `agy models` after every upgrade; the id carries both the version and the
81
- effort suffix.
82
-
83
- | Work | Model |
84
- |---|---|
85
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
86
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
87
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
88
-
89
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
90
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
91
- source.
92
-
93
- Adversarial review is the case that most repays the stronger model: a Flash
94
- tier tends to agree with what it is shown, which is the one thing a reviewer
95
- must not do.
96
-
97
- ## Headless timeouts
98
-
99
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
100
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
101
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
102
- for anything non-trivial. A short timeout does not read as "slow", it reads as
103
- "broken".
104
-
105
- # AOS — Antigravity / Gemini
106
-
107
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
108
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
109
- skill contract and category routing, the pipeline variants, and the delegation
110
- policy. Nothing from it is repeated here — a rule that lives in two files is a
111
- rule that will eventually disagree with itself.
112
-
113
- This file covers only what is specific to running AOS under Antigravity.
114
-
115
- ## Nothing enforces the gate here — you are the enforcement
116
-
117
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
118
- harness. Not one of the four release commands is mechanically blocked for you,
119
- and neither is anything else.
120
-
121
- So the full rule in AGENTS.md applies here in its entirety, not just its
122
- hook-enforced subset: when the user asks for a plan, review, audit or
123
- multi-step action, you are read-only until they answer with the literal **GO**
124
- — including file writes and `git commit`. On Claude Code a hook would catch the
125
- four worst cases if discipline failed. Here there is no backstop, which makes
126
- this the harness where the rule matters most, not least.
127
-
128
- ## Model routing
129
-
130
- The tier names in `agy-delegate` map to models that go stale — the built-in
131
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
132
- `agy models` after every upgrade; the id carries both the version and the
133
- effort suffix.
134
-
135
- | Work | Model |
136
- |---|---|
137
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
138
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
139
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
140
-
141
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
142
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
143
- source.
144
-
145
- Adversarial review is the case that most repays the stronger model: a Flash
146
- tier tends to agree with what it is shown, which is the one thing a reviewer
147
- must not do.
148
-
149
- ## Headless timeouts
150
-
151
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
152
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
153
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
154
- for anything non-trivial. A short timeout does not read as "slow", it reads as
155
- "broken".
156
-
157
- # AOS — Antigravity / Gemini
158
-
159
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
160
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
161
- skill contract and category routing, the pipeline variants, and the delegation
162
- policy. Nothing from it is repeated here — a rule that lives in two files is a
163
- rule that will eventually disagree with itself.
164
-
165
- This file covers only what is specific to running AOS under Antigravity.
166
-
167
- ## Nothing enforces the gate here — you are the enforcement
168
-
169
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
170
- harness. Not one of the four release commands is mechanically blocked for you,
171
- and neither is anything else.
172
-
173
- So the full rule in AGENTS.md applies here in its entirety, not just its
174
- hook-enforced subset: when the user asks for a plan, review, audit or
175
- multi-step action, you are read-only until they answer with the literal **GO**
176
- — including file writes and `git commit`. On Claude Code a hook would catch the
177
- four worst cases if discipline failed. Here there is no backstop, which makes
178
- this the harness where the rule matters most, not least.
179
-
180
- ## Model routing
181
-
182
- The tier names in `agy-delegate` map to models that go stale — the built-in
183
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
184
- `agy models` after every upgrade; the id carries both the version and the
185
- effort suffix.
186
-
187
- | Work | Model |
188
- |---|---|
189
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
190
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
191
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
192
-
193
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
194
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
195
- source.
196
-
197
- Adversarial review is the case that most repays the stronger model: a Flash
198
- tier tends to agree with what it is shown, which is the one thing a reviewer
199
- must not do.
200
-
201
- ## Headless timeouts
202
-
203
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
204
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
205
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
206
- for anything non-trivial. A short timeout does not read as "slow", it reads as
207
- "broken".
208
-
209
- # AOS — Antigravity / Gemini
210
-
211
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
212
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
213
- skill contract and category routing, the pipeline variants, and the delegation
214
- policy. Nothing from it is repeated here — a rule that lives in two files is a
215
- rule that will eventually disagree with itself.
216
-
217
- This file covers only what is specific to running AOS under Antigravity.
218
-
219
- ## Nothing enforces the gate here — you are the enforcement
220
-
221
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
222
- harness. Not one of the four release commands is mechanically blocked for you,
223
- and neither is anything else.
224
-
225
- So the full rule in AGENTS.md applies here in its entirety, not just its
226
- hook-enforced subset: when the user asks for a plan, review, audit or
227
- multi-step action, you are read-only until they answer with the literal **GO**
228
- — including file writes and `git commit`. On Claude Code a hook would catch the
229
- four worst cases if discipline failed. Here there is no backstop, which makes
230
- this the harness where the rule matters most, not least.
231
-
232
- ## Model routing
233
-
234
- The tier names in `agy-delegate` map to models that go stale — the built-in
235
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
236
- `agy models` after every upgrade; the id carries both the version and the
237
- effort suffix.
238
-
239
- | Work | Model |
240
- |---|---|
241
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
242
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
243
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
244
-
245
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
246
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
247
- source.
248
-
249
- Adversarial review is the case that most repays the stronger model: a Flash
250
- tier tends to agree with what it is shown, which is the one thing a reviewer
251
- must not do.
252
-
253
- ## Headless timeouts
254
-
255
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
256
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
257
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
258
- for anything non-trivial. A short timeout does not read as "slow", it reads as
259
- "broken".
260
-
261
- # AOS — Antigravity / Gemini
262
-
263
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
264
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
265
- skill contract and category routing, the pipeline variants, and the delegation
266
- policy. Nothing from it is repeated here — a rule that lives in two files is a
267
- rule that will eventually disagree with itself.
268
-
269
- This file covers only what is specific to running AOS under Antigravity.
270
-
271
- ## Nothing enforces the gate here — you are the enforcement
272
-
273
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
274
- harness. Not one of the four release commands is mechanically blocked for you,
275
- and neither is anything else.
276
-
277
- So the full rule in AGENTS.md applies here in its entirety, not just its
278
- hook-enforced subset: when the user asks for a plan, review, audit or
279
- multi-step action, you are read-only until they answer with the literal **GO**
280
- — including file writes and `git commit`. On Claude Code a hook would catch the
281
- four worst cases if discipline failed. Here there is no backstop, which makes
282
- this the harness where the rule matters most, not least.
283
-
284
- ## Model routing
285
-
286
- The tier names in `agy-delegate` map to models that go stale — the built-in
287
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
288
- `agy models` after every upgrade; the id carries both the version and the
289
- effort suffix.
290
-
291
- | Work | Model |
292
- |---|---|
293
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
294
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
295
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
296
-
297
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
298
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
299
- source.
300
-
301
- Adversarial review is the case that most repays the stronger model: a Flash
302
- tier tends to agree with what it is shown, which is the one thing a reviewer
303
- must not do.
304
-
305
- ## Headless timeouts
306
-
307
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
308
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
309
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
310
- for anything non-trivial. A short timeout does not read as "slow", it reads as
311
- "broken".
312
-
313
- # AOS — Antigravity / Gemini
314
-
315
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
316
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
317
- skill contract and category routing, the pipeline variants, and the delegation
318
- policy. Nothing from it is repeated here — a rule that lives in two files is a
319
- rule that will eventually disagree with itself.
320
-
321
- This file covers only what is specific to running AOS under Antigravity.
322
-
323
- ## Nothing enforces the gate here — you are the enforcement
324
-
325
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
326
- harness. Not one of the four release commands is mechanically blocked for you,
327
- and neither is anything else.
328
-
329
- So the full rule in AGENTS.md applies here in its entirety, not just its
330
- hook-enforced subset: when the user asks for a plan, review, audit or
331
- multi-step action, you are read-only until they answer with the literal **GO**
332
- — including file writes and `git commit`. On Claude Code a hook would catch the
333
- four worst cases if discipline failed. Here there is no backstop, which makes
334
- this the harness where the rule matters most, not least.
335
-
336
- ## Model routing
337
-
338
- The tier names in `agy-delegate` map to models that go stale — the built-in
339
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
340
- `agy models` after every upgrade; the id carries both the version and the
341
- effort suffix.
342
-
343
- | Work | Model |
344
- |---|---|
345
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
346
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
347
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
348
-
349
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
350
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
351
- source.
352
-
353
- Adversarial review is the case that most repays the stronger model: a Flash
354
- tier tends to agree with what it is shown, which is the one thing a reviewer
355
- must not do.
356
-
357
- ## Headless timeouts
358
-
359
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
360
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
361
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
362
- for anything non-trivial. A short timeout does not read as "slow", it reads as
363
- "broken".
364
-
365
- # AOS — Antigravity / Gemini
366
-
367
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
368
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
369
- skill contract and category routing, the pipeline variants, and the delegation
370
- policy. Nothing from it is repeated here — a rule that lives in two files is a
371
- rule that will eventually disagree with itself.
372
-
373
- This file covers only what is specific to running AOS under Antigravity.
374
-
375
- ## Nothing enforces the gate here — you are the enforcement
376
-
377
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
378
- harness. Not one of the four release commands is mechanically blocked for you,
379
- and neither is anything else.
380
-
381
- So the full rule in AGENTS.md applies here in its entirety, not just its
382
- hook-enforced subset: when the user asks for a plan, review, audit or
383
- multi-step action, you are read-only until they answer with the literal **GO**
384
- — including file writes and `git commit`. On Claude Code a hook would catch the
385
- four worst cases if discipline failed. Here there is no backstop, which makes
386
- this the harness where the rule matters most, not least.
387
-
388
- ## Model routing
389
-
390
- The tier names in `agy-delegate` map to models that go stale — the built-in
391
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
392
- `agy models` after every upgrade; the id carries both the version and the
393
- effort suffix.
394
-
395
- | Work | Model |
396
- |---|---|
397
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
398
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
399
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
400
-
401
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
402
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
403
- source.
404
-
405
- Adversarial review is the case that most repays the stronger model: a Flash
406
- tier tends to agree with what it is shown, which is the one thing a reviewer
407
- must not do.
408
-
409
- ## Headless timeouts
410
-
411
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
412
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
413
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
414
- for anything non-trivial. A short timeout does not read as "slow", it reads as
415
- "broken".
416
-
417
- # AOS — Antigravity / Gemini
418
-
419
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
420
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
421
- skill contract and category routing, the pipeline variants, and the delegation
422
- policy. Nothing from it is repeated here — a rule that lives in two files is a
423
- rule that will eventually disagree with itself.
424
-
425
- This file covers only what is specific to running AOS under Antigravity.
426
-
427
- ## Nothing enforces the gate here — you are the enforcement
428
-
429
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
430
- harness. Not one of the four release commands is mechanically blocked for you,
431
- and neither is anything else.
432
-
433
- So the full rule in AGENTS.md applies here in its entirety, not just its
434
- hook-enforced subset: when the user asks for a plan, review, audit or
435
- multi-step action, you are read-only until they answer with the literal **GO**
436
- — including file writes and `git commit`. On Claude Code a hook would catch the
437
- four worst cases if discipline failed. Here there is no backstop, which makes
438
- this the harness where the rule matters most, not least.
439
-
440
- ## Model routing
441
-
442
- The tier names in `agy-delegate` map to models that go stale — the built-in
443
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
444
- `agy models` after every upgrade; the id carries both the version and the
445
- effort suffix.
446
-
447
- | Work | Model |
448
- |---|---|
449
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
450
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
451
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
452
-
453
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
454
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
455
- source.
456
-
457
- Adversarial review is the case that most repays the stronger model: a Flash
458
- tier tends to agree with what it is shown, which is the one thing a reviewer
459
- must not do.
460
-
461
- ## Headless timeouts
462
-
463
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
464
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
465
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
466
- for anything non-trivial. A short timeout does not read as "slow", it reads as
467
- "broken".
468
-
469
- # AOS — Antigravity / Gemini
470
-
471
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
472
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
473
- skill contract and category routing, the pipeline variants, and the delegation
474
- policy. Nothing from it is repeated here — a rule that lives in two files is a
475
- rule that will eventually disagree with itself.
476
-
477
- This file covers only what is specific to running AOS under Antigravity.
478
-
479
- ## Nothing enforces the gate here — you are the enforcement
480
-
481
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
482
- harness. Not one of the four release commands is mechanically blocked for you,
483
- and neither is anything else.
484
-
485
- So the full rule in AGENTS.md applies here in its entirety, not just its
486
- hook-enforced subset: when the user asks for a plan, review, audit or
487
- multi-step action, you are read-only until they answer with the literal **GO**
488
- — including file writes and `git commit`. On Claude Code a hook would catch the
489
- four worst cases if discipline failed. Here there is no backstop, which makes
490
- this the harness where the rule matters most, not least.
491
-
492
- ## Model routing
493
-
494
- The tier names in `agy-delegate` map to models that go stale — the built-in
495
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
496
- `agy models` after every upgrade; the id carries both the version and the
497
- effort suffix.
498
-
499
- | Work | Model |
500
- |---|---|
501
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
502
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
503
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
504
-
505
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
506
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
507
- source.
508
-
509
- Adversarial review is the case that most repays the stronger model: a Flash
510
- tier tends to agree with what it is shown, which is the one thing a reviewer
511
- must not do.
512
-
513
- ## Headless timeouts
514
-
515
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
516
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
517
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
518
- for anything non-trivial. A short timeout does not read as "slow", it reads as
519
- "broken".
520
-
521
- # AOS — Antigravity / Gemini
522
-
523
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
524
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
525
- skill contract and category routing, the pipeline variants, and the delegation
526
- policy. Nothing from it is repeated here — a rule that lives in two files is a
527
- rule that will eventually disagree with itself.
528
-
529
- This file covers only what is specific to running AOS under Antigravity.
530
-
531
- ## Nothing enforces the gate here — you are the enforcement
532
-
533
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
534
- harness. Not one of the four release commands is mechanically blocked for you,
535
- and neither is anything else.
536
-
537
- So the full rule in AGENTS.md applies here in its entirety, not just its
538
- hook-enforced subset: when the user asks for a plan, review, audit or
539
- multi-step action, you are read-only until they answer with the literal **GO**
540
- — including file writes and `git commit`. On Claude Code a hook would catch the
541
- four worst cases if discipline failed. Here there is no backstop, which makes
542
- this the harness where the rule matters most, not least.
543
-
544
- ## Model routing
545
-
546
- The tier names in `agy-delegate` map to models that go stale — the built-in
547
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
548
- `agy models` after every upgrade; the id carries both the version and the
549
- effort suffix.
550
-
551
- | Work | Model |
552
- |---|---|
553
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
554
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
555
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
556
-
557
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
558
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
559
- source.
560
-
561
- Adversarial review is the case that most repays the stronger model: a Flash
562
- tier tends to agree with what it is shown, which is the one thing a reviewer
563
- must not do.
564
-
565
- ## Headless timeouts
566
-
567
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
568
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
569
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
570
- for anything non-trivial. A short timeout does not read as "slow", it reads as
571
- "broken".
572
-
573
- # AOS — Antigravity / Gemini
574
-
575
- **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
576
- harnesses: the non-negotiables, the release gate, Conventional Commits, the
577
- skill contract and category routing, the pipeline variants, and the delegation
578
- policy. Nothing from it is repeated here — a rule that lives in two files is a
579
- rule that will eventually disagree with itself.
580
-
581
- This file covers only what is specific to running AOS under Antigravity.
582
-
583
- ## Nothing enforces the gate here — you are the enforcement
584
-
585
- `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run on this
586
- harness. Not one of the four release commands is mechanically blocked for you,
587
- and neither is anything else.
588
-
589
- So the full rule in AGENTS.md applies here in its entirety, not just its
590
- hook-enforced subset: when the user asks for a plan, review, audit or
591
- multi-step action, you are read-only until they answer with the literal **GO**
592
- — including file writes and `git commit`. On Claude Code a hook would catch the
593
- four worst cases if discipline failed. Here there is no backstop, which makes
594
- this the harness where the rule matters most, not least.
595
-
596
- ## Model routing
597
-
598
- The tier names in `agy-delegate` map to models that go stale — the built-in
599
- `flash` still points at Gemini 3.7 while 3.8 ships. Re-check against
600
- `agy models` after every upgrade; the id carries both the version and the
601
- effort suffix.
602
-
603
- | Work | Model |
604
- |---|---|
605
- | Media, fast or mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` |
606
- | Trivial one-liners | `Gemini 3.8 Flash (Low)` |
607
- | Review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` |
608
-
609
- Set these once via `CLAUDE_PLUGIN_OPTION_TIER_{FLASH,FLASH_LO,PRO}` in
610
- `~/.zshenv` — **not** `~/.zshrc`, which non-interactive tool shells never
611
- source.
612
-
613
- Adversarial review is the case that most repays the stronger model: a Flash
614
- tier tends to agree with what it is shown, which is the one thing a reviewer
615
- must not do.
616
-
617
- ## Headless timeouts
618
-
619
- A trivial headless `agy` prompt was measured at **605s** in 2026-09.
620
- `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at 300s and
621
- reports an empty body while the answer is still arriving. Pass `--timeout 15m`
622
- for anything non-trivial. A short timeout does not read as "slow", it reads as
623
- "broken".